OLD | NEW |
---|---|
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --expose-wasm | 5 // Flags: --expose-wasm |
6 | 6 |
7 function bytes() { | 7 function bytes() { |
8 var buffer = new ArrayBuffer(arguments.length); | 8 var buffer = new ArrayBuffer(arguments.length); |
9 var view = new Uint8Array(buffer); | 9 var view = new Uint8Array(buffer); |
10 for (var i = 0; i < arguments.length; i++) { | 10 for (var i = 0; i < arguments.length; i++) { |
11 var val = arguments[i]; | 11 var val = arguments[i]; |
12 if ((typeof val) == "string") val = val.charCodeAt(0); | 12 if ((typeof val) == "string") val = val.charCodeAt(0); |
13 view[i] = val | 0; | 13 view[i] = val | 0; |
14 } | 14 } |
15 return buffer; | 15 return buffer; |
16 } | 16 } |
17 | 17 |
18 // Header declaration constants | 18 // Header declaration constants |
19 var kWasmH0 = 0; | 19 var kWasmH0 = 0; |
20 var kWasmH1 = 0x61; | 20 var kWasmH1 = 0x61; |
21 var kWasmH2 = 0x73; | 21 var kWasmH2 = 0x73; |
22 var kWasmH3 = 0x6d; | 22 var kWasmH3 = 0x6d; |
23 | 23 |
24 var kWasmV0 = 0xC; | 24 var kWasmV0 = 0xD; |
25 var kWasmV1 = 0; | 25 var kWasmV1 = 0; |
26 var kWasmV2 = 0; | 26 var kWasmV2 = 0; |
27 var kWasmV3 = 0; | 27 var kWasmV3 = 0; |
28 | 28 |
29 var kHeaderSize = 8; | 29 var kHeaderSize = 8; |
30 var kPageSize = 65536; | 30 var kPageSize = 65536; |
31 | 31 |
32 function bytesWithHeader() { | 32 function bytesWithHeader() { |
33 var buffer = new ArrayBuffer(kHeaderSize + arguments.length); | 33 var buffer = new ArrayBuffer(kHeaderSize + arguments.length); |
34 var view = new Uint8Array(buffer); | 34 var view = new Uint8Array(buffer); |
35 view[0] = kWasmH0; | 35 view[0] = kWasmH0; |
36 view[1] = kWasmH1; | 36 view[1] = kWasmH1; |
37 view[2] = kWasmH2; | 37 view[2] = kWasmH2; |
38 view[3] = kWasmH3; | 38 view[3] = kWasmH3; |
39 view[4] = kWasmV0; | 39 view[4] = kWasmV0; |
40 view[5] = kWasmV1; | 40 view[5] = kWasmV1; |
41 view[6] = kWasmV2; | 41 view[6] = kWasmV2; |
42 view[7] = kWasmV3; | 42 view[7] = kWasmV3; |
43 for (var i = 0; i < arguments.length; i++) { | 43 for (var i = 0; i < arguments.length; i++) { |
44 var val = arguments[i]; | 44 var val = arguments[i]; |
45 if ((typeof val) == "string") val = val.charCodeAt(0); | 45 if ((typeof val) == "string") val = val.charCodeAt(0); |
46 view[kHeaderSize + i] = val | 0; | 46 view[kHeaderSize + i] = val | 0; |
47 } | 47 } |
48 return buffer; | 48 return buffer; |
49 } | 49 } |
50 | 50 |
51 var kDeclNoLocals = 0; | 51 let kDeclNoLocals = 0; |
52 | 52 |
53 // Section declaration constants | 53 // Section declaration constants |
54 var kUnknownSectionCode = 0; | 54 let kUnknownSectionCode = 0; |
55 var kTypeSectionCode = 1; // Function signature declarations | 55 let kTypeSectionCode = 1; // Function signature declarations |
56 var kImportSectionCode = 2; // Import declarations | 56 let kImportSectionCode = 2; // Import declarations |
57 var kFunctionSectionCode = 3; // Function declarations | 57 let kFunctionSectionCode = 3; // Function declarations |
58 var kTableSectionCode = 4; // Indirect function table and other tables | 58 let kTableSectionCode = 4; // Indirect function table and other tables |
59 var kMemorySectionCode = 5; // Memory attributes | 59 let kMemorySectionCode = 5; // Memory attributes |
60 var kGlobalSectionCode = 6; // Global declarations | 60 let kGlobalSectionCode = 6; // Global declarations |
61 var kExportSectionCode = 7; // Exports | 61 let kExportSectionCode = 7; // Exports |
62 var kStartSectionCode = 8; // Start function declaration | 62 let kStartSectionCode = 8; // Start function declaration |
63 var kElementSectionCode = 9; // Elements section | 63 let kElementSectionCode = 9; // Elements section |
64 var kCodeSectionCode = 10; // Function code | 64 let kCodeSectionCode = 10; // Function code |
65 var kDataSectionCode = 11; // Data segments | 65 let kDataSectionCode = 11; // Data segments |
66 var kNameSectionCode = 12; // Name section (encoded as string) | 66 let kNameSectionCode = 12; // Name section (encoded as string) |
67 | 67 |
68 var kWasmFunctionTypeForm = 0x40; | 68 let kWasmFunctionTypeForm = 0x60; |
69 var kWasmAnyFunctionTypeForm = 0x20; | 69 let kWasmAnyFunctionTypeForm = 0x70; |
70 | 70 |
71 var kResizableMaximumFlag = 1; | 71 let kResizableMaximumFlag = 1; |
72 | 72 |
73 // Function declaration flags | 73 // Function declaration flags |
74 var kDeclFunctionName = 0x01; | 74 let kDeclFunctionName = 0x01; |
75 var kDeclFunctionImport = 0x02; | 75 let kDeclFunctionImport = 0x02; |
76 var kDeclFunctionLocals = 0x04; | 76 let kDeclFunctionLocals = 0x04; |
77 var kDeclFunctionExport = 0x08; | 77 let kDeclFunctionExport = 0x08; |
78 | 78 |
79 // Local types | 79 // Local types |
80 var kAstStmt = 0; | 80 let kAstStmt = 0x40; |
81 var kAstI32 = 1; | 81 let kAstI32 = 0x7f; |
82 var kAstI64 = 2; | 82 let kAstI64 = 0x7e; |
83 var kAstF32 = 3; | 83 let kAstF32 = 0x7d; |
84 var kAstF64 = 4; | 84 let kAstF64 = 0x7c; |
85 var kAstS128 = 5; | 85 let kAstS128 = 0x7b; |
86 | 86 |
87 var kExternalFunction = 0; | 87 let kExternalFunction = 0; |
88 var kExternalTable = 1; | 88 let kExternalTable = 1; |
89 var kExternalMemory = 2; | 89 let kExternalMemory = 2; |
90 var kExternalGlobal = 3; | 90 let kExternalGlobal = 3; |
91 | |
92 let kTableZero = 0; | |
93 let kMemoryZero = 0; | |
91 | 94 |
92 // Useful signatures | 95 // Useful signatures |
93 var kSig_i_i = makeSig([kAstI32], [kAstI32]); | 96 let kSig_i_i = makeSig([kAstI32], [kAstI32]); |
94 var kSig_i_l = makeSig([kAstI64], [kAstI32]); | 97 let kSig_i_l = makeSig([kAstI64], [kAstI32]); |
95 var kSig_i_ii = makeSig([kAstI32, kAstI32], [kAstI32]); | 98 let kSig_i_ii = makeSig([kAstI32, kAstI32], [kAstI32]); |
96 var kSig_i_iii = makeSig([kAstI32, kAstI32, kAstI32], [kAstI32]); | 99 let kSig_i_iii = makeSig([kAstI32, kAstI32, kAstI32], [kAstI32]); |
97 var kSig_d_dd = makeSig([kAstF64, kAstF64], [kAstF64]); | 100 let kSig_d_dd = makeSig([kAstF64, kAstF64], [kAstF64]); |
98 var kSig_l_ll = makeSig([kAstI64, kAstI64], [kAstI64]); | 101 let kSig_l_ll = makeSig([kAstI64, kAstI64], [kAstI64]); |
99 var kSig_i_dd = makeSig([kAstF64, kAstF64], [kAstI32]); | 102 let kSig_i_dd = makeSig([kAstF64, kAstF64], [kAstI32]); |
100 var kSig_v_v = makeSig([], []); | 103 let kSig_v_v = makeSig([], []); |
101 var kSig_i_v = makeSig([], [kAstI32]); | 104 let kSig_i_v = makeSig([], [kAstI32]); |
102 var kSig_l_v = makeSig([], [kAstI64]); | 105 let kSig_l_v = makeSig([], [kAstI64]); |
103 var kSig_f_v = makeSig([], [kAstF64]); | 106 let kSig_f_v = makeSig([], [kAstF64]); |
104 var kSig_d_v = makeSig([], [kAstF64]); | 107 let kSig_d_v = makeSig([], [kAstF64]); |
105 var kSig_v_i = makeSig([kAstI32], []); | 108 let kSig_v_i = makeSig([kAstI32], []); |
106 var kSig_v_ii = makeSig([kAstI32, kAstI32], []); | 109 let kSig_v_ii = makeSig([kAstI32, kAstI32], []); |
107 var kSig_v_iii = makeSig([kAstI32, kAstI32, kAstI32], []); | 110 let kSig_v_iii = makeSig([kAstI32, kAstI32, kAstI32], []); |
108 var kSig_v_l = makeSig([kAstI64], []); | 111 let kSig_v_l = makeSig([kAstI64], []); |
109 var kSig_v_d = makeSig([kAstF64], []); | 112 let kSig_v_d = makeSig([kAstF64], []); |
110 var kSig_v_dd = makeSig([kAstF64, kAstF64], []); | 113 let kSig_v_dd = makeSig([kAstF64, kAstF64], []); |
111 var kSig_v_ddi = makeSig([kAstF64, kAstF64, kAstI32], []); | 114 let kSig_v_ddi = makeSig([kAstF64, kAstF64, kAstI32], []); |
112 var kSig_s_v = makeSig([], [kAstS128]); | 115 let kSig_s_v = makeSig([], [kAstS128]); |
113 | 116 |
114 function makeSig(params, results) { | 117 function makeSig(params, results) { |
115 return {params: params, results: results}; | 118 return {params: params, results: results}; |
116 } | 119 } |
117 | 120 |
118 function makeSig_v_x(x) { | 121 function makeSig_v_x(x) { |
119 return makeSig([x], []); | 122 return makeSig([x], []); |
120 } | 123 } |
121 | 124 |
122 function makeSig_v_xx(x) { | 125 function makeSig_v_xx(x) { |
123 return makeSig([x, x], []); | 126 return makeSig([x, x], []); |
124 } | 127 } |
125 | 128 |
126 function makeSig_r_v(r) { | 129 function makeSig_r_v(r) { |
127 return makeSig([], [r]); | 130 return makeSig([], [r]); |
128 } | 131 } |
129 | 132 |
130 function makeSig_r_x(r, x) { | 133 function makeSig_r_x(r, x) { |
131 return makeSig([x], [r]); | 134 return makeSig([x], [r]); |
132 } | 135 } |
133 | 136 |
134 function makeSig_r_xx(r, x) { | 137 function makeSig_r_xx(r, x) { |
135 return makeSig([x, x], [r]); | 138 return makeSig([x, x], [r]); |
136 } | 139 } |
137 | 140 |
138 // Opcodes | 141 // Opcodes |
139 var kExprUnreachable = 0x00; | 142 let kExprUnreachable = 0x00; |
140 var kExprNop = 0x0a; | 143 let kExprNop = 0x01; |
141 var kExprBlock = 0x01; | 144 let kExprBlock = 0x02; |
142 var kExprLoop = 0x02; | 145 let kExprLoop = 0x03; |
143 var kExprIf = 0x03; | 146 let kExprIf = 0x04; |
144 var kExprElse = 0x04; | 147 let kExprElse = 0x05; |
145 var kExprSelect = 0x05; | 148 let kExprTry = 0x06; |
146 var kExprBr = 0x06; | 149 let kExprCatch = 0x07; |
147 var kExprBrIf = 0x07; | 150 let kExprThrow = 0x08; |
148 var kExprBrTable = 0x08; | 151 let kExprEnd = 0x0b; |
149 var kExprReturn = 0x09; | 152 let kExprBr = 0x0c; |
150 var kExprThrow = 0xfa; | 153 let kExprBrIf = 0x0d; |
151 var kExprTry = 0xfb; | 154 let kExprBrTable = 0x0e; |
152 var kExprCatch = 0xfe; | 155 let kExprReturn = 0x0f; |
153 var kExprEnd = 0x0f; | 156 let kExprCallFunction = 0x10; |
154 var kExprTeeLocal = 0x19; | 157 let kExprCallIndirect = 0x11; |
155 var kExprDrop = 0x0b; | 158 let kExprDrop = 0x1a; |
159 let kExprSelect = 0x1b; | |
160 let kExprGetLocal = 0x20; | |
161 let kExprSetLocal = 0x21; | |
162 let kExprTeeLocal = 0x22; | |
163 let kExprGetGlobal = 0x23; | |
164 let kExprSetGlobal = 0x24; | |
165 let kExprI32Const = 0x41; | |
166 let kExprI64Const = 0x42; | |
167 let kExprF32Const = 0x43; | |
168 let kExprF64Const = 0x44; | |
169 let kExprI8Const = 0xcb; | |
170 let kExprI32LoadMem = 0x28; | |
171 let kExprI64LoadMem = 0x29; | |
172 let kExprF32LoadMem = 0x2a; | |
173 let kExprF64LoadMem = 0x2b; | |
174 let kExprI32LoadMem8S = 0x2c; | |
175 let kExprI32LoadMem8U = 0x2d; | |
176 let kExprI32LoadMem16S = 0x2e; | |
177 let kExprI32LoadMem16U = 0x2f; | |
178 let kExprI64LoadMem8S = 0x30; | |
179 let kExprI64LoadMem8U = 0x31; | |
180 let kExprI64LoadMem16S = 0x32; | |
181 let kExprI64LoadMem16U = 0x33; | |
182 let kExprI64LoadMem32S = 0x34; | |
183 let kExprI64LoadMem32U = 0x35; | |
184 let kExprI32StoreMem = 0x36; | |
185 let kExprI64StoreMem = 0x37; | |
186 let kExprF32StoreMem = 0x38; | |
187 let kExprF64StoreMem = 0x39; | |
188 let kExprI32StoreMem8 = 0x3a; | |
189 let kExprI32StoreMem16 = 0x3b; | |
190 let kExprI64StoreMem8 = 0x3c; | |
191 let kExprI64StoreMem16 = 0x3d; | |
192 let kExprI64StoreMem32 = 0x3e; | |
193 let kExprMemorySize = 0x3f; | |
194 let kExprGrowMemory = 0x40; | |
195 let kExprI32Eqz = 0x45; | |
196 let kExprI32Eq = 0x46; | |
197 let kExprI32Ne = 0x47; | |
198 let kExprI32LtS = 0x48; | |
rossberg
2016/10/21 11:41:23
Same order mismatch for comparisons in this file.
titzer
2016/10/21 12:29:39
Done.
| |
199 let kExprI32LeS = 0x49; | |
200 let kExprI32LtU = 0x4a; | |
201 let kExprI32LeU = 0x4b; | |
202 let kExprI32GtS = 0x4c; | |
203 let kExprI32GeS = 0x4d; | |
204 let kExprI32GtU = 0x4e; | |
205 let kExprI32GeU = 0x4f; | |
206 let kExprI64Eqz = 0x50; | |
207 let kExprI64Eq = 0x51; | |
208 let kExprI64Ne = 0x52; | |
209 let kExprI64LtS = 0x53; | |
210 let kExprI64LeS = 0x54; | |
211 let kExprI64LtU = 0x55; | |
212 let kExprI64LeU = 0x56; | |
213 let kExprI64GtS = 0x57; | |
214 let kExprI64GeS = 0x58; | |
215 let kExprI64GtU = 0x59; | |
216 let kExprI64GeU = 0x5a; | |
217 let kExprF32Eq = 0x5b; | |
218 let kExprF32Ne = 0x5c; | |
219 let kExprF32Lt = 0x5d; | |
220 let kExprF32Le = 0x5e; | |
221 let kExprF32Gt = 0x5f; | |
222 let kExprF32Ge = 0x60; | |
223 let kExprF64Eq = 0x61; | |
224 let kExprF64Ne = 0x62; | |
225 let kExprF64Lt = 0x63; | |
226 let kExprF64Le = 0x64; | |
227 let kExprF64Gt = 0x65; | |
228 let kExprF64Ge = 0x66; | |
229 let kExprI32Clz = 0x67; | |
230 let kExprI32Ctz = 0x68; | |
231 let kExprI32Popcnt = 0x69; | |
232 let kExprI32Add = 0x6a; | |
233 let kExprI32Sub = 0x6b; | |
234 let kExprI32Mul = 0x6c; | |
235 let kExprI32DivS = 0x6d; | |
236 let kExprI32DivU = 0x6e; | |
237 let kExprI32RemS = 0x6f; | |
238 let kExprI32RemU = 0x70; | |
239 let kExprI32And = 0x71; | |
240 let kExprI32Ior = 0x72; | |
241 let kExprI32Xor = 0x73; | |
242 let kExprI32Shl = 0x74; | |
243 let kExprI32ShrS = 0x75; | |
244 let kExprI32ShrU = 0x76; | |
245 let kExprI32Rol = 0x77; | |
246 let kExprI32Ror = 0x78; | |
247 let kExprI64Clz = 0x79; | |
248 let kExprI64Ctz = 0x7a; | |
249 let kExprI64Popcnt = 0x7b; | |
250 let kExprI64Add = 0x7c; | |
251 let kExprI64Sub = 0x7d; | |
252 let kExprI64Mul = 0x7e; | |
253 let kExprI64DivS = 0x7f; | |
254 let kExprI64DivU = 0x80; | |
255 let kExprI64RemS = 0x81; | |
256 let kExprI64RemU = 0x82; | |
257 let kExprI64And = 0x83; | |
258 let kExprI64Ior = 0x84; | |
259 let kExprI64Xor = 0x85; | |
260 let kExprI64Shl = 0x86; | |
261 let kExprI64ShrS = 0x87; | |
262 let kExprI64ShrU = 0x88; | |
263 let kExprI64Rol = 0x89; | |
264 let kExprI64Ror = 0x8a; | |
265 let kExprF32Abs = 0x8b; | |
266 let kExprF32Neg = 0x8c; | |
267 let kExprF32CopySign = 0x8d; | |
268 let kExprF32Ceil = 0x8e; | |
269 let kExprF32Floor = 0x8f; | |
270 let kExprF32Trunc = 0x90; | |
271 let kExprF32NearestInt = 0x91; | |
272 let kExprF32Sqrt = 0x92; | |
273 let kExprF32Add = 0x93; | |
274 let kExprF32Sub = 0x94; | |
275 let kExprF32Mul = 0x95; | |
276 let kExprF32Div = 0x96; | |
277 let kExprF32Min = 0x97; | |
278 let kExprF32Max = 0x98; | |
279 let kExprF64Abs = 0x99; | |
280 let kExprF64Neg = 0x9a; | |
281 let kExprF64CopySign = 0x9b; | |
282 let kExprF64Ceil = 0x9c; | |
283 let kExprF64Floor = 0x9d; | |
284 let kExprF64Trunc = 0x9e; | |
285 let kExprF64NearestInt = 0x9f; | |
286 let kExprF64Sqrt = 0xa0; | |
287 let kExprF64Add = 0xa1; | |
288 let kExprF64Sub = 0xa2; | |
289 let kExprF64Mul = 0xa3; | |
290 let kExprF64Div = 0xa4; | |
291 let kExprF64Min = 0xa5; | |
292 let kExprF64Max = 0xa6; | |
293 let kExprI32ConvertI64 = 0xa7; | |
294 let kExprI32SConvertF32 = 0xa8; | |
295 let kExprI32UConvertF32 = 0xa9; | |
296 let kExprI32SConvertF64 = 0xaa; | |
297 let kExprI32UConvertF64 = 0xab; | |
298 let kExprI64SConvertI32 = 0xac; | |
299 let kExprI64UConvertI32 = 0xad; | |
300 let kExprI64SConvertF32 = 0xae; | |
301 let kExprI64UConvertF32 = 0xaf; | |
302 let kExprI64SConvertF64 = 0xb0; | |
303 let kExprI64UConvertF64 = 0xb1; | |
304 let kExprF32SConvertI32 = 0xb2; | |
305 let kExprF32UConvertI32 = 0xb3; | |
306 let kExprF32SConvertI64 = 0xb4; | |
307 let kExprF32UConvertI64 = 0xb5; | |
308 let kExprF32ConvertF64 = 0xb6; | |
309 let kExprF64SConvertI32 = 0xb7; | |
310 let kExprF64UConvertI32 = 0xb8; | |
311 let kExprF64SConvertI64 = 0xb9; | |
312 let kExprF64UConvertI64 = 0xba; | |
313 let kExprF64ConvertF32 = 0xbb; | |
314 let kExprI32ReinterpretF32 = 0xbc; | |
315 let kExprI64ReinterpretF64 = 0xbd; | |
316 let kExprF32ReinterpretI32 = 0xbe; | |
317 let kExprF64ReinterpretI64 = 0xbf; | |
156 | 318 |
157 var kExprI32Const = 0x10; | 319 let kTrapUnreachable = 0; |
158 var kExprI64Const = 0x11; | 320 let kTrapMemOutOfBounds = 1; |
159 var kExprF64Const = 0x12; | 321 let kTrapDivByZero = 2; |
160 var kExprF32Const = 0x13; | 322 let kTrapDivUnrepresentable = 3; |
161 var kExprGetLocal = 0x14; | 323 let kTrapRemByZero = 4; |
162 var kExprSetLocal = 0x15; | 324 let kTrapFloatUnrepresentable = 5; |
163 var kExprCallFunction = 0x16; | 325 let kTrapFuncInvalid = 6; |
164 var kExprCallIndirect = 0x17; | 326 let kTrapFuncSigMismatch = 7; |
165 var kExprI8Const = 0xcb; | 327 let kTrapInvalidIndex = 8; |
166 var kExprGetGlobal = 0xbb; | |
167 var kExprSetGlobal = 0xbc; | |
168 | 328 |
169 var kExprI32LoadMem8S = 0x20; | 329 let kTrapMsgs = [ |
170 var kExprI32LoadMem8U = 0x21; | |
171 var kExprI32LoadMem16S = 0x22; | |
172 var kExprI32LoadMem16U = 0x23; | |
173 var kExprI64LoadMem8S = 0x24; | |
174 var kExprI64LoadMem8U = 0x25; | |
175 var kExprI64LoadMem16S = 0x26; | |
176 var kExprI64LoadMem16U = 0x27; | |
177 var kExprI64LoadMem32S = 0x28; | |
178 var kExprI64LoadMem32U = 0x29; | |
179 var kExprI32LoadMem = 0x2a; | |
180 var kExprI64LoadMem = 0x2b; | |
181 var kExprF32LoadMem = 0x2c; | |
182 var kExprF64LoadMem = 0x2d; | |
183 | |
184 var kExprI32StoreMem8 = 0x2e; | |
185 var kExprI32StoreMem16 = 0x2f; | |
186 var kExprI64StoreMem8 = 0x30; | |
187 var kExprI64StoreMem16 = 0x31; | |
188 var kExprI64StoreMem32 = 0x32; | |
189 var kExprI32StoreMem = 0x33; | |
190 var kExprI64StoreMem = 0x34; | |
191 var kExprF32StoreMem = 0x35; | |
192 var kExprF64StoreMem = 0x36; | |
193 | |
194 var kExprMemorySize = 0x3b; | |
195 var kExprGrowMemory = 0x39; | |
196 | |
197 var kExprI32Add = 0x40; | |
198 var kExprI32Sub = 0x41; | |
199 var kExprI32Mul = 0x42; | |
200 var kExprI32DivS = 0x43; | |
201 var kExprI32DivU = 0x44; | |
202 var kExprI32RemS = 0x45; | |
203 var kExprI32RemU = 0x46; | |
204 var kExprI32And = 0x47; | |
205 var kExprI32Ior = 0x48; | |
206 var kExprI32Xor = 0x49; | |
207 var kExprI32Shl = 0x4a; | |
208 var kExprI32ShrU = 0x4b; | |
209 var kExprI32ShrS = 0x4c; | |
210 var kExprI32Eq = 0x4d; | |
211 var kExprI32Ne = 0x4e; | |
212 var kExprI32LtS = 0x4f; | |
213 var kExprI32LeS = 0x50; | |
214 var kExprI32LtU = 0x51; | |
215 var kExprI32LeU = 0x52; | |
216 var kExprI32GtS = 0x53; | |
217 var kExprI32GeS = 0x54; | |
218 var kExprI32GtU = 0x55; | |
219 var kExprI32GeU = 0x56; | |
220 var kExprI32Clz = 0x57; | |
221 var kExprI32Ctz = 0x58; | |
222 var kExprI32Popcnt = 0x59; | |
223 var kExprI32Eqz = 0x5a; | |
224 var kExprI64Add = 0x5b; | |
225 var kExprI64Sub = 0x5c; | |
226 var kExprI64Mul = 0x5d; | |
227 var kExprI64DivS = 0x5e; | |
228 var kExprI64DivU = 0x5f; | |
229 var kExprI64RemS = 0x60; | |
230 var kExprI64RemU = 0x61; | |
231 var kExprI64And = 0x62; | |
232 var kExprI64Ior = 0x63; | |
233 var kExprI64Xor = 0x64; | |
234 var kExprI64Shl = 0x65; | |
235 var kExprI64ShrU = 0x66; | |
236 var kExprI64ShrS = 0x67; | |
237 var kExprI64Eq = 0x68; | |
238 var kExprI64Ne = 0x69; | |
239 var kExprI64LtS = 0x6a; | |
240 var kExprI64LeS = 0x6b; | |
241 var kExprI64LtU = 0x6c; | |
242 var kExprI64LeU = 0x6d; | |
243 var kExprI64GtS = 0x6e; | |
244 var kExprI64GeS = 0x6f; | |
245 var kExprI64GtU = 0x70; | |
246 var kExprI64GeU = 0x71; | |
247 var kExprI64Clz = 0x72; | |
248 var kExprI64Ctz = 0x73; | |
249 var kExprI64Popcnt = 0x74; | |
250 var kExprF32Add = 0x75; | |
251 var kExprF32Sub = 0x76; | |
252 var kExprF32Mul = 0x77; | |
253 var kExprF32Div = 0x78; | |
254 var kExprF32Min = 0x79; | |
255 var kExprF32Max = 0x7a; | |
256 var kExprF32Abs = 0x7b; | |
257 var kExprF32Neg = 0x7c; | |
258 var kExprF32CopySign = 0x7d; | |
259 var kExprF32Ceil = 0x7e; | |
260 var kExprF32Floor = 0x7f; | |
261 var kExprF32Trunc = 0x80; | |
262 var kExprF32NearestInt = 0x81; | |
263 var kExprF32Sqrt = 0x82; | |
264 var kExprF32Eq = 0x83; | |
265 var kExprF32Ne = 0x84; | |
266 var kExprF32Lt = 0x85; | |
267 var kExprF32Le = 0x86; | |
268 var kExprF32Gt = 0x87; | |
269 var kExprF32Ge = 0x88; | |
270 var kExprF64Add = 0x89; | |
271 var kExprF64Sub = 0x8a; | |
272 var kExprF64Mul = 0x8b; | |
273 var kExprF64Div = 0x8c; | |
274 var kExprF64Min = 0x8d; | |
275 var kExprF64Max = 0x8e; | |
276 var kExprF64Abs = 0x8f; | |
277 var kExprF64Neg = 0x90; | |
278 var kExprF64CopySign = 0x91; | |
279 var kExprF64Ceil = 0x92; | |
280 var kExprF64Floor = 0x93; | |
281 var kExprF64Trunc = 0x94; | |
282 var kExprF64NearestInt = 0x95; | |
283 var kExprF64Sqrt = 0x96; | |
284 var kExprF64Eq = 0x97; | |
285 var kExprF64Ne = 0x98; | |
286 var kExprF64Lt = 0x99; | |
287 var kExprF64Le = 0x9a; | |
288 var kExprF64Gt = 0x9b; | |
289 var kExprF64Ge = 0x9c; | |
290 var kExprI32SConvertF32 = 0x9d; | |
291 var kExprI32SConvertF64 = 0x9e; | |
292 var kExprI32UConvertF32 = 0x9f; | |
293 var kExprI32UConvertF64 = 0xa0; | |
294 var kExprI32ConvertI64 = 0xa1; | |
295 var kExprI64SConvertF32 = 0xa2; | |
296 var kExprI64SConvertF64 = 0xa3; | |
297 var kExprI64UConvertF32 = 0xa4; | |
298 var kExprI64UConvertF64 = 0xa5; | |
299 var kExprI64SConvertI32 = 0xa6; | |
300 var kExprI64UConvertI32 = 0xa7; | |
301 var kExprF32SConvertI32 = 0xa8; | |
302 var kExprF32UConvertI32 = 0xa9; | |
303 var kExprF32SConvertI64 = 0xaa; | |
304 var kExprF32UConvertI64 = 0xab; | |
305 var kExprF32ConvertF64 = 0xac; | |
306 var kExprF32ReinterpretI32 = 0xad; | |
307 var kExprF64SConvertI32 = 0xae; | |
308 var kExprF64UConvertI32 = 0xaf; | |
309 var kExprF64SConvertI64 = 0xb0; | |
310 var kExprF64UConvertI64 = 0xb1; | |
311 var kExprF64ConvertF32 = 0xb2; | |
312 var kExprF64ReinterpretI64 = 0xb3; | |
313 var kExprI32ReinterpretF32 = 0xb4; | |
314 var kExprI64ReinterpretF64 = 0xb5; | |
315 var kExprI32Ror = 0xb6; | |
316 var kExprI32Rol = 0xb7; | |
317 var kExprI64Ror = 0xb8; | |
318 var kExprI64Rol = 0xb9; | |
319 | |
320 var kTrapUnreachable = 0; | |
321 var kTrapMemOutOfBounds = 1; | |
322 var kTrapDivByZero = 2; | |
323 var kTrapDivUnrepresentable = 3; | |
324 var kTrapRemByZero = 4; | |
325 var kTrapFloatUnrepresentable = 5; | |
326 var kTrapFuncInvalid = 6; | |
327 var kTrapFuncSigMismatch = 7; | |
328 var kTrapInvalidIndex = 8; | |
329 | |
330 var kTrapMsgs = [ | |
331 "unreachable", | 330 "unreachable", |
332 "memory access out of bounds", | 331 "memory access out of bounds", |
333 "divide by zero", | 332 "divide by zero", |
334 "divide result unrepresentable", | 333 "divide result unrepresentable", |
335 "remainder by zero", | 334 "remainder by zero", |
336 "integer result unrepresentable", | 335 "integer result unrepresentable", |
337 "invalid function", | 336 "invalid function", |
338 "function signature mismatch", | 337 "function signature mismatch", |
339 "invalid index into function table" | 338 "invalid index into function table" |
340 ]; | 339 ]; |
(...skipping 25 matching lines...) Expand all Loading... | |
366 eval(code); | 365 eval(code); |
367 } | 366 } |
368 } catch (e) { | 367 } catch (e) { |
369 assertEquals("number", typeof e); | 368 assertEquals("number", typeof e); |
370 assertEquals(value, e); | 369 assertEquals(value, e); |
371 // Success. | 370 // Success. |
372 return; | 371 return; |
373 } | 372 } |
374 throw new MjsUnitAssertionError("Did not throw at all, expected: " + value); | 373 throw new MjsUnitAssertionError("Did not throw at all, expected: " + value); |
375 } | 374 } |
OLD | NEW |