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