diff options
author | Andrew Waterman <aswaterman@gmail.com> | 2025-06-12 15:57:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-12 15:57:08 -0700 |
commit | 7b7074aed2db4f4445205efa5311ba9009f45fb7 (patch) | |
tree | 2675e45a8855bc9c5c6409634e9a331a80adbc23 | |
parent | 355f1fb9b8a7142bee718e4123fea0aa8f49c319 (diff) | |
parent | f5ffcb6c6483a878598532efc86d3c3523502824 (diff) | |
download | riscv-tests-7b7074aed2db4f4445205efa5311ba9009f45fb7.zip riscv-tests-7b7074aed2db4f4445205efa5311ba9009f45fb7.tar.gz riscv-tests-7b7074aed2db4f4445205efa5311ba9009f45fb7.tar.bz2 |
Replace floating magic constant by macro (#623)
* macro: define [sq]NaN[dfh] and [n]Inf[dfh]
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply sNaNf
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply sNaNd
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply qNaNd
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply qNaNf
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply sNaNh
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply Infh
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply nInfh
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply Infd
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply nInfd
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply Inff
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
* apply nInff
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
---------
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
-rw-r--r-- | isa/macros/scalar/test_macros.h | 18 | ||||
-rw-r--r-- | isa/rv64ud/fadd.S | 2 | ||||
-rw-r--r-- | isa/rv64ud/fclass.S | 8 | ||||
-rw-r--r-- | isa/rv64ud/fcmp.S | 6 | ||||
-rw-r--r-- | isa/rv64ud/fcvt.S | 4 | ||||
-rw-r--r-- | isa/rv64ud/fcvt_w.S | 8 | ||||
-rw-r--r-- | isa/rv64ud/fmin.S | 4 | ||||
-rw-r--r-- | isa/rv64ud/move.S | 12 | ||||
-rw-r--r-- | isa/rv64uf/fadd.S | 2 | ||||
-rw-r--r-- | isa/rv64uf/fclass.S | 8 | ||||
-rw-r--r-- | isa/rv64uf/fcmp.S | 6 | ||||
-rw-r--r-- | isa/rv64uf/fcvt_w.S | 8 | ||||
-rw-r--r-- | isa/rv64uf/fmin.S | 4 | ||||
-rw-r--r-- | isa/rv64uzfh/fadd.S | 2 | ||||
-rw-r--r-- | isa/rv64uzfh/fclass.S | 6 | ||||
-rw-r--r-- | isa/rv64uzfh/fcvt_w.S | 4 | ||||
-rw-r--r-- | isa/rv64uzfh/fmin.S | 2 |
17 files changed, 61 insertions, 43 deletions
diff --git a/isa/macros/scalar/test_macros.h b/isa/macros/scalar/test_macros.h index 542afb0..21562d4 100644 --- a/isa/macros/scalar/test_macros.h +++ b/isa/macros/scalar/test_macros.h @@ -417,6 +417,24 @@ test_ ## testnum: \ # Tests floating-point instructions #----------------------------------------------------------------------- +# 16-bit half precision (float16) +#define qNaNh 0x7e00 +#define sNaNh 0x7c01 +#define Infh 0x7c00 +#define nInfh 0xfc00 + +# 32-bit single precision (float) +#define qNaNf 0x7fc00000 +#define sNaNf 0x7f800001 +#define Inff 0x7f800000 +#define nInff 0xff800000 + +# 64-bit double precision (double) +#define qNaNd 0x7ff8000000000000 +#define sNaNd 0x7ff0000000000001 +#define Infd 0x7ff0000000000000 +#define nInfd 0xfff0000000000000 + #define TEST_FP_OP_H_INTERNAL( testnum, flags, result, val1, val2, val3, code... ) \ test_ ## testnum: \ li TESTNUM, testnum; \ diff --git a/isa/rv64ud/fadd.S b/isa/rv64ud/fadd.S index 1d5e611..1a00df4 100644 --- a/isa/rv64ud/fadd.S +++ b/isa/rv64ud/fadd.S @@ -38,7 +38,7 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_D(10, fmul.d, 1, 3.14159265e-8, 3.14159265, 0.00000001 ); # Is the canonical NaN generated for Inf - Inf? - TEST_FP_OP2_D_HEX(11, fsub.d, 0x10, 0x7ff8000000000000, 0x7ff0000000000000, 0x7ff0000000000000); + TEST_FP_OP2_D_HEX(11, fsub.d, 0x10, qNaNd, Infd, Infd); TEST_PASSFAIL diff --git a/isa/rv64ud/fclass.S b/isa/rv64ud/fclass.S index 04a8947..295bb1a 100644 --- a/isa/rv64ud/fclass.S +++ b/isa/rv64ud/fclass.S @@ -23,16 +23,16 @@ RVTEST_CODE_BEGIN # Arithmetic tests #------------------------------------------------------------- - TEST_FCLASS_D( 2, 1 << 0, 0xfff0000000000000 ) + TEST_FCLASS_D( 2, 1 << 0, nInfd ) TEST_FCLASS_D( 3, 1 << 1, 0xbff0000000000000 ) TEST_FCLASS_D( 4, 1 << 2, 0x800fffffffffffff ) TEST_FCLASS_D( 5, 1 << 3, 0x8000000000000000 ) TEST_FCLASS_D( 6, 1 << 4, 0x0000000000000000 ) TEST_FCLASS_D( 7, 1 << 5, 0x000fffffffffffff ) TEST_FCLASS_D( 8, 1 << 6, 0x3ff0000000000000 ) - TEST_FCLASS_D( 9, 1 << 7, 0x7ff0000000000000 ) - TEST_FCLASS_D(10, 1 << 8, 0x7ff0000000000001 ) - TEST_FCLASS_D(11, 1 << 9, 0x7ff8000000000000 ) + TEST_FCLASS_D( 9, 1 << 7, Infd ) + TEST_FCLASS_D(10, 1 << 8, sNaNd ) + TEST_FCLASS_D(11, 1 << 9, qNaNd ) TEST_PASSFAIL diff --git a/isa/rv64ud/fcmp.S b/isa/rv64ud/fcmp.S index 5a0a45d..f5d73e4 100644 --- a/isa/rv64ud/fcmp.S +++ b/isa/rv64ud/fcmp.S @@ -36,15 +36,15 @@ RVTEST_CODE_BEGIN # Only sNaN should signal invalid for feq. TEST_FP_CMP_OP_D( 8, feq.d, 0x00, 0, NaN, 0) TEST_FP_CMP_OP_D( 9, feq.d, 0x00, 0, NaN, NaN) - TEST_FP_CMP_OP_D_HEX(10, feq.d, 0x10, 0, 0x7ff0000000000001, 0) + TEST_FP_CMP_OP_D_HEX(10, feq.d, 0x10, 0, sNaNd, 0) # qNaN should signal invalid for fle/flt. TEST_FP_CMP_OP_D(11, flt.d, 0x10, 0, NaN, 0) TEST_FP_CMP_OP_D(12, flt.d, 0x10, 0, NaN, NaN) - TEST_FP_CMP_OP_D_HEX(13, flt.d, 0x10, 0, 0x7ff0000000000001, 0) + TEST_FP_CMP_OP_D_HEX(13, flt.d, 0x10, 0, sNaNd, 0) TEST_FP_CMP_OP_D(14, fle.d, 0x10, 0, NaN, 0) TEST_FP_CMP_OP_D(15, fle.d, 0x10, 0, NaN, NaN) - TEST_FP_CMP_OP_D_HEX(16, fle.d, 0x10, 0, 0x7ff0000000000001, 0) + TEST_FP_CMP_OP_D_HEX(16, fle.d, 0x10, 0, sNaNd, 0) TEST_PASSFAIL diff --git a/isa/rv64ud/fcvt.S b/isa/rv64ud/fcvt.S index 98916b1..75eb121 100644 --- a/isa/rv64ud/fcvt.S +++ b/isa/rv64ud/fcvt.S @@ -44,7 +44,7 @@ RVTEST_CODE_BEGIN TEST_FCVT_D_S(11, -1.5, -1.5) #if __riscv_xlen >= 64 - TEST_CASE(12, a0, 0x7ff8000000000000, + TEST_CASE(12, a0, qNaNd, la a1, test_data_22; ld a2, 0(a1); fmv.d.x f2, a2; @@ -53,7 +53,7 @@ RVTEST_CODE_BEGIN fmv.x.d a0, f2; ) #else - TEST_CASE_D32(12, a0, a1, 0x7ff8000000000000, + TEST_CASE_D32(12, a0, a1, qNaNd, la a1, test_data_22; fld f2, 0(a1); fcvt.s.d f2, f2; diff --git a/isa/rv64ud/fcvt_w.S b/isa/rv64ud/fcvt_w.S index 56cc29d..5c65e93 100644 --- a/isa/rv64ud/fcvt_w.S +++ b/isa/rv64ud/fcvt_w.S @@ -102,13 +102,13 @@ RVTEST_DATA_BEGIN tdat: .word 0xffffffff .word 0x7fffffff -.word 0xff800000 -.word 0x7f800000 +.word nInff +.word Inff tdat_d: .dword 0xffffffffffffffff .dword 0x7fffffffffffffff -.dword 0xfff0000000000000 -.dword 0x7ff0000000000000 +.dword nInfd +.dword Infd RVTEST_DATA_END diff --git a/isa/rv64ud/fmin.S b/isa/rv64ud/fmin.S index dcda135..150453b 100644 --- a/isa/rv64ud/fmin.S +++ b/isa/rv64ud/fmin.S @@ -40,9 +40,9 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_D(17, fmax.d, 0, -1.0, -1.0, -2.0 ); # FMAX(sNaN, x) = x - TEST_FP_OP2_D_HEX(20, fmax.d, 0x10, 0x3ff0000000000000, 0x7ff0000000000001, 0x3ff0000000000000); + TEST_FP_OP2_D_HEX(20, fmax.d, 0x10, 0x3ff0000000000000, sNaNd, 0x3ff0000000000000); # FMAX(qNaN, qNaN) = canonical NaN - TEST_FP_OP2_D_HEX(21, fmax.d, 0x00, 0x7ff8000000000000, 0x7fffffffffffffff, 0x7fffffffffffffff); + TEST_FP_OP2_D_HEX(21, fmax.d, 0x00, qNaNd, 0x7fffffffffffffff, 0x7fffffffffffffff); # -0.0 < +0.0 TEST_FP_OP2_D(30, fmin.d, 0, -0.0, -0.0, 0.0 ); diff --git a/isa/rv64ud/move.S b/isa/rv64ud/move.S index 8911d95..60d3cc3 100644 --- a/isa/rv64ud/move.S +++ b/isa/rv64ud/move.S @@ -55,14 +55,14 @@ RVTEST_CODE_BEGIN fsgnj.s f0, f1, f2; \ fmv.x.d a0, f0) - TEST_FSGNJS(40, 0x7fc00000, 0x7ffffffe12345678, 0) - TEST_FSGNJS(41, 0x7fc00000, 0xfffffffe12345678, 0) - TEST_FSGNJS(42, 0x7fc00000, 0x7fffffff12345678, 0) + TEST_FSGNJS(40, qNaNf, 0x7ffffffe12345678, 0) + TEST_FSGNJS(41, qNaNf, 0xfffffffe12345678, 0) + TEST_FSGNJS(42, qNaNf, 0x7fffffff12345678, 0) TEST_FSGNJS(43, 0x12345678, 0xffffffff12345678, 0) - TEST_FSGNJS(50, 0x7fc00000, 0x7ffffffe12345678, 0x80000000) - TEST_FSGNJS(51, 0x7fc00000, 0xfffffffe12345678, 0x80000000) - TEST_FSGNJS(52, 0x7fc00000, 0x7fffffff12345678, 0x80000000) + TEST_FSGNJS(50, qNaNf, 0x7ffffffe12345678, 0x80000000) + TEST_FSGNJS(51, qNaNf, 0xfffffffe12345678, 0x80000000) + TEST_FSGNJS(52, qNaNf, 0x7fffffff12345678, 0x80000000) TEST_FSGNJS(53, 0x12345678, 0xffffffff12345678, 0x80000000) TEST_FSGNJS(60, 0xffc00000, 0x7ffffffe12345678, 0xffffffff80000000) diff --git a/isa/rv64uf/fadd.S b/isa/rv64uf/fadd.S index 42c2f07..78edcbf 100644 --- a/isa/rv64uf/fadd.S +++ b/isa/rv64uf/fadd.S @@ -30,7 +30,7 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_S(10, fmul.s, 1, 3.14159265e-8, 3.14159265, 0.00000001 ); # Is the canonical NaN generated for Inf - Inf? - TEST_FP_OP2_S_HEX(11, fsub.s, 0x10, 0x7fc00000, 0x7f800000, 0x7f800000); + TEST_FP_OP2_S_HEX(11, fsub.s, 0x10, qNaNf, Inff, Inff); TEST_PASSFAIL diff --git a/isa/rv64uf/fclass.S b/isa/rv64uf/fclass.S index 9bb86b1..f13cfd0 100644 --- a/isa/rv64uf/fclass.S +++ b/isa/rv64uf/fclass.S @@ -17,16 +17,16 @@ RVTEST_CODE_BEGIN # Arithmetic tests #------------------------------------------------------------- - TEST_FCLASS_S( 2, 1 << 0, 0xff800000 ) + TEST_FCLASS_S( 2, 1 << 0, nInff ) TEST_FCLASS_S( 3, 1 << 1, 0xbf800000 ) TEST_FCLASS_S( 4, 1 << 2, 0x807fffff ) TEST_FCLASS_S( 5, 1 << 3, 0x80000000 ) TEST_FCLASS_S( 6, 1 << 4, 0x00000000 ) TEST_FCLASS_S( 7, 1 << 5, 0x007fffff ) TEST_FCLASS_S( 8, 1 << 6, 0x3f800000 ) - TEST_FCLASS_S( 9, 1 << 7, 0x7f800000 ) - TEST_FCLASS_S(10, 1 << 8, 0x7f800001 ) - TEST_FCLASS_S(11, 1 << 9, 0x7fc00000 ) + TEST_FCLASS_S( 9, 1 << 7, Inff ) + TEST_FCLASS_S(10, 1 << 8, sNaNf ) + TEST_FCLASS_S(11, 1 << 9, qNaNf ) TEST_PASSFAIL diff --git a/isa/rv64uf/fcmp.S b/isa/rv64uf/fcmp.S index 155a60f..45642ae 100644 --- a/isa/rv64uf/fcmp.S +++ b/isa/rv64uf/fcmp.S @@ -28,15 +28,15 @@ RVTEST_CODE_BEGIN # Only sNaN should signal invalid for feq. TEST_FP_CMP_OP_S( 8, feq.s, 0x00, 0, NaN, 0) TEST_FP_CMP_OP_S( 9, feq.s, 0x00, 0, NaN, NaN) - TEST_FP_CMP_OP_S_HEX(10, feq.s, 0x10, 0, 0x7f800001, 0) + TEST_FP_CMP_OP_S_HEX(10, feq.s, 0x10, 0, sNaNf, 0) # qNaN should signal invalid for fle/flt. TEST_FP_CMP_OP_S(11, flt.s, 0x10, 0, NaN, 0) TEST_FP_CMP_OP_S(12, flt.s, 0x10, 0, NaN, NaN) - TEST_FP_CMP_OP_S_HEX(13, flt.s, 0x10, 0, 0x7f800001, 0) + TEST_FP_CMP_OP_S_HEX(13, flt.s, 0x10, 0, sNaNf, 0) TEST_FP_CMP_OP_S(14, fle.s, 0x10, 0, NaN, 0) TEST_FP_CMP_OP_S(15, fle.s, 0x10, 0, NaN, NaN) - TEST_FP_CMP_OP_S_HEX(16, fle.s, 0x10, 0, 0x7f800001, 0) + TEST_FP_CMP_OP_S_HEX(16, fle.s, 0x10, 0, sNaNf, 0) TEST_PASSFAIL diff --git a/isa/rv64uf/fcvt_w.S b/isa/rv64uf/fcvt_w.S index cad5cba..c5ea603 100644 --- a/isa/rv64uf/fcvt_w.S +++ b/isa/rv64uf/fcvt_w.S @@ -93,13 +93,13 @@ RVTEST_DATA_BEGIN tdat: .word 0xffffffff .word 0x7fffffff -.word 0xff800000 -.word 0x7f800000 +.word nInff +.word Inff tdat_d: .dword 0xffffffffffffffff .dword 0x7fffffffffffffff -.dword 0xfff0000000000000 -.dword 0x7ff0000000000000 +.dword nInfd +.dword Infd RVTEST_DATA_END diff --git a/isa/rv64uf/fmin.S b/isa/rv64uf/fmin.S index e95495e..2027b0c 100644 --- a/isa/rv64uf/fmin.S +++ b/isa/rv64uf/fmin.S @@ -32,9 +32,9 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_S(17, fmax.s, 0, -1.0, -1.0, -2.0 ); # FMAX(sNaN, x) = x - TEST_FP_OP2_S_HEX(20, fmax.s, 0x10, 0x3f800000, 0x7f800001, 0x3f800000); + TEST_FP_OP2_S_HEX(20, fmax.s, 0x10, 0x3f800000, sNaNf, 0x3f800000); # FMAX(qNaN, qNaN) = canonical NaN - TEST_FP_OP2_S_HEX(21, fmax.s, 0x00, 0x7fc00000, 0x7fffffff, 0x7fffffff); + TEST_FP_OP2_S_HEX(21, fmax.s, 0x00, qNaNf, 0x7fffffff, 0x7fffffff); # -0.0 < +0.0 TEST_FP_OP2_S(30, fmin.s, 0, -0.0, -0.0, 0.0 ); diff --git a/isa/rv64uzfh/fadd.S b/isa/rv64uzfh/fadd.S index e798ea2..973a59c 100644 --- a/isa/rv64uzfh/fadd.S +++ b/isa/rv64uzfh/fadd.S @@ -30,7 +30,7 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_H(10, fmul.h, 1, 1.1, 11.0, 0.1 ); # Is the canonical NaN generated for Inf - Inf? - TEST_FP_OP2_H_HEX(11, fsub.h, 0x10, 0x7e00, 0x7c00, 0x7c00); + TEST_FP_OP2_H_HEX(11, fsub.h, 0x10, 0x7e00, Infh, Infh); TEST_PASSFAIL diff --git a/isa/rv64uzfh/fclass.S b/isa/rv64uzfh/fclass.S index 86af7e5..a10f241 100644 --- a/isa/rv64uzfh/fclass.S +++ b/isa/rv64uzfh/fclass.S @@ -21,15 +21,15 @@ RVTEST_CODE_BEGIN TEST_CASE(testnum, a0, correct, li a0, input; fmv.h.x fa0, a0; \ fclass.h a0, fa0) - TEST_FCLASS_H( 2, 1 << 0, 0xfc00 ) + TEST_FCLASS_H( 2, 1 << 0, nInfh ) TEST_FCLASS_H( 3, 1 << 1, 0xbc00 ) TEST_FCLASS_H( 4, 1 << 2, 0x83ff ) TEST_FCLASS_H( 5, 1 << 3, 0x8000 ) TEST_FCLASS_H( 6, 1 << 4, 0x0000 ) TEST_FCLASS_H( 7, 1 << 5, 0x03ff ) TEST_FCLASS_H( 8, 1 << 6, 0x3c00 ) - TEST_FCLASS_H( 9, 1 << 7, 0x7c00 ) - TEST_FCLASS_H(10, 1 << 8, 0x7c01 ) + TEST_FCLASS_H( 9, 1 << 7, Infh ) + TEST_FCLASS_H(10, 1 << 8, sNaNh ) TEST_FCLASS_H(11, 1 << 9, 0x7e00 ) TEST_PASSFAIL diff --git a/isa/rv64uzfh/fcvt_w.S b/isa/rv64uzfh/fcvt_w.S index 013ecac..b2ac1bf 100644 --- a/isa/rv64uzfh/fcvt_w.S +++ b/isa/rv64uzfh/fcvt_w.S @@ -92,8 +92,8 @@ RVTEST_DATA_BEGIN #tdat: #.word 0xffffffff #.word 0x7fffffff -#.word 0xff800000 -#.word 0x7f800000 +#.word nInff +#.word Inff tdat: .word 0xffffffff diff --git a/isa/rv64uzfh/fmin.S b/isa/rv64uzfh/fmin.S index ab381cf..35d7b5d 100644 --- a/isa/rv64uzfh/fmin.S +++ b/isa/rv64uzfh/fmin.S @@ -32,7 +32,7 @@ RVTEST_CODE_BEGIN TEST_FP_OP2_H(17, fmax.h, 0, -1.0, -1.0, -2.0 ); # FMIN(sNaN, x) = x - TEST_FP_OP2_H_HEX(20, fmax.h, 0x10, 0x3c00, 0x7c01, 0x3c00); + TEST_FP_OP2_H_HEX(20, fmax.h, 0x10, 0x3c00, sNaNh, 0x3c00); # FMIN(hNaN, hNaN) = canonical NaN TEST_FP_OP2_H_HEX(21, fmax.h, 0x00, 0x7e00, 0x7fff, 0x7fff); |