X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=isa%2Fmacros%2Fscalar%2Ftest_macros.h;h=006f4193a26793501f51032cc4ccce0d0df59d4c;hb=367a13f0c2bd8d6e5a5ed71dbd3c9d46c6e21c3c;hp=7a489e217de0b7cd760edd4d562999a58297b39f;hpb=dbfc84ea469acd3fc97b9da3ddf3d3ff1165b289;p=riscv-tests.git diff --git a/isa/macros/scalar/test_macros.h b/isa/macros/scalar/test_macros.h index 7a489e2..006f419 100644 --- a/isa/macros/scalar/test_macros.h +++ b/isa/macros/scalar/test_macros.h @@ -8,10 +8,12 @@ # Helper macros #----------------------------------------------------------------------- +#define MASK_XLEN(x) ((x) & ((1 << (__riscv_xlen - 1) << 1) - 1)) + #define TEST_CASE( testnum, testreg, correctval, code... ) \ test_ ## testnum: \ code; \ - li x29, correctval; \ + li x29, MASK_XLEN(correctval); \ li TESTNUM, testnum; \ bne testreg, x29, fail; @@ -43,20 +45,20 @@ test_ ## testnum: \ #define TEST_IMM_OP( testnum, inst, result, val1, imm ) \ TEST_CASE( testnum, x3, result, \ - li x1, val1; \ + li x1, MASK_XLEN(val1); \ inst x3, x1, SEXT_IMM(imm); \ ) #define TEST_IMM_SRC1_EQ_DEST( testnum, inst, result, val1, imm ) \ TEST_CASE( testnum, x1, result, \ - li x1, val1; \ + li x1, MASK_XLEN(val1); \ inst x1, x1, SEXT_IMM(imm); \ ) #define TEST_IMM_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ TEST_CASE( testnum, x6, result, \ li x4, 0; \ -1: li x1, val1; \ +1: li x1, MASK_XLEN(val1); \ inst x3, x1, SEXT_IMM(imm); \ TEST_INSERT_NOPS_ ## nop_cycles \ addi x6, x3, 0; \ @@ -68,7 +70,7 @@ test_ ## testnum: \ #define TEST_IMM_SRC1_BYPASS( testnum, nop_cycles, inst, result, val1, imm ) \ TEST_CASE( testnum, x3, result, \ li x4, 0; \ -1: li x1, val1; \ +1: li x1, MASK_XLEN(val1); \ TEST_INSERT_NOPS_ ## nop_cycles \ inst x3, x1, SEXT_IMM(imm); \ addi x4, x4, 1; \ @@ -83,38 +85,10 @@ test_ ## testnum: \ #define TEST_IMM_ZERODEST( testnum, inst, val1, imm ) \ TEST_CASE( testnum, x0, 0, \ - li x1, val1; \ + li x1, MASK_XLEN(val1); \ inst x0, x1, SEXT_IMM(imm); \ ) -#----------------------------------------------------------------------- -# Tests for vector config instructions -#----------------------------------------------------------------------- - -#define TEST_VSETCFGIVL( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12); \ - vsetcfg x1,nxpr,nfpr; \ - li x1, vl; \ - vsetvl x1,x1; \ - ) - -#define TEST_VVCFG( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12) | (nfpr << 6) | nxpr; \ - vsetcfg x1; \ - li x1, vl; \ - vsetvl x1,x1; \ - ) - -#define TEST_VSETVL( testnum, nxpr, nfpr, bank, vl, result ) \ - TEST_CASE( testnum, x1, result, \ - li x1, (bank << 12); \ - vsetcfg x1,nxpr,nfpr; \ - li x1, vl; \ - vsetvl x1, x1; \ - ) - #----------------------------------------------------------------------- # Tests for an instruction with register operands #----------------------------------------------------------------------- @@ -149,36 +123,36 @@ test_ ## testnum: \ #define TEST_RR_OP( testnum, inst, result, val1, val2 ) \ TEST_CASE( testnum, x3, result, \ - li x1, val1; \ - li x2, val2; \ + li x1, MASK_XLEN(val1); \ + li x2, MASK_XLEN(val2); \ inst x3, x1, x2; \ ) #define TEST_RR_SRC1_EQ_DEST( testnum, inst, result, val1, val2 ) \ TEST_CASE( testnum, x1, result, \ - li x1, val1; \ - li x2, val2; \ + li x1, MASK_XLEN(val1); \ + li x2, MASK_XLEN(val2); \ inst x1, x1, x2; \ ) #define TEST_RR_SRC2_EQ_DEST( testnum, inst, result, val1, val2 ) \ TEST_CASE( testnum, x2, result, \ - li x1, val1; \ - li x2, val2; \ + li x1, MASK_XLEN(val1); \ + li x2, MASK_XLEN(val2); \ inst x2, x1, x2; \ ) #define TEST_RR_SRC12_EQ_DEST( testnum, inst, result, val1 ) \ TEST_CASE( testnum, x1, result, \ - li x1, val1; \ + li x1, MASK_XLEN(val1); \ inst x1, x1, x1; \ ) #define TEST_RR_DEST_BYPASS( testnum, nop_cycles, inst, result, val1, val2 ) \ TEST_CASE( testnum, x6, result, \ li x4, 0; \ -1: li x1, val1; \ - li x2, val2; \ +1: li x1, MASK_XLEN(val1); \ + li x2, MASK_XLEN(val2); \ inst x3, x1, x2; \ TEST_INSERT_NOPS_ ## nop_cycles \ addi x6, x3, 0; \ @@ -190,9 +164,9 @@ test_ ## testnum: \ #define TEST_RR_SRC12_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ TEST_CASE( testnum, x3, result, \ li x4, 0; \ -1: li x1, val1; \ +1: li x1, MASK_XLEN(val1); \ TEST_INSERT_NOPS_ ## src1_nops \ - li x2, val2; \ + li x2, MASK_XLEN(val2); \ TEST_INSERT_NOPS_ ## src2_nops \ inst x3, x1, x2; \ addi x4, x4, 1; \ @@ -203,9 +177,9 @@ test_ ## testnum: \ #define TEST_RR_SRC21_BYPASS( testnum, src1_nops, src2_nops, inst, result, val1, val2 ) \ TEST_CASE( testnum, x3, result, \ li x4, 0; \ -1: li x2, val2; \ +1: li x2, MASK_XLEN(val2); \ TEST_INSERT_NOPS_ ## src1_nops \ - li x1, val1; \ + li x1, MASK_XLEN(val1); \ TEST_INSERT_NOPS_ ## src2_nops \ inst x3, x1, x2; \ addi x4, x4, 1; \ @@ -215,13 +189,13 @@ test_ ## testnum: \ #define TEST_RR_ZEROSRC1( testnum, inst, result, val ) \ TEST_CASE( testnum, x2, result, \ - li x1, val; \ + li x1, MASK_XLEN(val); \ inst x2, x0, x1; \ ) #define TEST_RR_ZEROSRC2( testnum, inst, result, val ) \ TEST_CASE( testnum, x2, result, \ - li x1, val; \ + li x1, MASK_XLEN(val); \ inst x2, x1, x0; \ ) @@ -232,8 +206,8 @@ test_ ## testnum: \ #define TEST_RR_ZERODEST( testnum, inst, val1, val2 ) \ TEST_CASE( testnum, x0, 0, \ - li x1, val1; \ - li x2, val2; \ + li x1, MASK_XLEN(val1); \ + li x2, MASK_XLEN(val2); \ inst x0, x1, x2; \ ) @@ -400,6 +374,11 @@ test_ ## testnum: \ # Tests floating-point instructions #----------------------------------------------------------------------- +#define qNaNf 0f:7fc00000 +#define sNaNf 0f:7f800001 +#define qNaN 0d:7ff8000000000000 +#define sNaN 0d:7ff0000000000001 + #define TEST_FP_OP_S_INTERNAL( testnum, flags, result, val1, val2, val3, code... ) \ test_ ## testnum: \ li TESTNUM, testnum; \ @@ -492,12 +471,12 @@ test_ ## testnum: \ TEST_FP_OP_D_INTERNAL( testnum, flags, dword result, val1, 0.0, 0.0, \ inst a0, f0, rm) -#define TEST_FP_CMP_OP_S( testnum, inst, result, val1, val2 ) \ - TEST_FP_OP_S_INTERNAL( testnum, 0, word result, val1, val2, 0.0, \ +#define TEST_FP_CMP_OP_S( testnum, inst, flags, result, val1, val2 ) \ + TEST_FP_OP_S_INTERNAL( testnum, flags, word result, val1, val2, 0.0, \ inst a0, f0, f1) -#define TEST_FP_CMP_OP_D( testnum, inst, result, val1, val2 ) \ - TEST_FP_OP_D_INTERNAL( testnum, 0, dword result, val1, val2, 0.0, \ +#define TEST_FP_CMP_OP_D( testnum, inst, flags, result, val1, val2 ) \ + TEST_FP_OP_D_INTERNAL( testnum, flags, dword result, val1, val2, 0.0, \ inst a0, f0, f1) #define TEST_FCLASS_S(testnum, correct, input) \