Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: third_party/WebKit/LayoutTests/fast/wasm/wasm-constants.js

Issue 2702953002: [wasm] Block compile/instantiate of large array buffers (Closed)
Patch Set: tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 the V8 project authors. All rights reserved.
bradnelson 2017/02/18 22:16:22 2017 + Chromium / Blink to match where this is lan
Mircea Trofin 2017/02/19 00:18:33 Done.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --expose-wasm
6
7 function bytes() {
8 var buffer = new ArrayBuffer(arguments.length);
9 var view = new Uint8Array(buffer);
10 for (var i = 0; i < arguments.length; i++) {
11 var val = arguments[i];
12 if ((typeof val) == "string") val = val.charCodeAt(0);
13 view[i] = val | 0;
14 }
15 return buffer;
16 }
17
18 // Header declaration constants
19 var kWasmH0 = 0;
20 var kWasmH1 = 0x61;
21 var kWasmH2 = 0x73;
22 var kWasmH3 = 0x6d;
23
24 var kWasmV0 = 0x1;
25 var kWasmV1 = 0;
26 var kWasmV2 = 0;
27 var kWasmV3 = 0;
28
29 var kHeaderSize = 8;
30 var kPageSize = 65536;
31
32 function bytesWithHeader() {
33 var buffer = new ArrayBuffer(kHeaderSize + arguments.length);
34 var view = new Uint8Array(buffer);
35 view[0] = kWasmH0;
36 view[1] = kWasmH1;
37 view[2] = kWasmH2;
38 view[3] = kWasmH3;
39 view[4] = kWasmV0;
40 view[5] = kWasmV1;
41 view[6] = kWasmV2;
42 view[7] = kWasmV3;
43 for (var i = 0; i < arguments.length; i++) {
44 var val = arguments[i];
45 if ((typeof val) == "string") val = val.charCodeAt(0);
46 view[kHeaderSize + i] = val | 0;
47 }
48 return buffer;
49 }
50
51 let kDeclNoLocals = 0;
52
53 // Section declaration constants
54 let kUnknownSectionCode = 0;
55 let kTypeSectionCode = 1; // Function signature declarations
56 let kImportSectionCode = 2; // Import declarations
57 let kFunctionSectionCode = 3; // Function declarations
58 let kTableSectionCode = 4; // Indirect function table and other tables
59 let kMemorySectionCode = 5; // Memory attributes
60 let kGlobalSectionCode = 6; // Global declarations
61 let kExportSectionCode = 7; // Exports
62 let kStartSectionCode = 8; // Start function declaration
63 let kElementSectionCode = 9; // Elements section
64 let kCodeSectionCode = 10; // Function code
65 let kDataSectionCode = 11; // Data segments
66 let kNameSectionCode = 12; // Name section (encoded as string)
67
68 let kWasmFunctionTypeForm = 0x60;
69 let kWasmAnyFunctionTypeForm = 0x70;
70
71 let kResizableMaximumFlag = 1;
72
73 // Function declaration flags
74 let kDeclFunctionName = 0x01;
75 let kDeclFunctionImport = 0x02;
76 let kDeclFunctionLocals = 0x04;
77 let kDeclFunctionExport = 0x08;
78
79 // Local types
80 let kWasmStmt = 0x40;
81 let kWasmI32 = 0x7f;
82 let kWasmI64 = 0x7e;
83 let kWasmF32 = 0x7d;
84 let kWasmF64 = 0x7c;
85 let kWasmS128 = 0x7b;
86
87 let kExternalFunction = 0;
88 let kExternalTable = 1;
89 let kExternalMemory = 2;
90 let kExternalGlobal = 3;
91
92 let kTableZero = 0;
93 let kMemoryZero = 0;
94
95 // Useful signatures
96 let kSig_i_i = makeSig([kWasmI32], [kWasmI32]);
97 let kSig_l_l = makeSig([kWasmI64], [kWasmI64]);
98 let kSig_i_l = makeSig([kWasmI64], [kWasmI32]);
99 let kSig_i_ii = makeSig([kWasmI32, kWasmI32], [kWasmI32]);
100 let kSig_i_iii = makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32]);
101 let kSig_d_dd = makeSig([kWasmF64, kWasmF64], [kWasmF64]);
102 let kSig_l_ll = makeSig([kWasmI64, kWasmI64], [kWasmI64]);
103 let kSig_i_dd = makeSig([kWasmF64, kWasmF64], [kWasmI32]);
104 let kSig_v_v = makeSig([], []);
105 let kSig_i_v = makeSig([], [kWasmI32]);
106 let kSig_l_v = makeSig([], [kWasmI64]);
107 let kSig_f_v = makeSig([], [kWasmF64]);
108 let kSig_d_v = makeSig([], [kWasmF64]);
109 let kSig_v_i = makeSig([kWasmI32], []);
110 let kSig_v_ii = makeSig([kWasmI32, kWasmI32], []);
111 let kSig_v_iii = makeSig([kWasmI32, kWasmI32, kWasmI32], []);
112 let kSig_v_l = makeSig([kWasmI64], []);
113 let kSig_v_d = makeSig([kWasmF64], []);
114 let kSig_v_dd = makeSig([kWasmF64, kWasmF64], []);
115 let kSig_v_ddi = makeSig([kWasmF64, kWasmF64, kWasmI32], []);
116 let kSig_s_v = makeSig([], [kWasmS128]);
117
118 function makeSig(params, results) {
119 return {params: params, results: results};
120 }
121
122 function makeSig_v_x(x) {
123 return makeSig([x], []);
124 }
125
126 function makeSig_v_xx(x) {
127 return makeSig([x, x], []);
128 }
129
130 function makeSig_r_v(r) {
131 return makeSig([], [r]);
132 }
133
134 function makeSig_r_x(r, x) {
135 return makeSig([x], [r]);
136 }
137
138 function makeSig_r_xx(r, x) {
139 return makeSig([x, x], [r]);
140 }
141
142 // Opcodes
143 let kExprUnreachable = 0x00;
144 let kExprNop = 0x01;
145 let kExprBlock = 0x02;
146 let kExprLoop = 0x03;
147 let kExprIf = 0x04;
148 let kExprElse = 0x05;
149 let kExprTry = 0x06;
150 let kExprCatch = 0x07;
151 let kExprThrow = 0x08;
152 let kExprEnd = 0x0b;
153 let kExprBr = 0x0c;
154 let kExprBrIf = 0x0d;
155 let kExprBrTable = 0x0e;
156 let kExprReturn = 0x0f;
157 let kExprCallFunction = 0x10;
158 let kExprCallIndirect = 0x11;
159 let kExprDrop = 0x1a;
160 let kExprSelect = 0x1b;
161 let kExprGetLocal = 0x20;
162 let kExprSetLocal = 0x21;
163 let kExprTeeLocal = 0x22;
164 let kExprGetGlobal = 0x23;
165 let kExprSetGlobal = 0x24;
166 let kExprI32Const = 0x41;
167 let kExprI64Const = 0x42;
168 let kExprF32Const = 0x43;
169 let kExprF64Const = 0x44;
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;
199 let kExprI32LtU = 0x49;
200 let kExprI32GtS = 0x4a;
201 let kExprI32GtU = 0x4b;
202 let kExprI32LeS = 0x4c;
203 let kExprI32LeU = 0x4d;
204 let kExprI32GeS = 0x4e;
205 let kExprI32GeU = 0x4f;
206 let kExprI64Eqz = 0x50;
207 let kExprI64Eq = 0x51;
208 let kExprI64Ne = 0x52;
209 let kExprI64LtS = 0x53;
210 let kExprI64LtU = 0x54;
211 let kExprI64GtS = 0x55;
212 let kExprI64GtU = 0x56;
213 let kExprI64LeS = 0x57;
214 let kExprI64LeU = 0x58;
215 let kExprI64GeS = 0x59;
216 let kExprI64GeU = 0x5a;
217 let kExprF32Eq = 0x5b;
218 let kExprF32Ne = 0x5c;
219 let kExprF32Lt = 0x5d;
220 let kExprF32Gt = 0x5e;
221 let kExprF32Le = 0x5f;
222 let kExprF32Ge = 0x60;
223 let kExprF64Eq = 0x61;
224 let kExprF64Ne = 0x62;
225 let kExprF64Lt = 0x63;
226 let kExprF64Gt = 0x64;
227 let kExprF64Le = 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 kExprF32Ceil = 0x8d;
268 let kExprF32Floor = 0x8e;
269 let kExprF32Trunc = 0x8f;
270 let kExprF32NearestInt = 0x90;
271 let kExprF32Sqrt = 0x91;
272 let kExprF32Add = 0x92;
273 let kExprF32Sub = 0x93;
274 let kExprF32Mul = 0x94;
275 let kExprF32Div = 0x95;
276 let kExprF32Min = 0x96;
277 let kExprF32Max = 0x97;
278 let kExprF32CopySign = 0x98;
279 let kExprF64Abs = 0x99;
280 let kExprF64Neg = 0x9a;
281 let kExprF64Ceil = 0x9b;
282 let kExprF64Floor = 0x9c;
283 let kExprF64Trunc = 0x9d;
284 let kExprF64NearestInt = 0x9e;
285 let kExprF64Sqrt = 0x9f;
286 let kExprF64Add = 0xa0;
287 let kExprF64Sub = 0xa1;
288 let kExprF64Mul = 0xa2;
289 let kExprF64Div = 0xa3;
290 let kExprF64Min = 0xa4;
291 let kExprF64Max = 0xa5;
292 let kExprF64CopySign = 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;
318
319 let kTrapUnreachable = 0;
320 let kTrapMemOutOfBounds = 1;
321 let kTrapDivByZero = 2;
322 let kTrapDivUnrepresentable = 3;
323 let kTrapRemByZero = 4;
324 let kTrapFloatUnrepresentable = 5;
325 let kTrapFuncInvalid = 6;
326 let kTrapFuncSigMismatch = 7;
327 let kTrapInvalidIndex = 8;
328
329 let kTrapMsgs = [
330 "unreachable",
331 "memory access out of bounds",
332 "divide by zero",
333 "divide result unrepresentable",
334 "remainder by zero",
335 "integer result unrepresentable",
336 "invalid function",
337 "function signature mismatch",
338 "invalid index into function table"
339 ];
340
341 function assertTraps(trap, code) {
342 var threwException = true;
bradnelson 2017/02/18 22:16:22 Indent 2 per JS style guide.
Mircea Trofin 2017/02/19 00:18:33 Done.
343 try {
344 if (typeof code === 'function') {
345 code();
346 } else {
347 eval(code);
348 }
349 threwException = false;
350 } catch (e) {
351 assertEquals("object", typeof e);
352 assertEquals(kTrapMsgs[trap], e.message);
353 // Success.
354 return;
355 }
356 throw new MjsUnitAssertionError("Did not trap, expected: " + kTrapMsgs[trap] );
bradnelson 2017/02/18 22:16:22 >80
Mircea Trofin 2017/02/19 00:18:33 Done.
357 }
358
359 function assertWasmThrows(value, code) {
360 assertEquals("number", typeof(value));
361 try {
362 if (typeof code === 'function') {
363 code();
364 } else {
365 eval(code);
366 }
367 } catch (e) {
368 assertEquals("number", typeof e);
369 assertEquals(value, e);
370 // Success.
371 return;
372 }
373 throw new MjsUnitAssertionError("Did not throw at all, expected: " + value);
374 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698