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

Side by Side Diff: test/mjsunit/wasm/asm-wasm-switch.js

Issue 2264913002: [wasm] asm.js - Remove Wasm.instantiateModuleFromAsm, use asm.js directly. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix Created 4 years, 4 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
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 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: --validate-asm --allow-natives-syntax
6
7 function assertValidAsm(func) {
8 assertTrue(%IsAsmWasmCode(func) ||
9 %GetOptimizationStatus(func) === 3);
10 }
6 11
7 (function TestSwitch0() { 12 (function TestSwitch0() {
8 function asmModule() { 13 function asmModule() {
9 "use asm" 14 "use asm"
10 15
11 function caller() { 16 function caller() {
12 var ret = 0; 17 var ret = 0;
13 var x = 7; 18 var x = 7;
14 switch (x|0) { 19 switch (x|0) {
15 case 1: { 20 case 1: {
16 return 0; 21 return 0;
17 } 22 }
18 case 7: { 23 case 7: {
19 ret = 5; 24 ret = 5;
20 break; 25 break;
21 } 26 }
22 default: return 0; 27 default: return 0;
23 } 28 }
24 return ret|0; 29 return ret|0;
25 } 30 }
26 31
27 return {caller:caller}; 32 return {caller:caller};
28 } 33 }
29 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 34 var wasm = asmModule();
35 assertValidAsm(asmModule);
30 assertEquals(5, wasm.caller()); 36 assertEquals(5, wasm.caller());
31 })(); 37 })();
32 38
33 (function TestSwitch() { 39 (function TestSwitch() {
34 function asmModule() { 40 function asmModule() {
35 "use asm" 41 "use asm"
36 42
37 function caller() { 43 function caller() {
38 var ret = 0; 44 var ret = 0;
39 var x = 7; 45 var x = 7;
40 switch (x|0) { 46 switch (x|0) {
41 case 1: return 0; 47 case 1: return 0;
42 case 7: { 48 case 7: {
43 ret = 12; 49 ret = 12;
44 break; 50 break;
45 } 51 }
46 default: return 0; 52 default: return 0;
47 } 53 }
48 switch (x|0) { 54 switch (x|0) {
49 case 1: return 0; 55 case 1: return 0;
50 case 8: return 0; 56 case 8: return 0;
51 default: ret = (ret + 11)|0; 57 default: ret = (ret + 11)|0;
52 } 58 }
53 return ret|0; 59 return ret|0;
54 } 60 }
55 61
56 return {caller:caller}; 62 return {caller:caller};
57 } 63 }
58 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 64 var wasm = asmModule();
65 assertValidAsm(asmModule);
59 assertEquals(23, wasm.caller()); 66 assertEquals(23, wasm.caller());
60 })(); 67 })();
61 68
62 (function TestSwitchFallthrough() { 69 (function TestSwitchFallthrough() {
63 function asmModule() { 70 function asmModule() {
64 "use asm" 71 "use asm"
65 72
66 function caller() { 73 function caller() {
67 var x = 17; 74 var x = 17;
68 var ret = 0; 75 var ret = 0;
69 switch (x|0) { 76 switch (x|0) {
70 case 17: 77 case 17:
71 case 14: ret = 39; 78 case 14: ret = 39;
72 case 1: ret = (ret + 3)|0; 79 case 1: ret = (ret + 3)|0;
73 case 4: break; 80 case 4: break;
74 default: ret = (ret + 1)|0; 81 default: ret = (ret + 1)|0;
75 } 82 }
76 return ret|0; 83 return ret|0;
77 } 84 }
78 85
79 return {caller:caller}; 86 return {caller:caller};
80 } 87 }
81 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 88 var wasm = asmModule();
89 assertValidAsm(asmModule);
82 assertEquals(42, wasm.caller()); 90 assertEquals(42, wasm.caller());
83 })(); 91 })();
84 92
85 (function TestNestedSwitch() { 93 (function TestNestedSwitch() {
86 function asmModule() { 94 function asmModule() {
87 "use asm" 95 "use asm"
88 96
89 function caller() { 97 function caller() {
90 var x = 3; 98 var x = 3;
91 var y = -13; 99 var y = -13;
92 switch (x|0) { 100 switch (x|0) {
93 case 1: return 0; 101 case 1: return 0;
94 case 3: { 102 case 3: {
95 switch (y|0) { 103 switch (y|0) {
96 case 2: return 0; 104 case 2: return 0;
97 case -13: return 43; 105 case -13: return 43;
98 default: return 0; 106 default: return 0;
99 } 107 }
100 } 108 }
101 default: return 0; 109 default: return 0;
102 } 110 }
103 return 0; 111 return 0;
104 } 112 }
105 113
106 return {caller:caller}; 114 return {caller:caller};
107 } 115 }
108 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 116 var wasm = asmModule();
117 assertValidAsm(asmModule);
109 assertEquals(43, wasm.caller()); 118 assertEquals(43, wasm.caller());
110 })(); 119 })();
111 120
112 (function TestSwitchWithDefaultOnly() { 121 (function TestSwitchWithDefaultOnly() {
113 function asmModule() { 122 function asmModule() {
114 "use asm"; 123 "use asm";
115 function main(x) { 124 function main(x) {
116 x = x|0; 125 x = x|0;
117 switch(x|0) { 126 switch(x|0) {
118 default: return -10; 127 default: return -10;
119 } 128 }
120 return 0; 129 return 0;
121 } 130 }
122 return { 131 return {
123 main: main, 132 main: main,
124 }; 133 };
125 } 134 }
126 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 135 var wasm = asmModule();
136 assertValidAsm(asmModule);
127 assertEquals(-10, wasm.main(2)); 137 assertEquals(-10, wasm.main(2));
128 assertEquals(-10, wasm.main(54)); 138 assertEquals(-10, wasm.main(54));
129 })(); 139 })();
130 140
131 (function TestEmptySwitch() { 141 (function TestEmptySwitch() {
132 function asmModule() { 142 function asmModule() {
133 "use asm"; 143 "use asm";
134 function main(x) { 144 function main(x) {
135 x = x|0; 145 x = x|0;
136 switch(x|0) { 146 switch(x|0) {
137 } 147 }
138 return 73; 148 return 73;
139 } 149 }
140 return { 150 return {
141 main: main, 151 main: main,
142 }; 152 };
143 } 153 }
144 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 154 var wasm = asmModule();
155 assertValidAsm(asmModule);
145 assertEquals(73, wasm.main(7)); 156 assertEquals(73, wasm.main(7));
146 })(); 157 })();
147 158
148 (function TestSwitchWithBrTable() { 159 (function TestSwitchWithBrTable() {
149 function asmModule() { 160 function asmModule() {
150 "use asm"; 161 "use asm";
151 function main(x) { 162 function main(x) {
152 x = x|0; 163 x = x|0;
153 switch(x|0) { 164 switch(x|0) {
154 case 14: return 23; 165 case 14: return 23;
155 case 12: return 25; 166 case 12: return 25;
156 case 15: return 29; 167 case 15: return 29;
157 case 19: return 34; 168 case 19: return 34;
158 case 18: return 17; 169 case 18: return 17;
159 case 16: return 16; 170 case 16: return 16;
160 default: return -1; 171 default: return -1;
161 } 172 }
162 return 0; 173 return 0;
163 } 174 }
164 return { 175 return {
165 main: main, 176 main: main,
166 }; 177 };
167 } 178 }
168 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 179 var wasm = asmModule();
180 assertValidAsm(asmModule);
169 assertEquals(25, wasm.main(12)); 181 assertEquals(25, wasm.main(12));
170 assertEquals(23, wasm.main(14)); 182 assertEquals(23, wasm.main(14));
171 assertEquals(29, wasm.main(15)); 183 assertEquals(29, wasm.main(15));
172 assertEquals(16, wasm.main(16)); 184 assertEquals(16, wasm.main(16));
173 assertEquals(17, wasm.main(18)); 185 assertEquals(17, wasm.main(18));
174 assertEquals(34, wasm.main(19)); 186 assertEquals(34, wasm.main(19));
175 assertEquals(-1, wasm.main(-1)); 187 assertEquals(-1, wasm.main(-1));
176 })(); 188 })();
177 189
178 (function TestSwitchWithBalancedTree() { 190 (function TestSwitchWithBalancedTree() {
179 function asmModule() { 191 function asmModule() {
180 "use asm"; 192 "use asm";
181 function main(x) { 193 function main(x) {
182 x = x|0; 194 x = x|0;
183 switch(x|0) { 195 switch(x|0) {
184 case 5: return 52; 196 case 5: return 52;
185 case 1: return 11; 197 case 1: return 11;
186 case 6: return 63; 198 case 6: return 63;
187 case 9: return 19; 199 case 9: return 19;
188 case -4: return -4; 200 case -4: return -4;
189 } 201 }
190 return 0; 202 return 0;
191 } 203 }
192 return { 204 return {
193 main: main, 205 main: main,
194 }; 206 };
195 } 207 }
196 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 208 var wasm = asmModule();
209 assertValidAsm(asmModule);
197 assertEquals(-4, wasm.main(-4)); 210 assertEquals(-4, wasm.main(-4));
198 assertEquals(11, wasm.main(1)); 211 assertEquals(11, wasm.main(1));
199 assertEquals(52, wasm.main(5)); 212 assertEquals(52, wasm.main(5));
200 assertEquals(63, wasm.main(6)); 213 assertEquals(63, wasm.main(6));
201 assertEquals(19, wasm.main(9)); 214 assertEquals(19, wasm.main(9));
202 assertEquals(0, wasm.main(11)); 215 assertEquals(0, wasm.main(11));
203 })(); 216 })();
204 217
205 (function TestSwitchHybrid() { 218 (function TestSwitchHybrid() {
206 function asmModule() { 219 function asmModule() {
(...skipping 12 matching lines...) Expand all
219 case 13: return 31; 232 case 13: return 31;
220 case 16: return 16; 233 case 16: return 16;
221 default: return -1; 234 default: return -1;
222 } 235 }
223 return 0; 236 return 0;
224 } 237 }
225 return { 238 return {
226 main: main, 239 main: main,
227 }; 240 };
228 } 241 }
229 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 242 var wasm = asmModule();
243 assertValidAsm(asmModule);
230 assertEquals(-4, wasm.main(1)); 244 assertEquals(-4, wasm.main(1));
231 assertEquals(23, wasm.main(2)); 245 assertEquals(23, wasm.main(2));
232 assertEquals(32, wasm.main(3)); 246 assertEquals(32, wasm.main(3));
233 assertEquals(14, wasm.main(4)); 247 assertEquals(14, wasm.main(4));
234 assertEquals(17, wasm.main(7)); 248 assertEquals(17, wasm.main(7));
235 assertEquals(10, wasm.main(10)); 249 assertEquals(10, wasm.main(10));
236 assertEquals(121, wasm.main(11)); 250 assertEquals(121, wasm.main(11));
237 assertEquals(112, wasm.main(12)); 251 assertEquals(112, wasm.main(12));
238 assertEquals(31, wasm.main(13)); 252 assertEquals(31, wasm.main(13));
239 assertEquals(16, wasm.main(16)); 253 assertEquals(16, wasm.main(16));
(...skipping 26 matching lines...) Expand all
266 ret = 10; 280 ret = 10;
267 break; 281 break;
268 } 282 }
269 } 283 }
270 return ret|0; 284 return ret|0;
271 } 285 }
272 return { 286 return {
273 main: main, 287 main: main,
274 }; 288 };
275 } 289 }
276 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 290 var wasm = asmModule();
291 assertValidAsm(asmModule);
277 assertEquals(12, wasm.main(2)); 292 assertEquals(12, wasm.main(2));
278 assertEquals(10, wasm.main(10)); 293 assertEquals(10, wasm.main(10));
279 assertEquals(54, wasm.main(3)); 294 assertEquals(54, wasm.main(3));
280 })(); 295 })();
281 296
282 (function TestSwitchFallthroughHybrid() { 297 (function TestSwitchFallthroughHybrid() {
283 function asmModule() { 298 function asmModule() {
284 "use asm"; 299 "use asm";
285 function main(x) { 300 function main(x) {
286 x = x|0; 301 x = x|0;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 ret = -1; 342 ret = -1;
328 break; 343 break;
329 } 344 }
330 } 345 }
331 return ret|0; 346 return ret|0;
332 } 347 }
333 return { 348 return {
334 main: main, 349 main: main,
335 }; 350 };
336 } 351 }
337 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 352 var wasm = asmModule();
353 assertValidAsm(asmModule);
338 assertEquals(7, wasm.main(4)); 354 assertEquals(7, wasm.main(4));
339 assertEquals(16, wasm.main(10)); 355 assertEquals(16, wasm.main(10));
340 assertEquals(-1, wasm.main(19)); 356 assertEquals(-1, wasm.main(19));
341 assertEquals(-1, wasm.main(23)); 357 assertEquals(-1, wasm.main(23));
342 })(); 358 })();
343 359
344 (function TestSwitchHybridWithNoDefault() { 360 (function TestSwitchHybridWithNoDefault() {
345 function asmModule() { 361 function asmModule() {
346 "use asm"; 362 "use asm";
347 function main(x) { 363 function main(x) {
(...skipping 20 matching lines...) Expand all
368 ret = 7; 384 ret = 7;
369 break; 385 break;
370 } 386 }
371 } 387 }
372 return ret|0; 388 return ret|0;
373 } 389 }
374 return { 390 return {
375 main: main, 391 main: main,
376 }; 392 };
377 } 393 }
378 var wasm = Wasm.instantiateModuleFromAsm(asmModule.toString()); 394 var wasm = asmModule();
395 assertValidAsm(asmModule);
379 assertEquals(2, wasm.main(2)); 396 assertEquals(2, wasm.main(2));
380 assertEquals(7, wasm.main(7)); 397 assertEquals(7, wasm.main(7));
381 assertEquals(19, wasm.main(-1)); 398 assertEquals(19, wasm.main(-1));
382 })(); 399 })();
383 400
384 (function TestLargeSwitch() { 401 (function TestLargeSwitch() {
385 function LargeSwitchGenerator(begin, end, gap, handle_case) { 402 function LargeSwitchGenerator(begin, end, gap, handle_case) {
386 var str = "function asmModule() {\ 403 var str = "function asmModule() {\
387 \"use asm\";\ 404 \"use asm\";\
388 function main(x) {\ 405 function main(x) {\
389 x = x|0;\ 406 x = x|0;\
390 switch(x|0) {"; 407 switch(x|0) {";
391 for (var i = begin; i <= end; i = i + gap) { 408 for (var i = begin; i <= end; i = i + gap) {
392 str = str.concat("case ", i.toString(), ": ", handle_case(i)); 409 str = str.concat("case ", i.toString(), ": ", handle_case(i));
393 } 410 }
394 str = str.concat("default: return -1;\ 411 str = str.concat("default: return -1;\
395 }\ 412 }\
396 return -2;\ 413 return -2;\
397 }\ 414 }\
398 return {main: main}; }"); 415 return {main: main}; }");
399 416
400 var wasm = Wasm.instantiateModuleFromAsm(str); 417 var decl = eval('(' + str + ')');
418 var wasm = decl();
419 assertValidAsm(decl);
401 return wasm; 420 return wasm;
402 } 421 }
403 422
404 var handle_case = function(k) { 423 var handle_case = function(k) {
405 return "return ".concat(k, ";"); 424 return "return ".concat(k, ";");
406 } 425 }
407 var wasm = LargeSwitchGenerator(0, 513, 1, handle_case); 426 var wasm = LargeSwitchGenerator(0, 513, 1, handle_case);
408 for (var i = 0; i <= 513; i++) { 427 for (var i = 0; i <= 513; i++) {
409 assertEquals(i, wasm.main(i)); 428 assertEquals(i, wasm.main(i));
410 } 429 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 if (k != 56) return "break;"; 478 if (k != 56) return "break;";
460 else return "return 23;"; 479 else return "return 23;";
461 } 480 }
462 wasm = LargeSwitchGenerator(0, 638, 2, handle_case); 481 wasm = LargeSwitchGenerator(0, 638, 2, handle_case);
463 for (var i = 0; i <= 638; i = i + 2) { 482 for (var i = 0; i <= 638; i = i + 2) {
464 if (i == 56) assertEquals(23, wasm.main(i)); 483 if (i == 56) assertEquals(23, wasm.main(i));
465 else assertEquals(-2, wasm.main(i)); 484 else assertEquals(-2, wasm.main(i));
466 } 485 }
467 assertEquals(-1, wasm.main(-1)); 486 assertEquals(-1, wasm.main(-1));
468 })(); 487 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698