| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 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 | 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 #include <stdint.h> | 5 #include <stdint.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "src/base/platform/elapsed-timer.h" | 9 #include "src/base/platform/elapsed-timer.h" |
| 10 | 10 |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 } | 867 } |
| 868 | 868 |
| 869 WASM_EXEC_TEST(BrTable1) { | 869 WASM_EXEC_TEST(BrTable1) { |
| 870 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 870 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 871 BUILD(r, B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0))), RET_I8(93)); | 871 BUILD(r, B1(WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0))), RET_I8(93)); |
| 872 FOR_INT32_INPUTS(i) { CHECK_EQ(93, r.Call(*i)); } | 872 FOR_INT32_INPUTS(i) { CHECK_EQ(93, r.Call(*i)); } |
| 873 } | 873 } |
| 874 | 874 |
| 875 WASM_EXEC_TEST(BrTable_loop) { | 875 WASM_EXEC_TEST(BrTable_loop) { |
| 876 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 876 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 877 BUILD(r, | 877 BUILD(r, B2(WASM_LOOP(WASM_BR_TABLE(WASM_INC_LOCAL_BY(0, 1), 2, BR_TARGET(2), |
| 878 B2(WASM_LOOP(1, WASM_BR_TABLE(WASM_INC_LOCAL_BY(0, 1), 2, BR_TARGET(2), | |
| 879 BR_TARGET(1), BR_TARGET(0))), | 878 BR_TARGET(1), BR_TARGET(0))), |
| 880 RET_I8(99)), | 879 RET_I8(99)), |
| 881 WASM_I8(98)); | 880 WASM_I8(98)); |
| 882 CHECK_EQ(99, r.Call(0)); | 881 CHECK_EQ(99, r.Call(0)); |
| 883 CHECK_EQ(98, r.Call(-1)); | 882 CHECK_EQ(98, r.Call(-1)); |
| 884 CHECK_EQ(98, r.Call(-2)); | 883 CHECK_EQ(98, r.Call(-2)); |
| 885 CHECK_EQ(98, r.Call(-3)); | 884 CHECK_EQ(98, r.Call(-3)); |
| 886 CHECK_EQ(98, r.Call(-100)); | 885 CHECK_EQ(98, r.Call(-100)); |
| 887 } | 886 } |
| 888 | 887 |
| 889 WASM_EXEC_TEST(BrTable_br) { | 888 WASM_EXEC_TEST(BrTable_br) { |
| 890 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 889 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 module.WriteMemory(&memory[0], expected); | 1014 module.WriteMemory(&memory[0], expected); |
| 1016 CHECK_EQ(expected, r.Call()); | 1015 CHECK_EQ(expected, r.Call()); |
| 1017 } | 1016 } |
| 1018 } | 1017 } |
| 1019 | 1018 |
| 1020 WASM_EXEC_TEST(I32ReinterpretF32) { | 1019 WASM_EXEC_TEST(I32ReinterpretF32) { |
| 1021 TestingModule module(execution_mode); | 1020 TestingModule module(execution_mode); |
| 1022 int32_t* memory = module.AddMemoryElems<int32_t>(8); | 1021 int32_t* memory = module.AddMemoryElems<int32_t>(8); |
| 1023 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1022 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
| 1024 | 1023 |
| 1025 BUILD(r, WASM_BLOCK( | 1024 BUILD(r, |
| 1026 2, WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, | 1025 WASM_BLOCK(WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, |
| 1027 WASM_F32_REINTERPRET_I32(WASM_GET_LOCAL(0))), | 1026 WASM_F32_REINTERPRET_I32(WASM_GET_LOCAL(0))), |
| 1028 WASM_I8(107))); | 1027 WASM_I8(107))); |
| 1029 | 1028 |
| 1030 FOR_INT32_INPUTS(i) { | 1029 FOR_INT32_INPUTS(i) { |
| 1031 int32_t expected = *i; | 1030 int32_t expected = *i; |
| 1032 CHECK_EQ(107, r.Call(expected)); | 1031 CHECK_EQ(107, r.Call(expected)); |
| 1033 CHECK_EQ(expected, module.ReadMemory(&memory[0])); | 1032 CHECK_EQ(expected, module.ReadMemory(&memory[0])); |
| 1034 } | 1033 } |
| 1035 } | 1034 } |
| 1036 | 1035 |
| 1037 WASM_EXEC_TEST(ReturnStore) { | 1036 WASM_EXEC_TEST(ReturnStore) { |
| 1038 TestingModule module(execution_mode); | 1037 TestingModule module(execution_mode); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 } | 1130 } |
| 1132 | 1131 |
| 1133 WASM_EXEC_TEST(Loop_empty) { | 1132 WASM_EXEC_TEST(Loop_empty) { |
| 1134 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1133 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1135 BUILD(r, kExprLoop, kExprEnd, WASM_GET_LOCAL(0)); | 1134 BUILD(r, kExprLoop, kExprEnd, WASM_GET_LOCAL(0)); |
| 1136 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 1135 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
| 1137 } | 1136 } |
| 1138 | 1137 |
| 1139 WASM_EXEC_TEST(Loop_empty_br1) { | 1138 WASM_EXEC_TEST(Loop_empty_br1) { |
| 1140 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1139 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1141 BUILD(r, WASM_LOOP(1, WASM_BR(1)), WASM_GET_LOCAL(0)); | 1140 BUILD(r, WASM_LOOP(WASM_BR(1)), WASM_GET_LOCAL(0)); |
| 1142 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 1141 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
| 1143 } | 1142 } |
| 1144 | 1143 |
| 1145 WASM_EXEC_TEST(Loop_empty_brif1) { | 1144 WASM_EXEC_TEST(Loop_empty_brif1) { |
| 1146 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1145 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1147 BUILD(r, WASM_LOOP(1, WASM_BR_IF(1, WASM_ZERO)), WASM_GET_LOCAL(0)); | 1146 BUILD(r, WASM_LOOP(WASM_BR_IF(1, WASM_ZERO)), WASM_GET_LOCAL(0)); |
| 1148 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } | 1147 FOR_INT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i)); } |
| 1149 } | 1148 } |
| 1150 | 1149 |
| 1151 WASM_EXEC_TEST(Loop_empty_brif2) { | 1150 WASM_EXEC_TEST(Loop_empty_brif2) { |
| 1152 WasmRunner<uint32_t> r(execution_mode, MachineType::Uint32(), | 1151 WasmRunner<uint32_t> r(execution_mode, MachineType::Uint32(), |
| 1153 MachineType::Uint32()); | 1152 MachineType::Uint32()); |
| 1154 BUILD(r, WASM_LOOP(1, WASM_BR_IF(1, WASM_GET_LOCAL(1))), WASM_GET_LOCAL(0)); | 1153 BUILD(r, WASM_LOOP(WASM_BR_IF(1, WASM_GET_LOCAL(1))), WASM_GET_LOCAL(0)); |
| 1155 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i, *i + 1)); } | 1154 FOR_UINT32_INPUTS(i) { CHECK_EQ(*i, r.Call(*i, *i + 1)); } |
| 1156 } | 1155 } |
| 1157 | 1156 |
| 1158 WASM_EXEC_TEST(Block_BrIf_P) { | 1157 WASM_EXEC_TEST(Block_BrIf_P) { |
| 1159 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1158 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1160 BUILD(r, B2(WASM_BRV_IF(0, WASM_I8(51), WASM_GET_LOCAL(0)), WASM_I8(52))); | 1159 BUILD(r, B2(WASM_BRV_IF(0, WASM_I8(51), WASM_GET_LOCAL(0)), WASM_I8(52))); |
| 1161 FOR_INT32_INPUTS(i) { | 1160 FOR_INT32_INPUTS(i) { |
| 1162 int32_t expected = *i ? 51 : 52; | 1161 int32_t expected = *i ? 51 : 52; |
| 1163 CHECK_EQ(expected, r.Call(*i)); | 1162 CHECK_EQ(expected, r.Call(*i)); |
| 1164 } | 1163 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1187 RET_I8(82))); // -- | 1186 RET_I8(82))); // -- |
| 1188 FOR_INT32_INPUTS(i) { | 1187 FOR_INT32_INPUTS(i) { |
| 1189 int32_t expected = *i ? 81 : 82; | 1188 int32_t expected = *i ? 81 : 82; |
| 1190 CHECK_EQ(expected, r.Call(*i)); | 1189 CHECK_EQ(expected, r.Call(*i)); |
| 1191 } | 1190 } |
| 1192 } | 1191 } |
| 1193 | 1192 |
| 1194 WASM_EXEC_TEST(Block_If_P_assign) { | 1193 WASM_EXEC_TEST(Block_If_P_assign) { |
| 1195 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1194 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1196 // { if (p0) p0 = 61; p0; } | 1195 // { if (p0) p0 = 61; p0; } |
| 1197 BUILD(r, WASM_BLOCK( | 1196 BUILD(r, |
| 1198 2, WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_I8(61))), | 1197 WASM_BLOCK(WASM_IF(WASM_GET_LOCAL(0), WASM_SET_LOCAL(0, WASM_I8(61))), |
| 1199 WASM_GET_LOCAL(0))); | 1198 WASM_GET_LOCAL(0))); |
| 1200 FOR_INT32_INPUTS(i) { | 1199 FOR_INT32_INPUTS(i) { |
| 1201 int32_t expected = *i ? 61 : *i; | 1200 int32_t expected = *i ? 61 : *i; |
| 1202 CHECK_EQ(expected, r.Call(*i)); | 1201 CHECK_EQ(expected, r.Call(*i)); |
| 1203 } | 1202 } |
| 1204 } | 1203 } |
| 1205 | 1204 |
| 1206 WASM_EXEC_TEST(DanglingAssign) { | 1205 WASM_EXEC_TEST(DanglingAssign) { |
| 1207 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1206 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1208 // { return 0; p0 = 0; } | 1207 // { return 0; p0 = 0; } |
| 1209 BUILD(r, B2(RET_I8(99), WASM_SET_LOCAL(0, WASM_ZERO))); | 1208 BUILD(r, B2(RET_I8(99), WASM_SET_LOCAL(0, WASM_ZERO))); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1229 WASM_I8(11), // -- | 1228 WASM_I8(11), // -- |
| 1230 WASM_I8(22))); // -- | 1229 WASM_I8(22))); // -- |
| 1231 FOR_INT32_INPUTS(i) { | 1230 FOR_INT32_INPUTS(i) { |
| 1232 int32_t expected = *i ? 11 : 22; | 1231 int32_t expected = *i ? 11 : 22; |
| 1233 CHECK_EQ(expected, r.Call(*i)); | 1232 CHECK_EQ(expected, r.Call(*i)); |
| 1234 } | 1233 } |
| 1235 } | 1234 } |
| 1236 | 1235 |
| 1237 WASM_EXEC_TEST(CountDown) { | 1236 WASM_EXEC_TEST(CountDown) { |
| 1238 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1237 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1239 BUILD(r, | 1238 BUILD(r, WASM_BLOCK( |
| 1240 WASM_BLOCK( | 1239 WASM_LOOP(WASM_IF( |
| 1241 2, WASM_LOOP( | 1240 WASM_GET_LOCAL(0), |
| 1242 1, WASM_IF(WASM_GET_LOCAL(0), | 1241 WASM_BRV(1, WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), |
| 1243 WASM_BRV(1, WASM_SET_LOCAL( | |
| 1244 0, WASM_I32_SUB(WASM_GET_LOCAL(0), | |
| 1245 WASM_I8(1)))))), | 1242 WASM_I8(1)))))), |
| 1246 WASM_GET_LOCAL(0))); | 1243 WASM_GET_LOCAL(0))); |
| 1247 CHECK_EQ(0, r.Call(1)); | 1244 CHECK_EQ(0, r.Call(1)); |
| 1248 CHECK_EQ(0, r.Call(10)); | 1245 CHECK_EQ(0, r.Call(10)); |
| 1249 CHECK_EQ(0, r.Call(100)); | 1246 CHECK_EQ(0, r.Call(100)); |
| 1250 } | 1247 } |
| 1251 | 1248 |
| 1252 WASM_EXEC_TEST(CountDown_fallthru) { | 1249 WASM_EXEC_TEST(CountDown_fallthru) { |
| 1253 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1250 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1254 BUILD(r, | 1251 BUILD(r, WASM_BLOCK( |
| 1255 WASM_BLOCK( | 1252 WASM_LOOP(WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), WASM_BREAK(1)), |
| 1256 2, WASM_LOOP(3, WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), WASM_BREAK(1)), | |
| 1257 WASM_SET_LOCAL( | 1253 WASM_SET_LOCAL( |
| 1258 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), | 1254 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), |
| 1259 WASM_CONTINUE(0)), | 1255 WASM_CONTINUE(0)), |
| 1260 WASM_GET_LOCAL(0))); | 1256 WASM_GET_LOCAL(0))); |
| 1261 CHECK_EQ(0, r.Call(1)); | 1257 CHECK_EQ(0, r.Call(1)); |
| 1262 CHECK_EQ(0, r.Call(10)); | 1258 CHECK_EQ(0, r.Call(10)); |
| 1263 CHECK_EQ(0, r.Call(100)); | 1259 CHECK_EQ(0, r.Call(100)); |
| 1264 } | 1260 } |
| 1265 | 1261 |
| 1266 WASM_EXEC_TEST(WhileCountDown) { | 1262 WASM_EXEC_TEST(WhileCountDown) { |
| 1267 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1263 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1268 BUILD(r, WASM_BLOCK( | 1264 BUILD(r, |
| 1269 2, WASM_WHILE(WASM_GET_LOCAL(0), | 1265 WASM_BLOCK(WASM_WHILE(WASM_GET_LOCAL(0), |
| 1270 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), | 1266 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), |
| 1271 WASM_I8(1)))), | 1267 WASM_I8(1)))), |
| 1272 WASM_GET_LOCAL(0))); | 1268 WASM_GET_LOCAL(0))); |
| 1273 CHECK_EQ(0, r.Call(1)); | 1269 CHECK_EQ(0, r.Call(1)); |
| 1274 CHECK_EQ(0, r.Call(10)); | 1270 CHECK_EQ(0, r.Call(10)); |
| 1275 CHECK_EQ(0, r.Call(100)); | 1271 CHECK_EQ(0, r.Call(100)); |
| 1276 } | 1272 } |
| 1277 | 1273 |
| 1278 WASM_EXEC_TEST(Loop_if_break1) { | 1274 WASM_EXEC_TEST(Loop_if_break1) { |
| 1279 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1275 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1280 BUILD(r, B2(WASM_LOOP(2, WASM_IF(WASM_GET_LOCAL(0), WASM_BREAK(1)), | 1276 BUILD(r, B2(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BREAK(1)), |
| 1281 WASM_SET_LOCAL(0, WASM_I8(99))), | 1277 WASM_SET_LOCAL(0, WASM_I8(99))), |
| 1282 WASM_GET_LOCAL(0))); | 1278 WASM_GET_LOCAL(0))); |
| 1283 CHECK_EQ(99, r.Call(0)); | 1279 CHECK_EQ(99, r.Call(0)); |
| 1284 CHECK_EQ(3, r.Call(3)); | 1280 CHECK_EQ(3, r.Call(3)); |
| 1285 CHECK_EQ(10000, r.Call(10000)); | 1281 CHECK_EQ(10000, r.Call(10000)); |
| 1286 CHECK_EQ(-29, r.Call(-29)); | 1282 CHECK_EQ(-29, r.Call(-29)); |
| 1287 } | 1283 } |
| 1288 | 1284 |
| 1289 WASM_EXEC_TEST(Loop_if_break2) { | 1285 WASM_EXEC_TEST(Loop_if_break2) { |
| 1290 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1286 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1291 BUILD(r, B2(WASM_LOOP(2, WASM_BR_IF(1, WASM_GET_LOCAL(0)), | 1287 BUILD(r, B2(WASM_LOOP(WASM_BR_IF(1, WASM_GET_LOCAL(0)), |
| 1292 WASM_SET_LOCAL(0, WASM_I8(99))), | 1288 WASM_SET_LOCAL(0, WASM_I8(99))), |
| 1293 WASM_GET_LOCAL(0))); | 1289 WASM_GET_LOCAL(0))); |
| 1294 CHECK_EQ(99, r.Call(0)); | 1290 CHECK_EQ(99, r.Call(0)); |
| 1295 CHECK_EQ(3, r.Call(3)); | 1291 CHECK_EQ(3, r.Call(3)); |
| 1296 CHECK_EQ(10000, r.Call(10000)); | 1292 CHECK_EQ(10000, r.Call(10000)); |
| 1297 CHECK_EQ(-29, r.Call(-29)); | 1293 CHECK_EQ(-29, r.Call(-29)); |
| 1298 } | 1294 } |
| 1299 | 1295 |
| 1300 WASM_EXEC_TEST(Loop_if_break_fallthru) { | 1296 WASM_EXEC_TEST(Loop_if_break_fallthru) { |
| 1301 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1297 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1302 BUILD(r, B1(WASM_LOOP(2, WASM_IF(WASM_GET_LOCAL(0), WASM_BREAK(1)), | 1298 BUILD(r, B1(WASM_LOOP(WASM_IF(WASM_GET_LOCAL(0), WASM_BREAK(1)), |
| 1303 WASM_SET_LOCAL(0, WASM_I8(93)))), | 1299 WASM_SET_LOCAL(0, WASM_I8(93)))), |
| 1304 WASM_GET_LOCAL(0)); | 1300 WASM_GET_LOCAL(0)); |
| 1305 CHECK_EQ(93, r.Call(0)); | 1301 CHECK_EQ(93, r.Call(0)); |
| 1306 CHECK_EQ(3, r.Call(3)); | 1302 CHECK_EQ(3, r.Call(3)); |
| 1307 CHECK_EQ(10001, r.Call(10001)); | 1303 CHECK_EQ(10001, r.Call(10001)); |
| 1308 CHECK_EQ(-22, r.Call(-22)); | 1304 CHECK_EQ(-22, r.Call(-22)); |
| 1309 } | 1305 } |
| 1310 | 1306 |
| 1311 WASM_EXEC_TEST(IfBreak1) { | 1307 WASM_EXEC_TEST(IfBreak1) { |
| 1312 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1308 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1563 } | 1559 } |
| 1564 } | 1560 } |
| 1565 | 1561 |
| 1566 WASM_EXEC_TEST(MemI32_Sum) { | 1562 WASM_EXEC_TEST(MemI32_Sum) { |
| 1567 const int kNumElems = 20; | 1563 const int kNumElems = 20; |
| 1568 TestingModule module(execution_mode); | 1564 TestingModule module(execution_mode); |
| 1569 uint32_t* memory = module.AddMemoryElems<uint32_t>(kNumElems); | 1565 uint32_t* memory = module.AddMemoryElems<uint32_t>(kNumElems); |
| 1570 WasmRunner<uint32_t> r(&module, MachineType::Int32()); | 1566 WasmRunner<uint32_t> r(&module, MachineType::Int32()); |
| 1571 const byte kSum = r.AllocateLocal(kAstI32); | 1567 const byte kSum = r.AllocateLocal(kAstI32); |
| 1572 | 1568 |
| 1573 BUILD(r, WASM_BLOCK( | 1569 BUILD(r, |
| 1574 2, WASM_WHILE( | 1570 WASM_BLOCK( |
| 1575 WASM_GET_LOCAL(0), | 1571 WASM_WHILE( |
| 1576 WASM_BLOCK( | 1572 WASM_GET_LOCAL(0), |
| 1577 2, WASM_SET_LOCAL( | 1573 WASM_BLOCK( |
| 1578 kSum, WASM_I32_ADD( | 1574 WASM_SET_LOCAL( |
| 1579 WASM_GET_LOCAL(kSum), | 1575 kSum, WASM_I32_ADD(WASM_GET_LOCAL(kSum), |
| 1580 WASM_LOAD_MEM(MachineType::Int32(), | 1576 WASM_LOAD_MEM(MachineType::Int32(), |
| 1581 WASM_GET_LOCAL(0)))), | 1577 WASM_GET_LOCAL(0)))), |
| 1582 WASM_SET_LOCAL( | 1578 WASM_SET_LOCAL( |
| 1583 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), | 1579 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), |
| 1584 WASM_GET_LOCAL(1))); | 1580 WASM_GET_LOCAL(1))); |
| 1585 | 1581 |
| 1586 // Run 4 trials. | 1582 // Run 4 trials. |
| 1587 for (int i = 0; i < 3; ++i) { | 1583 for (int i = 0; i < 3; ++i) { |
| 1588 module.RandomizeMemory(i * 33); | 1584 module.RandomizeMemory(i * 33); |
| 1589 uint32_t expected = 0; | 1585 uint32_t expected = 0; |
| 1590 for (size_t j = kNumElems - 1; j > 0; --j) { | 1586 for (size_t j = kNumElems - 1; j > 0; --j) { |
| 1591 expected += module.ReadMemory(&memory[j]); | 1587 expected += module.ReadMemory(&memory[j]); |
| 1592 } | 1588 } |
| 1593 uint32_t result = r.Call(4 * (kNumElems - 1)); | 1589 uint32_t result = r.Call(4 * (kNumElems - 1)); |
| 1594 CHECK_EQ(expected, result); | 1590 CHECK_EQ(expected, result); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1616 module.AddMemoryElems<float>(kSize); | 1612 module.AddMemoryElems<float>(kSize); |
| 1617 float* buffer = module.raw_mem_start<float>(); | 1613 float* buffer = module.raw_mem_start<float>(); |
| 1618 module.WriteMemory(&buffer[0], -99.25f); | 1614 module.WriteMemory(&buffer[0], -99.25f); |
| 1619 module.WriteMemory(&buffer[1], -888.25f); | 1615 module.WriteMemory(&buffer[1], -888.25f); |
| 1620 module.WriteMemory(&buffer[2], -77.25f); | 1616 module.WriteMemory(&buffer[2], -77.25f); |
| 1621 module.WriteMemory(&buffer[3], 66666.25f); | 1617 module.WriteMemory(&buffer[3], 66666.25f); |
| 1622 module.WriteMemory(&buffer[4], 5555.25f); | 1618 module.WriteMemory(&buffer[4], 5555.25f); |
| 1623 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1619 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
| 1624 const byte kSum = r.AllocateLocal(kAstF32); | 1620 const byte kSum = r.AllocateLocal(kAstF32); |
| 1625 | 1621 |
| 1626 BUILD(r, WASM_BLOCK( | 1622 BUILD(r, |
| 1627 3, WASM_WHILE( | 1623 WASM_BLOCK( |
| 1628 WASM_GET_LOCAL(0), | 1624 WASM_WHILE( |
| 1629 WASM_BLOCK( | 1625 WASM_GET_LOCAL(0), |
| 1630 2, WASM_SET_LOCAL( | 1626 WASM_BLOCK( |
| 1631 kSum, WASM_F32_ADD( | 1627 WASM_SET_LOCAL( |
| 1632 WASM_GET_LOCAL(kSum), | 1628 kSum, WASM_F32_ADD(WASM_GET_LOCAL(kSum), |
| 1633 WASM_LOAD_MEM(MachineType::Float32(), | 1629 WASM_LOAD_MEM(MachineType::Float32(), |
| 1634 WASM_GET_LOCAL(0)))), | 1630 WASM_GET_LOCAL(0)))), |
| 1635 WASM_SET_LOCAL( | 1631 WASM_SET_LOCAL( |
| 1636 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), | 1632 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(4))))), |
| 1637 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, | 1633 WASM_STORE_MEM(MachineType::Float32(), WASM_ZERO, |
| 1638 WASM_GET_LOCAL(kSum)), | 1634 WASM_GET_LOCAL(kSum)), |
| 1639 WASM_GET_LOCAL(0))); | 1635 WASM_GET_LOCAL(0))); |
| 1640 | 1636 |
| 1641 CHECK_EQ(0, r.Call(4 * (kSize - 1))); | 1637 CHECK_EQ(0, r.Call(4 * (kSize - 1))); |
| 1642 CHECK_NE(-99.25f, module.ReadMemory(&buffer[0])); | 1638 CHECK_NE(-99.25f, module.ReadMemory(&buffer[0])); |
| 1643 CHECK_EQ(71256.0f, module.ReadMemory(&buffer[0])); | 1639 CHECK_EQ(71256.0f, module.ReadMemory(&buffer[0])); |
| 1644 } | 1640 } |
| 1645 | 1641 |
| 1646 template <typename T> | 1642 template <typename T> |
| 1647 T GenerateAndRunFold(WasmExecutionMode execution_mode, WasmOpcode binop, | 1643 T GenerateAndRunFold(WasmExecutionMode execution_mode, WasmOpcode binop, |
| 1648 T* buffer, uint32_t size, LocalType astType, | 1644 T* buffer, uint32_t size, LocalType astType, |
| 1649 MachineType memType) { | 1645 MachineType memType) { |
| 1650 TestingModule module(execution_mode); | 1646 TestingModule module(execution_mode); |
| 1651 T* memory = module.AddMemoryElems<T>(size); | 1647 T* memory = module.AddMemoryElems<T>(size); |
| 1652 for (uint32_t i = 0; i < size; ++i) { | 1648 for (uint32_t i = 0; i < size; ++i) { |
| 1653 module.WriteMemory(&memory[i], buffer[i]); | 1649 module.WriteMemory(&memory[i], buffer[i]); |
| 1654 } | 1650 } |
| 1655 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1651 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
| 1656 const byte kAccum = r.AllocateLocal(astType); | 1652 const byte kAccum = r.AllocateLocal(astType); |
| 1657 | 1653 |
| 1658 BUILD( | 1654 BUILD(r, WASM_BLOCK( |
| 1659 r, | 1655 WASM_SET_LOCAL(kAccum, WASM_LOAD_MEM(memType, WASM_ZERO)), |
| 1660 WASM_BLOCK( | 1656 WASM_WHILE( |
| 1661 4, WASM_SET_LOCAL(kAccum, WASM_LOAD_MEM(memType, WASM_ZERO)), | 1657 WASM_GET_LOCAL(0), |
| 1662 WASM_WHILE( | 1658 WASM_BLOCK( |
| 1663 WASM_GET_LOCAL(0), | 1659 WASM_SET_LOCAL( |
| 1664 WASM_BLOCK( | 1660 kAccum, WASM_BINOP(binop, WASM_GET_LOCAL(kAccum), |
| 1665 2, WASM_SET_LOCAL( | 1661 WASM_LOAD_MEM( |
| 1666 kAccum, | 1662 memType, WASM_GET_LOCAL(0)))), |
| 1667 WASM_BINOP(binop, WASM_GET_LOCAL(kAccum), | 1663 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), |
| 1668 WASM_LOAD_MEM(memType, WASM_GET_LOCAL(0)))), | 1664 WASM_I8(sizeof(T)))))), |
| 1669 WASM_SET_LOCAL( | 1665 WASM_STORE_MEM(memType, WASM_ZERO, WASM_GET_LOCAL(kAccum)), |
| 1670 0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(sizeof(T)))))), | 1666 WASM_GET_LOCAL(0))); |
| 1671 WASM_STORE_MEM(memType, WASM_ZERO, WASM_GET_LOCAL(kAccum)), | |
| 1672 WASM_GET_LOCAL(0))); | |
| 1673 r.Call(static_cast<int>(sizeof(T) * (size - 1))); | 1667 r.Call(static_cast<int>(sizeof(T) * (size - 1))); |
| 1674 return module.ReadMemory(&memory[0]); | 1668 return module.ReadMemory(&memory[0]); |
| 1675 } | 1669 } |
| 1676 | 1670 |
| 1677 WASM_EXEC_TEST(MemF64_Mul) { | 1671 WASM_EXEC_TEST(MemF64_Mul) { |
| 1678 const size_t kSize = 6; | 1672 const size_t kSize = 6; |
| 1679 double buffer[kSize] = {1, 2, 2, 2, 2, 2}; | 1673 double buffer[kSize] = {1, 2, 2, 2, 2, 2}; |
| 1680 double result = | 1674 double result = |
| 1681 GenerateAndRunFold<double>(execution_mode, kExprF64Mul, buffer, kSize, | 1675 GenerateAndRunFold<double>(execution_mode, kExprF64Mul, buffer, kSize, |
| 1682 kAstF64, MachineType::Float64()); | 1676 kAstF64, MachineType::Float64()); |
| 1683 CHECK_EQ(32, result); | 1677 CHECK_EQ(32, result); |
| 1684 } | 1678 } |
| 1685 | 1679 |
| 1686 WASM_EXEC_TEST(Build_Wasm_Infinite_Loop) { | 1680 WASM_EXEC_TEST(Build_Wasm_Infinite_Loop) { |
| 1687 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1681 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1688 // Only build the graph and compile, don't run. | 1682 // Only build the graph and compile, don't run. |
| 1689 BUILD(r, WASM_INFINITE_LOOP); | 1683 BUILD(r, WASM_INFINITE_LOOP); |
| 1690 } | 1684 } |
| 1691 | 1685 |
| 1692 WASM_EXEC_TEST(Build_Wasm_Infinite_Loop_effect) { | 1686 WASM_EXEC_TEST(Build_Wasm_Infinite_Loop_effect) { |
| 1693 TestingModule module(execution_mode); | 1687 TestingModule module(execution_mode); |
| 1694 module.AddMemoryElems<int8_t>(16); | 1688 module.AddMemoryElems<int8_t>(16); |
| 1695 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1689 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
| 1696 | 1690 |
| 1697 // Only build the graph and compile, don't run. | 1691 // Only build the graph and compile, don't run. |
| 1698 BUILD(r, WASM_LOOP(1, WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO))); | 1692 BUILD(r, WASM_LOOP(WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO))); |
| 1699 } | 1693 } |
| 1700 | 1694 |
| 1701 WASM_EXEC_TEST(Unreachable0a) { | 1695 WASM_EXEC_TEST(Unreachable0a) { |
| 1702 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 1696 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 1703 BUILD(r, B2(WASM_BRV(0, WASM_I8(9)), RET(WASM_GET_LOCAL(0)))); | 1697 BUILD(r, B2(WASM_BRV(0, WASM_I8(9)), RET(WASM_GET_LOCAL(0)))); |
| 1704 CHECK_EQ(9, r.Call(0)); | 1698 CHECK_EQ(9, r.Call(0)); |
| 1705 CHECK_EQ(9, r.Call(1)); | 1699 CHECK_EQ(9, r.Call(1)); |
| 1706 } | 1700 } |
| 1707 | 1701 |
| 1708 WASM_EXEC_TEST(Unreachable0b) { | 1702 WASM_EXEC_TEST(Unreachable0b) { |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1954 int32_t* var_int32 = module.AddGlobal<int32_t>(MachineType::Int32()); | 1948 int32_t* var_int32 = module.AddGlobal<int32_t>(MachineType::Int32()); |
| 1955 uint32_t* var_uint32 = module.AddGlobal<uint32_t>(MachineType::Uint32()); | 1949 uint32_t* var_uint32 = module.AddGlobal<uint32_t>(MachineType::Uint32()); |
| 1956 float* var_float = module.AddGlobal<float>(MachineType::Float32()); | 1950 float* var_float = module.AddGlobal<float>(MachineType::Float32()); |
| 1957 double* var_double = module.AddGlobal<double>(MachineType::Float64()); | 1951 double* var_double = module.AddGlobal<double>(MachineType::Float64()); |
| 1958 | 1952 |
| 1959 WasmRunner<int32_t> r(&module, MachineType::Int32()); | 1953 WasmRunner<int32_t> r(&module, MachineType::Int32()); |
| 1960 | 1954 |
| 1961 BUILD( | 1955 BUILD( |
| 1962 r, | 1956 r, |
| 1963 WASM_BLOCK( | 1957 WASM_BLOCK( |
| 1964 9, | |
| 1965 WASM_STORE_GLOBAL(1, WASM_LOAD_MEM(MachineType::Int8(), WASM_ZERO)), | 1958 WASM_STORE_GLOBAL(1, WASM_LOAD_MEM(MachineType::Int8(), WASM_ZERO)), |
| 1966 WASM_STORE_GLOBAL(2, WASM_LOAD_MEM(MachineType::Uint8(), WASM_ZERO)), | 1959 WASM_STORE_GLOBAL(2, WASM_LOAD_MEM(MachineType::Uint8(), WASM_ZERO)), |
| 1967 WASM_STORE_GLOBAL(3, WASM_LOAD_MEM(MachineType::Int16(), WASM_ZERO)), | 1960 WASM_STORE_GLOBAL(3, WASM_LOAD_MEM(MachineType::Int16(), WASM_ZERO)), |
| 1968 WASM_STORE_GLOBAL(4, WASM_LOAD_MEM(MachineType::Uint16(), WASM_ZERO)), | 1961 WASM_STORE_GLOBAL(4, WASM_LOAD_MEM(MachineType::Uint16(), WASM_ZERO)), |
| 1969 WASM_STORE_GLOBAL(5, WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO)), | 1962 WASM_STORE_GLOBAL(5, WASM_LOAD_MEM(MachineType::Int32(), WASM_ZERO)), |
| 1970 WASM_STORE_GLOBAL(6, WASM_LOAD_MEM(MachineType::Uint32(), WASM_ZERO)), | 1963 WASM_STORE_GLOBAL(6, WASM_LOAD_MEM(MachineType::Uint32(), WASM_ZERO)), |
| 1971 WASM_STORE_GLOBAL(7, | 1964 WASM_STORE_GLOBAL(7, |
| 1972 WASM_LOAD_MEM(MachineType::Float32(), WASM_ZERO)), | 1965 WASM_LOAD_MEM(MachineType::Float32(), WASM_ZERO)), |
| 1973 WASM_STORE_GLOBAL(8, | 1966 WASM_STORE_GLOBAL(8, |
| 1974 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO)), | 1967 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO)), |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2123 FOR_FLOAT32_INPUTS(i) { | 2116 FOR_FLOAT32_INPUTS(i) { |
| 2124 FOR_FLOAT32_INPUTS(j) { CHECK_FLOAT_EQ(*i - *j, r.Call(*i, *j)); } | 2117 FOR_FLOAT32_INPUTS(j) { CHECK_FLOAT_EQ(*i - *j, r.Call(*i, *j)); } |
| 2125 } | 2118 } |
| 2126 } | 2119 } |
| 2127 | 2120 |
| 2128 WASM_EXEC_TEST(Call_Float64Sub) { | 2121 WASM_EXEC_TEST(Call_Float64Sub) { |
| 2129 TestingModule module(execution_mode); | 2122 TestingModule module(execution_mode); |
| 2130 double* memory = module.AddMemoryElems<double>(16); | 2123 double* memory = module.AddMemoryElems<double>(16); |
| 2131 WasmRunner<int32_t> r(&module); | 2124 WasmRunner<int32_t> r(&module); |
| 2132 | 2125 |
| 2133 BUILD(r, WASM_BLOCK( | 2126 BUILD(r, |
| 2134 2, WASM_STORE_MEM( | 2127 WASM_BLOCK(WASM_STORE_MEM( |
| 2135 MachineType::Float64(), WASM_ZERO, | 2128 MachineType::Float64(), WASM_ZERO, |
| 2136 WASM_F64_SUB( | 2129 WASM_F64_SUB( |
| 2137 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO), | 2130 WASM_LOAD_MEM(MachineType::Float64(), WASM_ZERO), |
| 2138 WASM_LOAD_MEM(MachineType::Float64(), WASM_I8(8)))), | 2131 WASM_LOAD_MEM(MachineType::Float64(), WASM_I8(8)))), |
| 2139 WASM_I8(107))); | 2132 WASM_I8(107))); |
| 2140 | 2133 |
| 2141 FOR_FLOAT64_INPUTS(i) { | 2134 FOR_FLOAT64_INPUTS(i) { |
| 2142 FOR_FLOAT64_INPUTS(j) { | 2135 FOR_FLOAT64_INPUTS(j) { |
| 2143 module.WriteMemory(&memory[0], *i); | 2136 module.WriteMemory(&memory[0], *i); |
| 2144 module.WriteMemory(&memory[1], *j); | 2137 module.WriteMemory(&memory[1], *j); |
| 2145 double expected = *i - *j; | 2138 double expected = *i - *j; |
| 2146 CHECK_EQ(107, r.Call()); | 2139 CHECK_EQ(107, r.Call()); |
| 2147 | 2140 |
| 2148 if (expected != expected) { | 2141 if (expected != expected) { |
| 2149 CHECK(module.ReadMemory(&memory[0]) != module.ReadMemory(&memory[0])); | 2142 CHECK(module.ReadMemory(&memory[0]) != module.ReadMemory(&memory[0])); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2261 WASM_GET_LOCAL(local))))); | 2254 WASM_GET_LOCAL(local))))); |
| 2262 | 2255 |
| 2263 CHECK_EQ(198, r.Call(0)); | 2256 CHECK_EQ(198, r.Call(0)); |
| 2264 CHECK_EQ(200, r.Call(1)); | 2257 CHECK_EQ(200, r.Call(1)); |
| 2265 CHECK_EQ(100, r.Call(-49)); | 2258 CHECK_EQ(100, r.Call(-49)); |
| 2266 } | 2259 } |
| 2267 | 2260 |
| 2268 WASM_EXEC_TEST(CountDown_expr) { | 2261 WASM_EXEC_TEST(CountDown_expr) { |
| 2269 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 2262 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 2270 BUILD(r, WASM_LOOP( | 2263 BUILD(r, WASM_LOOP( |
| 2271 3, WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), | 2264 WASM_IF(WASM_NOT(WASM_GET_LOCAL(0)), |
| 2272 WASM_BREAKV(1, WASM_GET_LOCAL(0))), | 2265 WASM_BREAKV(1, WASM_GET_LOCAL(0))), |
| 2273 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), | 2266 WASM_SET_LOCAL(0, WASM_I32_SUB(WASM_GET_LOCAL(0), WASM_I8(1))), |
| 2274 WASM_CONTINUE(0))); | 2267 WASM_CONTINUE(0))); |
| 2275 CHECK_EQ(0, r.Call(1)); | 2268 CHECK_EQ(0, r.Call(1)); |
| 2276 CHECK_EQ(0, r.Call(10)); | 2269 CHECK_EQ(0, r.Call(10)); |
| 2277 CHECK_EQ(0, r.Call(100)); | 2270 CHECK_EQ(0, r.Call(100)); |
| 2278 } | 2271 } |
| 2279 | 2272 |
| 2280 WASM_EXEC_TEST(ExprBlock2a) { | 2273 WASM_EXEC_TEST(ExprBlock2a) { |
| 2281 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 2274 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 2282 BUILD(r, B2(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I8(1))), WASM_I8(1))); | 2275 BUILD(r, B2(WASM_IF(WASM_GET_LOCAL(0), WASM_BRV(1, WASM_I8(1))), WASM_I8(1))); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2300 | 2293 |
| 2301 WASM_EXEC_TEST(ExprBlock2d) { | 2294 WASM_EXEC_TEST(ExprBlock2d) { |
| 2302 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 2295 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 2303 BUILD(r, B2(WASM_BRV_IF(0, WASM_I8(1), WASM_GET_LOCAL(0)), WASM_I8(2))); | 2296 BUILD(r, B2(WASM_BRV_IF(0, WASM_I8(1), WASM_GET_LOCAL(0)), WASM_I8(2))); |
| 2304 CHECK_EQ(2, r.Call(0)); | 2297 CHECK_EQ(2, r.Call(0)); |
| 2305 CHECK_EQ(1, r.Call(1)); | 2298 CHECK_EQ(1, r.Call(1)); |
| 2306 } | 2299 } |
| 2307 | 2300 |
| 2308 WASM_EXEC_TEST(ExprBlock_ManualSwitch) { | 2301 WASM_EXEC_TEST(ExprBlock_ManualSwitch) { |
| 2309 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 2302 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 2310 BUILD(r, WASM_BLOCK(6, WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1)), | 2303 BUILD(r, WASM_BLOCK(WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1)), |
| 2311 WASM_BRV(1, WASM_I8(11))), | 2304 WASM_BRV(1, WASM_I8(11))), |
| 2312 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2)), | 2305 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2)), |
| 2313 WASM_BRV(1, WASM_I8(12))), | 2306 WASM_BRV(1, WASM_I8(12))), |
| 2314 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3)), | 2307 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3)), |
| 2315 WASM_BRV(1, WASM_I8(13))), | 2308 WASM_BRV(1, WASM_I8(13))), |
| 2316 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4)), | 2309 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4)), |
| 2317 WASM_BRV(1, WASM_I8(14))), | 2310 WASM_BRV(1, WASM_I8(14))), |
| 2318 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5)), | 2311 WASM_IF(WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5)), |
| 2319 WASM_BRV(1, WASM_I8(15))), | 2312 WASM_BRV(1, WASM_I8(15))), |
| 2320 WASM_I8(99))); | 2313 WASM_I8(99))); |
| 2321 CHECK_EQ(99, r.Call(0)); | 2314 CHECK_EQ(99, r.Call(0)); |
| 2322 CHECK_EQ(11, r.Call(1)); | 2315 CHECK_EQ(11, r.Call(1)); |
| 2323 CHECK_EQ(12, r.Call(2)); | 2316 CHECK_EQ(12, r.Call(2)); |
| 2324 CHECK_EQ(13, r.Call(3)); | 2317 CHECK_EQ(13, r.Call(3)); |
| 2325 CHECK_EQ(14, r.Call(4)); | 2318 CHECK_EQ(14, r.Call(4)); |
| 2326 CHECK_EQ(15, r.Call(5)); | 2319 CHECK_EQ(15, r.Call(5)); |
| 2327 CHECK_EQ(99, r.Call(6)); | 2320 CHECK_EQ(99, r.Call(6)); |
| 2328 } | 2321 } |
| 2329 | 2322 |
| 2330 WASM_EXEC_TEST(ExprBlock_ManualSwitch_brif) { | 2323 WASM_EXEC_TEST(ExprBlock_ManualSwitch_brif) { |
| 2331 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); | 2324 WasmRunner<int32_t> r(execution_mode, MachineType::Int32()); |
| 2332 BUILD(r, | 2325 BUILD(r, WASM_BLOCK(WASM_BRV_IF(0, WASM_I8(11), |
| 2333 WASM_BLOCK(6, WASM_BRV_IF(0, WASM_I8(11), | |
| 2334 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1))), | 2326 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(1))), |
| 2335 WASM_BRV_IF(0, WASM_I8(12), | 2327 WASM_BRV_IF(0, WASM_I8(12), |
| 2336 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2))), | 2328 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(2))), |
| 2337 WASM_BRV_IF(0, WASM_I8(13), | 2329 WASM_BRV_IF(0, WASM_I8(13), |
| 2338 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3))), | 2330 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(3))), |
| 2339 WASM_BRV_IF(0, WASM_I8(14), | 2331 WASM_BRV_IF(0, WASM_I8(14), |
| 2340 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4))), | 2332 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(4))), |
| 2341 WASM_BRV_IF(0, WASM_I8(15), | 2333 WASM_BRV_IF(0, WASM_I8(15), |
| 2342 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5))), | 2334 WASM_I32_EQ(WASM_GET_LOCAL(0), WASM_I8(5))), |
| 2343 WASM_I8(99))); | 2335 WASM_I8(99))); |
| 2344 CHECK_EQ(99, r.Call(0)); | 2336 CHECK_EQ(99, r.Call(0)); |
| 2345 CHECK_EQ(11, r.Call(1)); | 2337 CHECK_EQ(11, r.Call(1)); |
| 2346 CHECK_EQ(12, r.Call(2)); | 2338 CHECK_EQ(12, r.Call(2)); |
| 2347 CHECK_EQ(13, r.Call(3)); | 2339 CHECK_EQ(13, r.Call(3)); |
| 2348 CHECK_EQ(14, r.Call(4)); | 2340 CHECK_EQ(14, r.Call(4)); |
| 2349 CHECK_EQ(15, r.Call(5)); | 2341 CHECK_EQ(15, r.Call(5)); |
| 2350 CHECK_EQ(99, r.Call(6)); | 2342 CHECK_EQ(99, r.Call(6)); |
| 2351 } | 2343 } |
| 2352 | 2344 |
| 2353 WASM_EXEC_TEST(nested_ifs) { | 2345 WASM_EXEC_TEST(nested_ifs) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2372 WASM_BRV(1, WASM_I8(14))))); | 2364 WASM_BRV(1, WASM_I8(14))))); |
| 2373 | 2365 |
| 2374 CHECK_EQ(11, r.Call(1)); | 2366 CHECK_EQ(11, r.Call(1)); |
| 2375 CHECK_EQ(14, r.Call(0)); | 2367 CHECK_EQ(14, r.Call(0)); |
| 2376 } | 2368 } |
| 2377 | 2369 |
| 2378 WASM_EXEC_TEST(ExprBlock_nested_ifs) { | 2370 WASM_EXEC_TEST(ExprBlock_nested_ifs) { |
| 2379 WasmRunner<int32_t> r(execution_mode, MachineType::Int32(), | 2371 WasmRunner<int32_t> r(execution_mode, MachineType::Int32(), |
| 2380 MachineType::Int32()); | 2372 MachineType::Int32()); |
| 2381 | 2373 |
| 2382 BUILD(r, WASM_BLOCK( | 2374 BUILD(r, WASM_BLOCK(WASM_IF_ELSE( |
| 2383 1, WASM_IF_ELSE( | 2375 WASM_GET_LOCAL(0), |
| 2384 WASM_GET_LOCAL(0), | 2376 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(11)), |
| 2385 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(11)), | 2377 WASM_BRV(1, WASM_I8(12))), |
| 2386 WASM_BRV(1, WASM_I8(12))), | 2378 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(13)), |
| 2387 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(0, WASM_I8(13)), | 2379 WASM_BRV(1, WASM_I8(14)))))); |
| 2388 WASM_BRV(1, WASM_I8(14)))))); | |
| 2389 | 2380 |
| 2390 CHECK_EQ(11, r.Call(1, 1)); | 2381 CHECK_EQ(11, r.Call(1, 1)); |
| 2391 CHECK_EQ(12, r.Call(1, 0)); | 2382 CHECK_EQ(12, r.Call(1, 0)); |
| 2392 CHECK_EQ(13, r.Call(0, 1)); | 2383 CHECK_EQ(13, r.Call(0, 1)); |
| 2393 CHECK_EQ(14, r.Call(0, 0)); | 2384 CHECK_EQ(14, r.Call(0, 0)); |
| 2394 } | 2385 } |
| 2395 | 2386 |
| 2396 WASM_EXEC_TEST(ExprLoop_nested_ifs) { | 2387 WASM_EXEC_TEST(ExprLoop_nested_ifs) { |
| 2397 WasmRunner<int32_t> r(execution_mode, MachineType::Int32(), | 2388 WasmRunner<int32_t> r(execution_mode, MachineType::Int32(), |
| 2398 MachineType::Int32()); | 2389 MachineType::Int32()); |
| 2399 | 2390 |
| 2400 BUILD(r, WASM_LOOP( | 2391 BUILD(r, WASM_LOOP(WASM_IF_ELSE( |
| 2401 1, WASM_IF_ELSE( | 2392 WASM_GET_LOCAL(0), |
| 2402 WASM_GET_LOCAL(0), | 2393 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(1, WASM_I8(11)), |
| 2403 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(1, WASM_I8(11)), | 2394 WASM_BRV(3, WASM_I8(12))), |
| 2404 WASM_BRV(3, WASM_I8(12))), | 2395 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(1, WASM_I8(13)), |
| 2405 WASM_IF_ELSE(WASM_GET_LOCAL(1), WASM_BRV(1, WASM_I8(13)), | 2396 WASM_BRV(3, WASM_I8(14)))))); |
| 2406 WASM_BRV(3, WASM_I8(14)))))); | |
| 2407 | 2397 |
| 2408 CHECK_EQ(11, r.Call(1, 1)); | 2398 CHECK_EQ(11, r.Call(1, 1)); |
| 2409 CHECK_EQ(12, r.Call(1, 0)); | 2399 CHECK_EQ(12, r.Call(1, 0)); |
| 2410 CHECK_EQ(13, r.Call(0, 1)); | 2400 CHECK_EQ(13, r.Call(0, 1)); |
| 2411 CHECK_EQ(14, r.Call(0, 0)); | 2401 CHECK_EQ(14, r.Call(0, 0)); |
| 2412 } | 2402 } |
| 2413 | 2403 |
| 2414 WASM_EXEC_TEST(SimpleCallIndirect) { | 2404 WASM_EXEC_TEST(SimpleCallIndirect) { |
| 2415 TestSignatures sigs; | 2405 TestSignatures sigs; |
| 2416 TestingModule module(execution_mode); | 2406 TestingModule module(execution_mode); |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2860 MachineType::Int32()); | 2850 MachineType::Int32()); |
| 2861 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)), WASM_ZERO); | 2851 BUILD(r, WASM_I32_REMS(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)), WASM_ZERO); |
| 2862 const int32_t kMin = std::numeric_limits<int32_t>::min(); | 2852 const int32_t kMin = std::numeric_limits<int32_t>::min(); |
| 2863 CHECK_EQ(0, r.Call(133, 100)); | 2853 CHECK_EQ(0, r.Call(133, 100)); |
| 2864 CHECK_EQ(0, r.Call(kMin, -1)); | 2854 CHECK_EQ(0, r.Call(kMin, -1)); |
| 2865 CHECK_EQ(0, r.Call(0, 1)); | 2855 CHECK_EQ(0, r.Call(0, 1)); |
| 2866 CHECK_TRAP(r.Call(100, 0)); | 2856 CHECK_TRAP(r.Call(100, 0)); |
| 2867 CHECK_TRAP(r.Call(-1001, 0)); | 2857 CHECK_TRAP(r.Call(-1001, 0)); |
| 2868 CHECK_TRAP(r.Call(kMin, 0)); | 2858 CHECK_TRAP(r.Call(kMin, 0)); |
| 2869 } | 2859 } |
| OLD | NEW |