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

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

Powered by Google App Engine
This is Rietveld 408576698