diff options
author | Andrew Waterman <waterman@eecs.berkeley.edu> | 2014-03-06 18:23:05 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@eecs.berkeley.edu> | 2014-03-06 18:23:05 -0800 |
commit | b3b1ebc672d3cc83cfda5799c05d39f97a9796a1 (patch) | |
tree | 175978d307c1b7b34e3c140bf9216733aeff09b3 /isa/rv64uf | |
parent | ed3b9560a17aee8d1fe4ecaa520aeec8a7355a67 (diff) | |
download | riscv-tests-b3b1ebc672d3cc83cfda5799c05d39f97a9796a1.zip riscv-tests-b3b1ebc672d3cc83cfda5799c05d39f97a9796a1.tar.gz riscv-tests-b3b1ebc672d3cc83cfda5799c05d39f97a9796a1.tar.bz2 |
Add fclass.{s|d} test
Diffstat (limited to 'isa/rv64uf')
-rw-r--r-- | isa/rv64uf/Makefrag | 2 | ||||
-rw-r--r-- | isa/rv64uf/fclass.S | 57 |
2 files changed, 58 insertions, 1 deletions
diff --git a/isa/rv64uf/Makefrag b/isa/rv64uf/Makefrag index fc9da14..95c8647 100644 --- a/isa/rv64uf/Makefrag +++ b/isa/rv64uf/Makefrag @@ -3,7 +3,7 @@ #----------------------------------------------------------------------- rv64uf_sc_tests = \ - fadd fcmp fcvt fcvt_w fmadd fmin fsgnj \ + fadd fclass fcmp fcvt fcvt_w fmadd fmin fsgnj \ ldst move structural \ rv64uf_sc_vec_tests = \ diff --git a/isa/rv64uf/fclass.S b/isa/rv64uf/fclass.S new file mode 100644 index 0000000..9b814e6 --- /dev/null +++ b/isa/rv64uf/fclass.S @@ -0,0 +1,57 @@ +#***************************************************************************** +# fclass.S +#----------------------------------------------------------------------------- +# +# Test fclass.{s|d} instructions. +# + +#include "riscv_test.h" +#include "test_macros.h" + +RVTEST_RV64UF +RVTEST_CODE_BEGIN + + #------------------------------------------------------------- + # Arithmetic tests + #------------------------------------------------------------- + + #define TEST_FCLASS_S(testnum, correct, input) \ + TEST_CASE(testnum, a0, correct, li a0, input; fmv.s.x fa0, a0; \ + fclass.s a0, fa0) + + TEST_FCLASS_S( 2, 1 << 0, 0xff800000 ) + 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 ) + + #define TEST_FCLASS_D(testnum, correct, input) \ + TEST_CASE(testnum, a0, correct, li a0, input; fmv.d.x fa0, a0; \ + fclass.d a0, fa0) + + TEST_FCLASS_D(12, 1 << 0, 0xfff0000000000000 ) + TEST_FCLASS_D(13, 1 << 1, 0xbff0000000000000 ) + TEST_FCLASS_D(14, 1 << 2, 0x800fffffffffffff ) + TEST_FCLASS_D(15, 1 << 3, 0x8000000000000000 ) + TEST_FCLASS_D(16, 1 << 4, 0x0000000000000000 ) + TEST_FCLASS_D(17, 1 << 5, 0x000fffffffffffff ) + TEST_FCLASS_D(18, 1 << 6, 0x3ff0000000000000 ) + TEST_FCLASS_D(19, 1 << 7, 0x7ff0000000000000 ) + TEST_FCLASS_D(20, 1 << 8, 0x7ff0000000000001 ) + TEST_FCLASS_D(21, 1 << 9, 0x7ff8000000000000 ) + + TEST_PASSFAIL + +RVTEST_CODE_END + + .data +RVTEST_DATA_BEGIN + + TEST_DATA + +RVTEST_DATA_END |