OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 // Flags: --expose-wasm | |
6 | |
7 load("test/mjsunit/wasm/wasm-constants.js"); | |
8 load("test/mjsunit/wasm/wasm-module-builder.js"); | |
9 | |
10 // Set unittest to false to run this test and just print results, without failin g. | |
11 let unittest = true; | |
12 | |
13 function run(expected, name, code) { | |
14 let builder = new WasmModuleBuilder(); | |
15 builder.addFunction("main", kSig_v_v). | |
16 addBody(code); | |
17 let buffer = builder.toBuffer(); | |
18 | |
19 while (name.length < 32) name += " "; | |
20 | |
21 var valid = WebAssembly.validate(buffer); | |
22 var success = expected == undefined ? "" : (valid == expected ? "(pass)" : "(f ail)"); | |
23 if (valid) { | |
24 print(name + "| valid " + success); | |
25 } else { | |
26 print(name + "| invalid " + success); | |
27 } | |
28 | |
29 if (unittest && (expected !== undefined)) { | |
30 if (expected) assertTrue(valid); | |
rossberg
2017/01/19 08:14:29
Nit: why not assertTrue(valid === expected) ?
| |
31 else assertFalse(valid); | |
32 } | |
33 } | |
34 | |
35 let V = true; | |
36 let I = false; | |
37 let X = undefined; | |
38 | |
39 let nop = kExprNop; | |
40 let iadd = kExprI32Add; | |
41 let unr = kExprUnreachable; | |
42 let ret = kExprReturn; | |
43 let br0 = [kExprBr, 0] | |
44 let f32 = [kExprF32Const, 0, 0, 0, 0]; | |
45 let zero = [kExprI32Const, 0]; | |
46 let if_else_empty = [kExprIf, kWasmStmt, kExprElse, kExprEnd]; | |
47 let if_unr = [kExprIf, kWasmStmt, kExprUnreachable, kExprEnd]; | |
48 let if_else_unr = [kExprIf, kWasmStmt, kExprUnreachable, kExprElse, kExprUnreach able, kExprEnd]; | |
49 let block_unr = [kExprBlock, kWasmStmt, kExprUnreachable, kExprEnd]; | |
50 let loop_unr = [kExprLoop, kWasmStmt, kExprUnreachable, kExprEnd]; | |
51 let block_block_unr = [kExprBlock, kWasmStmt, kExprBlock, kWasmStmt, kExprUnreac hable, kExprEnd, kExprEnd]; | |
52 let drop = kExprDrop; | |
53 | |
54 run(V, "U", [unr]); | |
55 run(V, "U U", [unr, unr]); | |
56 run(V, "(if 0 () else ())", [...zero, ...if_else_empty]); | |
57 run(V, "(if 0 U)", [...zero, ...if_unr]); | |
58 run(V, "(if 0 U U)", [...zero, ...if_else_unr]); | |
59 run(I, "(if 0 U) iadd", [...zero, ...if_unr, iadd]); | |
60 run(V, "0 0 (if 0 U) iadd", [...zero, ...zero, ...zero, ...if_unr, iadd, drop]); | |
61 run(V, "(if 0 U) 0 0 iadd", [...zero, ...if_unr, ...zero, ...zero, iadd, drop]); | |
62 | |
63 run(V, "(block U)", [...block_unr]); | |
64 run(V, "(loop U)", [...loop_unr]); | |
65 run(V, "(if 0 U U)", [...zero, ...if_else_unr]); | |
66 | |
67 run(V, "U nop", [unr, nop]); | |
68 run(V, "U iadd", [unr, iadd]); | |
rossberg
2017/01/19 08:32:26
Oh, and you probably want to add drops here (and f
| |
69 run(V, "br0 iadd", [br0, iadd]); | |
70 run(V, "ret iadd", [ret, iadd]); | |
71 run(V, "(block U) iadd", [...block_unr, iadd]); | |
rossberg
2017/01/19 08:14:29
Could add "(block (block U)) iadd"
| |
72 run(V, "(loop U) iadd", [...loop_unr, iadd]); | |
73 run(V, "(if 0 U U) iadd", [...zero, ...if_else_unr, iadd]); | |
74 | |
75 run(V, "U 0 0 iadd", [unr, ...zero, ...zero, iadd]); | |
76 run(V, "(block U) 0 0 iadd", [...block_unr, ...zero, ...zero, iadd]); | |
77 run(V, "(loop U) 0 0 iadd", [...loop_unr, ...zero, ...zero, iadd]); | |
78 run(V, "(block (block U)) 0 0 iadd", [...block_block_unr, ...zero, ...zero, iadd ]); | |
79 run(V, "0 0 U iadd", [...zero, ...zero, unr, iadd]); | |
80 run(V, "0 0 (block U) iadd", [...zero, ...zero, ...block_unr, iadd]); | |
81 run(V, "0 0 (loop U) iadd", [...zero, ...zero, ...loop_unr, iadd]); | |
82 run(V, "0 0 (block (block U)) iadd", [...zero, ...zero, ...block_block_unr, iadd ]); | |
83 | |
84 run(I, "U F32 iadd", [unr, ...f32, iadd]); | |
rossberg
2017/01/19 08:14:29
You probably want to add a 0 operand before the F3
| |
85 run(I, "(if 0 U U) F32 iadd", [...zero, ...if_else_unr, ...f32, iadd]); | |
86 run(I, "(block U) F32 iadd", [...block_unr, ...f32, iadd]); | |
87 run(I, "(loop U) F32 iadd", [...loop_unr, ...f32, iadd]); | |
88 run(I, "(block (block U)) F32 iadd", [...block_block_unr, ...f32, iadd]); | |
rossberg
2017/01/19 08:14:29
Another relevant category:
"0 F32 U iadd"
"0 F32
| |
OLD | NEW |