Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / ARES-6 / Air / symbols.js
1 /*
2  * Copyright (C) 2016 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25 "use strict";
26
27 // This file is for misc symbols.
28
29 // B3 types
30 const Void = Symbol("Void");
31 const Int32 = Symbol("Int32");
32 const Int64 = Symbol("Int64");
33 const Float = Symbol("Float");
34 const Double = Symbol("Double");
35
36 // Arg type
37 const GP = Symbol("GP");
38 const FP = Symbol("FP");
39
40 // Stack slot kind
41 const Locked = Symbol("Locked");
42 const Spill = Symbol("Spill");
43
44 // Frequency class
45 const Normal = Symbol("Normal");
46 const Rare = Symbol("Rare");
47
48 // Relational conditions
49 const Equal = Symbol("Equal");
50 const NotEqual = Symbol("NotEqual");
51 const Above = Symbol("Above");
52 const AboveOrEqual = Symbol("AboveOrEqual");
53 const Below = Symbol("Below");
54 const BelowOrEqual = Symbol("BelowOrEqual");
55 const GreaterThan = Symbol("GreaterThan");
56 const GreaterThanOrEqual = Symbol("GreaterThanOrEqual");
57 const LessThan = Symbol("LessThan");
58 const LessThanOrEqual = Symbol("LessThanOrEqual");
59
60 function relCondCode(cond)
61 {
62     switch (cond) {
63     case Equal:
64         return 4;
65     case NotEqual:
66         return 5;
67     case Above:
68         return 7;
69     case AboveOrEqual:
70         return 3;
71     case Below:
72         return 2;
73     case BelowOrEqual:
74         return 6;
75     case GreaterThan:
76         return 15;
77     case GreaterThanOrEqual:
78         return 13;
79     case LessThan:
80         return 12;
81     case LessThanOrEqual:
82         return 14;
83     default:
84         throw new Error("Bad rel cond");
85     }
86 }
87
88 // Result conditions
89 const Overflow = Symbol("Overflow");
90 const Signed = Symbol("Signed");
91 const PositiveOrZero = Symbol("PositiveOrZero");
92 const Zero = Symbol("Zero");
93 const NonZero = Symbol("NonZero");
94
95 function resCondCode(cond)
96 {
97     switch (cond) {
98     case Overflow:
99         return 0;
100     case Signed:
101         return 8;
102     case PositiveOrZero:
103         return 9;
104     case Zero:
105         return 4;
106     case NonZero:
107         return 5;
108     default:
109         throw new Error("Bad res cond: " + cond.toString());
110     }
111 }
112
113 // Double conditions
114 const DoubleEqual = Symbol("DoubleEqual");
115 const DoubleNotEqual = Symbol("DoubleNotEqual");
116 const DoubleGreaterThan = Symbol("DoubleGreaterThan");
117 const DoubleGreaterThanOrEqual = Symbol("DoubleGreaterThanOrEqual");
118 const DoubleLessThan = Symbol("DoubleLessThan");
119 const DoubleLessThanOrEqual = Symbol("DoubleLessThanOrEqual");
120 const DoubleEqualOrUnordered = Symbol("DoubleEqualOrUnordered");
121 const DoubleNotEqualOrUnordered = Symbol("DoubleNotEqualOrUnordered");
122 const DoubleGreaterThanOrUnordered = Symbol("DoubleGreaterThanOrUnordered");
123 const DoubleGreaterThanOrEqualOrUnordered = Symbol("DoubleGreaterThanOrEqualOrUnordered");
124 const DoubleLessThanOrUnordered = Symbol("DoubleLessThanOrUnordered");
125 const DoubleLessThanOrEqualOrUnordered = Symbol("DoubleLessThanOrEqualOrUnordered");
126
127 function doubleCondCode(cond)
128 {
129     const bitInvert = 0x10;
130     const bitSpecial = 0x20;
131     switch (cond) {
132     case DoubleEqual:
133         return 4 | bitSpecial;
134     case DoubleNotEqual:
135         return 5;
136     case DoubleGreaterThan:
137         return 7;
138     case DoubleGreaterThanOrEqual:
139         return 3;
140     case DoubleLessThan:
141         return 7 | bitInvert;
142     case DoubleLessThanOrEqual:
143         return 3 | bitInvert;
144     case DoubleEqualOrUnordered:
145         return 4;
146     case DoubleNotEqualOrUnordered:
147         return 5 | bitSpecial;
148     case DoubleGreaterThanOrUnordered:
149         return 2 | bitInvert;
150     case DoubleGreaterThanOrEqualOrUnordered:
151         return 6 | bitInvert;
152     case DoubleLessThanOrUnordered:
153         return 2;
154     case DoubleLessThanOrEqualOrUnordered:
155         return 6;
156     default:
157         throw new Error("Bad cond");
158     }
159 }
160
161 // Define pointerType()
162 const Ptr = 64;