Chromium Code Reviews| 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 |