| 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/wasm/wasm-macro-gen.h" | 9 #include "src/wasm/wasm-macro-gen.h" |
| 10 | 10 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 FOR_INT32_INPUTS(i) { | 189 FOR_INT32_INPUTS(i) { |
| 190 FOR_INT32_INPUTS(j) { | 190 FOR_INT32_INPUTS(j) { |
| 191 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + | 191 int32_t expected = static_cast<int32_t>(static_cast<uint32_t>(*i) + |
| 192 static_cast<uint32_t>(*j)); | 192 static_cast<uint32_t>(*j)); |
| 193 CHECK_EQ(expected, r.Call(*i, *j)); | 193 CHECK_EQ(expected, r.Call(*i, *j)); |
| 194 } | 194 } |
| 195 } | 195 } |
| 196 } | 196 } |
| 197 | 197 |
| 198 | 198 |
| 199 // TODO(titzer): Fix for nosee4 and re-enable. | |
| 200 #if 0 | |
| 201 | |
| 202 TEST(Run_WasmFloat32Add) { | 199 TEST(Run_WasmFloat32Add) { |
| 203 WasmRunner<int32_t> r; | 200 WasmRunner<int32_t> r; |
| 204 // int(11.5f + 44.5f) | 201 // int(11.5f + 44.5f) |
| 205 BUILD(r, | 202 BUILD(r, |
| 206 WASM_I32_SCONVERT_F32(WASM_F32_ADD(WASM_F32(11.5f), WASM_F32(44.5f)))); | 203 WASM_I32_SCONVERT_F32(WASM_F32_ADD(WASM_F32(11.5f), WASM_F32(44.5f)))); |
| 207 CHECK_EQ(56, r.Call()); | 204 CHECK_EQ(56, r.Call()); |
| 208 } | 205 } |
| 209 | 206 |
| 210 | 207 |
| 211 TEST(Run_WasmFloat64Add) { | 208 TEST(Run_WasmFloat64Add) { |
| 212 WasmRunner<int32_t> r; | 209 WasmRunner<int32_t> r; |
| 213 // return int(13.5d + 43.5d) | 210 // return int(13.5d + 43.5d) |
| 214 BUILD(r, WASM_I32_SCONVERT_F64(WASM_F64_ADD(WASM_F64(13.5), WASM_F64(43.5)))); | 211 BUILD(r, WASM_I32_SCONVERT_F64(WASM_F64_ADD(WASM_F64(13.5), WASM_F64(43.5)))); |
| 215 CHECK_EQ(57, r.Call()); | 212 CHECK_EQ(57, r.Call()); |
| 216 } | 213 } |
| 217 | 214 |
| 218 #endif | |
| 219 | |
| 220 | 215 |
| 221 void TestInt32Binop(WasmOpcode opcode, int32_t expected, int32_t a, int32_t b) { | 216 void TestInt32Binop(WasmOpcode opcode, int32_t expected, int32_t a, int32_t b) { |
| 222 { | 217 { |
| 223 WasmRunner<int32_t> r; | 218 WasmRunner<int32_t> r; |
| 224 // K op K | 219 // K op K |
| 225 BUILD(r, WASM_BINOP(opcode, WASM_I32(a), WASM_I32(b))); | 220 BUILD(r, WASM_BINOP(opcode, WASM_I32(a), WASM_I32(b))); |
| 226 CHECK_EQ(expected, r.Call()); | 221 CHECK_EQ(expected, r.Call()); |
| 227 } | 222 } |
| 228 { | 223 { |
| 229 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); | 224 WasmRunner<int32_t> r(MachineType::Int32(), MachineType::Int32()); |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 CHECK_EQ(expected, r.Call()); | 797 CHECK_EQ(expected, r.Call()); |
| 803 } | 798 } |
| 804 { | 799 { |
| 805 WasmRunner<int32_t> r(MachineType::Float64()); | 800 WasmRunner<int32_t> r(MachineType::Float64()); |
| 806 // return int(op(a)) | 801 // return int(op(a)) |
| 807 BUILD(r, WASM_I32_SCONVERT_F64(WASM_UNOP(opcode, WASM_GET_LOCAL(0)))); | 802 BUILD(r, WASM_I32_SCONVERT_F64(WASM_UNOP(opcode, WASM_GET_LOCAL(0)))); |
| 808 CHECK_EQ(expected, r.Call(a)); | 803 CHECK_EQ(expected, r.Call(a)); |
| 809 } | 804 } |
| 810 } | 805 } |
| 811 | 806 |
| 812 | |
| 813 // TODO(titzer): Fix for nosee4 and re-enable. | |
| 814 #if 0 | |
| 815 | |
| 816 TEST(Run_WasmFloat32Binops) { | 807 TEST(Run_WasmFloat32Binops) { |
| 817 TestFloat32Binop(kExprF32Eq, 1, 8.125f, 8.125f); | 808 TestFloat32Binop(kExprF32Eq, 1, 8.125f, 8.125f); |
| 818 TestFloat32Binop(kExprF32Ne, 1, 8.125f, 8.127f); | 809 TestFloat32Binop(kExprF32Ne, 1, 8.125f, 8.127f); |
| 819 TestFloat32Binop(kExprF32Lt, 1, -9.5f, -9.0f); | 810 TestFloat32Binop(kExprF32Lt, 1, -9.5f, -9.0f); |
| 820 TestFloat32Binop(kExprF32Le, 1, -1111.0f, -1111.0f); | 811 TestFloat32Binop(kExprF32Le, 1, -1111.0f, -1111.0f); |
| 821 TestFloat32Binop(kExprF32Gt, 1, -9.0f, -9.5f); | 812 TestFloat32Binop(kExprF32Gt, 1, -9.0f, -9.5f); |
| 822 TestFloat32Binop(kExprF32Ge, 1, -1111.0f, -1111.0f); | 813 TestFloat32Binop(kExprF32Ge, 1, -1111.0f, -1111.0f); |
| 823 | 814 |
| 824 TestFloat32BinopWithConvert(kExprF32Add, 10, 3.5f, 6.5f); | 815 TestFloat32BinopWithConvert(kExprF32Add, 10, 3.5f, 6.5f); |
| 825 TestFloat32BinopWithConvert(kExprF32Sub, 2, 44.5f, 42.5f); | 816 TestFloat32BinopWithConvert(kExprF32Sub, 2, 44.5f, 42.5f); |
| 826 TestFloat32BinopWithConvert(kExprF32Mul, -66, -132.1f, 0.5f); | 817 TestFloat32BinopWithConvert(kExprF32Mul, -66, -132.1f, 0.5f); |
| 827 TestFloat32BinopWithConvert(kExprF32Div, 11, 22.1f, 2.0f); | 818 TestFloat32BinopWithConvert(kExprF32Div, 11, 22.1f, 2.0f); |
| 828 } | 819 } |
| 829 | 820 |
| 830 | |
| 831 TEST(Run_WasmFloat32Unops) { | 821 TEST(Run_WasmFloat32Unops) { |
| 832 TestFloat32UnopWithConvert(kExprF32Abs, 8, 8.125f); | 822 TestFloat32UnopWithConvert(kExprF32Abs, 8, 8.125f); |
| 833 TestFloat32UnopWithConvert(kExprF32Abs, 9, -9.125f); | 823 TestFloat32UnopWithConvert(kExprF32Abs, 9, -9.125f); |
| 834 TestFloat32UnopWithConvert(kExprF32Neg, -213, 213.125f); | 824 TestFloat32UnopWithConvert(kExprF32Neg, -213, 213.125f); |
| 835 TestFloat32UnopWithConvert(kExprF32Sqrt, 12, 144.4f); | 825 TestFloat32UnopWithConvert(kExprF32Sqrt, 12, 144.4f); |
| 836 } | 826 } |
| 837 | 827 |
| 838 | |
| 839 TEST(Run_WasmFloat64Binops) { | 828 TEST(Run_WasmFloat64Binops) { |
| 840 TestFloat64Binop(kExprF64Eq, 1, 16.25, 16.25); | 829 TestFloat64Binop(kExprF64Eq, 1, 16.25, 16.25); |
| 841 TestFloat64Binop(kExprF64Ne, 1, 16.25, 16.15); | 830 TestFloat64Binop(kExprF64Ne, 1, 16.25, 16.15); |
| 842 TestFloat64Binop(kExprF64Lt, 1, -32.4, 11.7); | 831 TestFloat64Binop(kExprF64Lt, 1, -32.4, 11.7); |
| 843 TestFloat64Binop(kExprF64Le, 1, -88.9, -88.9); | 832 TestFloat64Binop(kExprF64Le, 1, -88.9, -88.9); |
| 844 TestFloat64Binop(kExprF64Gt, 1, 11.7, -32.4); | 833 TestFloat64Binop(kExprF64Gt, 1, 11.7, -32.4); |
| 845 TestFloat64Binop(kExprF64Ge, 1, -88.9, -88.9); | 834 TestFloat64Binop(kExprF64Ge, 1, -88.9, -88.9); |
| 846 | 835 |
| 847 TestFloat64BinopWithConvert(kExprF64Add, 100, 43.5, 56.5); | 836 TestFloat64BinopWithConvert(kExprF64Add, 100, 43.5, 56.5); |
| 848 TestFloat64BinopWithConvert(kExprF64Sub, 200, 12200.1, 12000.1); | 837 TestFloat64BinopWithConvert(kExprF64Sub, 200, 12200.1, 12000.1); |
| 849 TestFloat64BinopWithConvert(kExprF64Mul, -33, 134, -0.25); | 838 TestFloat64BinopWithConvert(kExprF64Mul, -33, 134, -0.25); |
| 850 TestFloat64BinopWithConvert(kExprF64Div, -1111, -2222.3, 2); | 839 TestFloat64BinopWithConvert(kExprF64Div, -1111, -2222.3, 2); |
| 851 } | 840 } |
| 852 | 841 |
| 853 | |
| 854 TEST(Run_WasmFloat64Unops) { | 842 TEST(Run_WasmFloat64Unops) { |
| 855 TestFloat64UnopWithConvert(kExprF64Abs, 108, 108.125); | 843 TestFloat64UnopWithConvert(kExprF64Abs, 108, 108.125); |
| 856 TestFloat64UnopWithConvert(kExprF64Abs, 209, -209.125); | 844 TestFloat64UnopWithConvert(kExprF64Abs, 209, -209.125); |
| 857 TestFloat64UnopWithConvert(kExprF64Neg, -209, 209.125); | 845 TestFloat64UnopWithConvert(kExprF64Neg, -209, 209.125); |
| 858 TestFloat64UnopWithConvert(kExprF64Sqrt, 13, 169.4); | 846 TestFloat64UnopWithConvert(kExprF64Sqrt, 13, 169.4); |
| 859 } | 847 } |
| 860 | 848 |
| 861 #endif | |
| 862 | |
| 863 | |
| 864 TEST(Run_WasmFloat32Neg) { | 849 TEST(Run_WasmFloat32Neg) { |
| 865 WasmRunner<float> r(MachineType::Float32()); | 850 WasmRunner<float> r(MachineType::Float32()); |
| 866 BUILD(r, WASM_F32_NEG(WASM_GET_LOCAL(0))); | 851 BUILD(r, WASM_F32_NEG(WASM_GET_LOCAL(0))); |
| 867 | 852 |
| 868 FOR_FLOAT32_INPUTS(i) { | 853 FOR_FLOAT32_INPUTS(i) { |
| 869 CHECK_EQ(0x80000000, | 854 CHECK_EQ(0x80000000, |
| 870 bit_cast<uint32_t>(*i) ^ bit_cast<uint32_t>(r.Call(*i))); | 855 bit_cast<uint32_t>(*i) ^ bit_cast<uint32_t>(r.Call(*i))); |
| 871 } | 856 } |
| 872 } | 857 } |
| 873 | 858 |
| (...skipping 2549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3423 | 3408 |
| 3424 #if WASM_64 | 3409 #if WASM_64 |
| 3425 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } | 3410 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } |
| 3426 #endif | 3411 #endif |
| 3427 | 3412 |
| 3428 | 3413 |
| 3429 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } | 3414 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } |
| 3430 | 3415 |
| 3431 | 3416 |
| 3432 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } | 3417 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } |
| OLD | NEW |