Add another FP recoding test case
authorAndrew Waterman <waterman@cs.berkeley.edu>
Sun, 20 Sep 2015 21:57:19 +0000 (14:57 -0700)
committerAndrew Waterman <waterman@cs.berkeley.edu>
Sun, 20 Sep 2015 23:19:09 +0000 (16:19 -0700)
isa/rv64uf/recoding.S

index dee7f6d430ffcc05f690a937db75debf10598c11..6397143feff169c605102cc16cec4f29e38f935f 100644 (file)
@@ -5,6 +5,9 @@
 #-----------------------------------------------------------------------------
 #
 # Test corner cases of John Hauser's microarchitectural recoding scheme.
 #-----------------------------------------------------------------------------
 #
 # Test corner cases of John Hauser's microarchitectural recoding scheme.
+# There are twice as many recoded values as IEEE-754 values; some of these
+# extras are redundant (e.g. Inf) and others are illegal (subnormals with
+# too many bits set).
 #
 
 #include "riscv_test.h"
 #
 
 #include "riscv_test.h"
 RVTEST_RV64UF
 RVTEST_CODE_BEGIN
 
 RVTEST_RV64UF
 RVTEST_CODE_BEGIN
 
-  # Infinity has a redundant internal form in Rocket.
-  # Make sure two different internal infinities compare as equal.
-  li TESTNUM, 8
+  # Make sure infinities with different mantissas compare as equal.
   flw f0, minf, a0
   flw f1, three, a0
   fmul.s f1, f1, f0
   flw f0, minf, a0
   flw f1, three, a0
   fmul.s f1, f1, f0
-  TEST_CASE( 8, a0, 1, feq.s a0, f0, f1)
-  TEST_CASE( 9, a0, 1, fle.s a0, f0, f1)
-  TEST_CASE(10, a0, 0, flt.s a0, f0, f1)
+  TEST_CASE( 2, a0, 1, feq.s a0, f0, f1)
+  TEST_CASE( 3, a0, 1, fle.s a0, f0, f1)
+  TEST_CASE( 4, a0, 0, flt.s a0, f0, f1)
+
+  # When converting small doubles to single-precision subnormals,
+  # ensure that the extra precision is discarded.
+  flw f0, big, a0
+  fld f1, tiny, a0
+  fcvt.s.d f1, f1
+  fmul.s f0, f0, f1
+  fmv.x.s a0, f0
+  lw a1, small
+  TEST_CASE(10, a0, 0, sub a0, a0, a1)
 
   TEST_PASSFAIL
 
 
   TEST_PASSFAIL
 
@@ -32,5 +43,8 @@ RVTEST_DATA_BEGIN
 
 minf: .float -Inf
 three: .float 3.0
 
 minf: .float -Inf
 three: .float 3.0
+big: .float 1221
+small: .float 2.9133121e-37
+tiny: .double 2.3860049081905093e-40
 
 RVTEST_DATA_END
 
 RVTEST_DATA_END