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 2682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2693 { | 2693 { |
2694 WasmRunner<double> r; | 2694 WasmRunner<double> r; |
2695 BUILD(r, WASM_F64_MAX(WASM_F64(45.73), | 2695 BUILD(r, WASM_F64_MAX(WASM_F64(45.73), |
2696 WASM_F64(bit_cast<double>(0x7ff000000000f1e2)))); | 2696 WASM_F64(bit_cast<double>(0x7ff000000000f1e2)))); |
2697 CHECK_EQ(0x7ff800000000f1e2, bit_cast<uint64_t>(r.Call())); | 2697 CHECK_EQ(0x7ff800000000f1e2, bit_cast<uint64_t>(r.Call())); |
2698 } | 2698 } |
2699 } | 2699 } |
2700 | 2700 |
2701 #endif | 2701 #endif |
2702 | 2702 |
2703 // TODO(titzer): Fix and re-enable. | |
2704 #if 0 | |
2705 TEST(Run_Wasm_I32SConvertF32) { | 2703 TEST(Run_Wasm_I32SConvertF32) { |
2706 WasmRunner<int32_t> r(MachineType::Float32()); | 2704 WasmRunner<int32_t> r(MachineType::Float32()); |
2707 BUILD(r, WASM_I32_SCONVERT_F32(WASM_GET_LOCAL(0))); | 2705 BUILD(r, WASM_I32_SCONVERT_F32(WASM_GET_LOCAL(0))); |
2708 | 2706 |
2709 FOR_FLOAT32_INPUTS(i) { | 2707 FOR_FLOAT32_INPUTS(i) { |
2710 if (*i < static_cast<float>(INT32_MAX) && | 2708 if (*i < static_cast<float>(INT32_MAX) && |
2711 *i >= static_cast<float>(INT32_MIN)) { | 2709 *i >= static_cast<float>(INT32_MIN)) { |
2712 CHECK_EQ(static_cast<int32_t>(*i), r.Call(*i)); | 2710 CHECK_EQ(static_cast<int32_t>(*i), r.Call(*i)); |
2713 } else { | 2711 } else { |
2714 CHECK_TRAP32(r.Call(*i)); | 2712 CHECK_TRAP32(r.Call(*i)); |
2715 } | 2713 } |
2716 } | 2714 } |
2717 } | 2715 } |
2718 | 2716 |
2719 | 2717 |
2720 TEST(Run_Wasm_I32SConvertF64) { | 2718 TEST(Run_Wasm_I32SConvertF64) { |
2721 WasmRunner<int32_t> r(MachineType::Float64()); | 2719 WasmRunner<int32_t> r(MachineType::Float64()); |
2722 BUILD(r, WASM_I32_SCONVERT_F64(WASM_GET_LOCAL(0))); | 2720 BUILD(r, WASM_I32_SCONVERT_F64(WASM_GET_LOCAL(0))); |
2723 | 2721 |
2724 FOR_FLOAT64_INPUTS(i) { | 2722 FOR_FLOAT64_INPUTS(i) { |
2725 if (*i < static_cast<double>(INT32_MAX) && | 2723 if (*i < (static_cast<double>(INT32_MAX) + 1.0) && |
2726 *i >= static_cast<double>(INT32_MIN)) { | 2724 *i > (static_cast<double>(INT32_MIN) - 1.0)) { |
2727 CHECK_EQ(static_cast<int64_t>(*i), r.Call(*i)); | 2725 CHECK_EQ(static_cast<int64_t>(*i), r.Call(*i)); |
2728 } else { | 2726 } else { |
2729 CHECK_TRAP32(r.Call(*i)); | 2727 CHECK_TRAP32(r.Call(*i)); |
2730 } | 2728 } |
2731 } | 2729 } |
2732 } | 2730 } |
2733 | 2731 |
2734 | 2732 |
2735 TEST(Run_Wasm_I32UConvertF32) { | 2733 TEST(Run_Wasm_I32UConvertF32) { |
2736 WasmRunner<uint32_t> r(MachineType::Float32()); | 2734 WasmRunner<uint32_t> r(MachineType::Float32()); |
2737 BUILD(r, WASM_I32_UCONVERT_F32(WASM_GET_LOCAL(0))); | 2735 BUILD(r, WASM_I32_UCONVERT_F32(WASM_GET_LOCAL(0))); |
2738 | 2736 |
2739 FOR_FLOAT32_INPUTS(i) { | 2737 FOR_FLOAT32_INPUTS(i) { |
2740 if (*i < static_cast<float>(UINT32_MAX) && *i > -1) { | 2738 if (*i < (static_cast<float>(UINT32_MAX) + 1.0) && *i > -1) { |
2741 CHECK_EQ(static_cast<uint32_t>(*i), r.Call(*i)); | 2739 CHECK_EQ(static_cast<uint32_t>(*i), r.Call(*i)); |
2742 } else { | 2740 } else { |
2743 CHECK_TRAP32(r.Call(*i)); | 2741 CHECK_TRAP32(r.Call(*i)); |
2744 } | 2742 } |
2745 } | 2743 } |
2746 } | 2744 } |
2747 | 2745 |
2748 | 2746 |
2749 TEST(Run_Wasm_I32UConvertF64) { | 2747 TEST(Run_Wasm_I32UConvertF64) { |
2750 WasmRunner<uint32_t> r(MachineType::Float64()); | 2748 WasmRunner<uint32_t> r(MachineType::Float64()); |
2751 BUILD(r, WASM_I32_UCONVERT_F64(WASM_GET_LOCAL(0))); | 2749 BUILD(r, WASM_I32_UCONVERT_F64(WASM_GET_LOCAL(0))); |
2752 | 2750 |
2753 FOR_FLOAT64_INPUTS(i) { | 2751 FOR_FLOAT64_INPUTS(i) { |
2754 if (*i < static_cast<float>(UINT32_MAX) && *i > -1) { | 2752 if (*i < (static_cast<float>(UINT32_MAX) + 1.0) && *i > -1) { |
2755 CHECK_EQ(static_cast<uint32_t>(*i), r.Call(*i)); | 2753 CHECK_EQ(static_cast<uint32_t>(*i), r.Call(*i)); |
2756 } else { | 2754 } else { |
2757 CHECK_TRAP32(r.Call(*i)); | 2755 CHECK_TRAP32(r.Call(*i)); |
2758 } | 2756 } |
2759 } | 2757 } |
2760 } | 2758 } |
2761 #endif | |
2762 | |
2763 | 2759 |
2764 TEST(Run_Wasm_F64CopySign) { | 2760 TEST(Run_Wasm_F64CopySign) { |
2765 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64()); | 2761 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64()); |
2766 BUILD(r, WASM_F64_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); | 2762 BUILD(r, WASM_F64_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); |
2767 | 2763 |
2768 FOR_FLOAT64_INPUTS(i) { | 2764 FOR_FLOAT64_INPUTS(i) { |
2769 FOR_FLOAT64_INPUTS(j) { CHECK_DOUBLE_EQ(copysign(*i, *j), r.Call(*i, *j)); } | 2765 FOR_FLOAT64_INPUTS(j) { CHECK_DOUBLE_EQ(copysign(*i, *j), r.Call(*i, *j)); } |
2770 } | 2766 } |
2771 } | 2767 } |
2772 | 2768 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2814 | 2810 |
2815 #if WASM_64 | 2811 #if WASM_64 |
2816 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } | 2812 TEST(Compile_Wasm_CallIndirect_Many_i64) { CompileCallIndirectMany(kAstI64); } |
2817 #endif | 2813 #endif |
2818 | 2814 |
2819 | 2815 |
2820 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } | 2816 TEST(Compile_Wasm_CallIndirect_Many_f32) { CompileCallIndirectMany(kAstF32); } |
2821 | 2817 |
2822 | 2818 |
2823 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } | 2819 TEST(Compile_Wasm_CallIndirect_Many_f64) { CompileCallIndirectMany(kAstF64); } |
OLD | NEW |