1# See LICENSE for license details. 2 3#***************************************************************************** 4# fcvt_w.S 5#----------------------------------------------------------------------------- 6# 7# Test fcvt{wu|w|lu|l}.d instructions. 8# 9 10#include "riscv_test.h" 11#include "test_macros.h" 12 13RVTEST_RV64UF 14RVTEST_CODE_BEGIN 15 16 #------------------------------------------------------------- 17 # Arithmetic tests 18 #------------------------------------------------------------- 19 20 TEST_FP_INT_OP_D( 2, fcvt.w.d, 0x01, -1, -1.1, rtz); 21 TEST_FP_INT_OP_D( 3, fcvt.w.d, 0x00, -1, -1.0, rtz); 22 TEST_FP_INT_OP_D( 4, fcvt.w.d, 0x01, 0, -0.9, rtz); 23 TEST_FP_INT_OP_D( 5, fcvt.w.d, 0x01, 0, 0.9, rtz); 24 TEST_FP_INT_OP_D( 6, fcvt.w.d, 0x00, 1, 1.0, rtz); 25 TEST_FP_INT_OP_D( 7, fcvt.w.d, 0x01, 1, 1.1, rtz); 26 TEST_FP_INT_OP_D( 8, fcvt.w.d, 0x10, -1<<31, -3e9, rtz); 27 TEST_FP_INT_OP_D( 9, fcvt.w.d, 0x10, (1<<31)-1, 3e9, rtz); 28 29 TEST_FP_INT_OP_D(12, fcvt.wu.d, 0x10, 0, -3.0, rtz); 30 TEST_FP_INT_OP_D(13, fcvt.wu.d, 0x10, 0, -1.0, rtz); 31 TEST_FP_INT_OP_D(14, fcvt.wu.d, 0x01, 0, -0.9, rtz); 32 TEST_FP_INT_OP_D(15, fcvt.wu.d, 0x01, 0, 0.9, rtz); 33 TEST_FP_INT_OP_D(16, fcvt.wu.d, 0x00, 1, 1.0, rtz); 34 TEST_FP_INT_OP_D(17, fcvt.wu.d, 0x01, 1, 1.1, rtz); 35 TEST_FP_INT_OP_D(18, fcvt.wu.d, 0x10, 0, -3e9, rtz); 36 TEST_FP_INT_OP_D(19, fcvt.wu.d, 0x00, 0xffffffffb2d05e00, 3e9, rtz); 37 38#if __riscv_xlen >= 64 39 TEST_FP_INT_OP_D(22, fcvt.l.d, 0x01, -1, -1.1, rtz); 40 TEST_FP_INT_OP_D(23, fcvt.l.d, 0x00, -1, -1.0, rtz); 41 TEST_FP_INT_OP_D(24, fcvt.l.d, 0x01, 0, -0.9, rtz); 42 TEST_FP_INT_OP_D(25, fcvt.l.d, 0x01, 0, 0.9, rtz); 43 TEST_FP_INT_OP_D(26, fcvt.l.d, 0x00, 1, 1.0, rtz); 44 TEST_FP_INT_OP_D(27, fcvt.l.d, 0x01, 1, 1.1, rtz); 45 TEST_FP_INT_OP_D(28, fcvt.l.d, 0x00,-3000000000, -3e9, rtz); 46 TEST_FP_INT_OP_D(29, fcvt.l.d, 0x00, 3000000000, 3e9, rtz); 47 TEST_FP_INT_OP_D(20, fcvt.l.d, 0x10, -1<<63,-3e19, rtz); 48 TEST_FP_INT_OP_D(21, fcvt.l.d, 0x10, (1<<63)-1, 3e19, rtz); 49 50 TEST_FP_INT_OP_D(32, fcvt.lu.d, 0x10, 0, -3.0, rtz); 51 TEST_FP_INT_OP_D(33, fcvt.lu.d, 0x10, 0, -1.0, rtz); 52 TEST_FP_INT_OP_D(34, fcvt.lu.d, 0x01, 0, -0.9, rtz); 53 TEST_FP_INT_OP_D(35, fcvt.lu.d, 0x01, 0, 0.9, rtz); 54 TEST_FP_INT_OP_D(36, fcvt.lu.d, 0x00, 1, 1.0, rtz); 55 TEST_FP_INT_OP_D(37, fcvt.lu.d, 0x01, 1, 1.1, rtz); 56 TEST_FP_INT_OP_D(38, fcvt.lu.d, 0x10, 0, -3e9, rtz); 57 TEST_FP_INT_OP_D(39, fcvt.lu.d, 0x00, 3000000000, 3e9, rtz); 58#endif 59 60 # test negative NaN, negative infinity conversion 61 TEST_CASE(42, x1, 0x000000007fffffff, la x1, tdat_d; fld f1, 0(x1); fcvt.w.d x1, f1) 62#if __riscv_xlen >= 64 63 TEST_CASE(43, x1, 0x7fffffffffffffff, la x1, tdat_d; fld f1, 0(x1); fcvt.l.d x1, f1) 64#endif 65 TEST_CASE(44, x1, 0xffffffff80000000, la x1, tdat_d; fld f1, 16(x1); fcvt.w.d x1, f1) 66#if __riscv_xlen >= 64 67 TEST_CASE(45, x1, 0x8000000000000000, la x1, tdat_d; fld f1, 16(x1); fcvt.l.d x1, f1) 68#endif 69 70 # test positive NaN, positive infinity conversion 71 TEST_CASE(52, x1, 0x000000007fffffff, la x1, tdat_d; fld f1, 8(x1); fcvt.w.d x1, f1) 72#if __riscv_xlen >= 64 73 TEST_CASE(53, x1, 0x7fffffffffffffff, la x1, tdat_d; fld f1, 8(x1); fcvt.l.d x1, f1) 74#endif 75 TEST_CASE(54, x1, 0x000000007fffffff, la x1, tdat_d; fld f1, 24(x1); fcvt.w.d x1, f1) 76#if __riscv_xlen >= 64 77 TEST_CASE(55, x1, 0x7fffffffffffffff, la x1, tdat_d; fld f1, 24(x1); fcvt.l.d x1, f1) 78#endif 79 80 # test NaN, infinity conversions to unsigned integer 81 TEST_CASE(62, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 0(x1); fcvt.wu.d x1, f1) 82 TEST_CASE(63, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 8(x1); fcvt.wu.d x1, f1) 83 TEST_CASE(64, x1, 0, la x1, tdat_d; fld f1, 16(x1); fcvt.wu.d x1, f1) 84 TEST_CASE(65, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 24(x1); fcvt.wu.d x1, f1) 85#if __riscv_xlen >= 64 86 TEST_CASE(66, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 0(x1); fcvt.lu.d x1, f1) 87 TEST_CASE(67, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 8(x1); fcvt.lu.d x1, f1) 88 TEST_CASE(68, x1, 0, la x1, tdat_d; fld f1, 16(x1); fcvt.lu.d x1, f1) 89 TEST_CASE(69, x1, 0xffffffffffffffff, la x1, tdat_d; fld f1, 24(x1); fcvt.lu.d x1, f1) 90#endif 91 92 TEST_PASSFAIL 93 94RVTEST_CODE_END 95 96 .data 97RVTEST_DATA_BEGIN 98 99 TEST_DATA 100 101# -NaN, NaN, -inf, +inf 102tdat: 103.word 0xffffffff 104.word 0x7fffffff 105.word 0xff800000 106.word 0x7f800000 107 108tdat_d: 109.dword 0xffffffffffffffff 110.dword 0x7fffffffffffffff 111.dword 0xfff0000000000000 112.dword 0x7ff0000000000000 113 114RVTEST_DATA_END 115