add predicated version of c.lwsp sv unit test
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 7 Oct 2018 05:51:29 +0000 (06:51 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 7 Oct 2018 05:51:29 +0000 (06:51 +0100)
isa/rv64uc/Makefrag.sv
isa/rv64uc/sv_c_lwsp_predication.S [new file with mode: 0644]

index a50ab2131c2d130f002742a1f83b854a972b356d..52571ae6d61d2dba03c85e4127016ff087d436db 100644 (file)
@@ -6,6 +6,7 @@ rv64uc_sv_tests = \
        sv_c_mv \
        sv_c_mv_predication \
        sv_c_lwsp \
+       sv_c_lwsp_predication \
        sv_c_swsp \
 
 rv64uc_p_tests = $(addprefix rv64uc-p-, $(rv64uc_sv_tests))
diff --git a/isa/rv64uc/sv_c_lwsp_predication.S b/isa/rv64uc/sv_c_lwsp_predication.S
new file mode 100644 (file)
index 0000000..69afdc5
--- /dev/null
@@ -0,0 +1,74 @@
+# See LICENSE for license details.
+
+#*****************************************************************************
+# rvc.S
+#-----------------------------------------------------------------------------
+#
+# Test RVC corner cases.
+#
+
+#include "riscv_test.h"
+#include "sv_test_macros.h"
+
+RVTEST_RV64U
+RVTEST_CODE_BEGIN
+
+  .align 2
+  .option push
+  .option norvc
+
+        li          a2, 0 
+        li          a3, 0 
+        li          a4, 0 
+        li          a0, 0x6; // targetted by use of sp: means skip, copy, copy
+        li          a1, 0x5; // targetted by use of a2: meanss a2, x, a4
+
+
+  mv a6, sp
+  la sp, data;
+
+        SET_SV_MVL(3)
+        SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1, 0),
+                      SV_REG_CSR(1, 2, 0, 2, 1, 0) )
+        SET_SV_2PREDCSRS(
+                      SV_PRED_CSR(1, 2, 0, 0, 10, 1),  
+                      SV_PRED_CSR(1, 12, 0, 0, 11, 1) );
+
+
+  SET_SV_VL(3)
+
+  .option push;
+  .option rvc; 
+  .align 2; 
+  c.lwsp a2, 0(sp); # actually lw a2, 4(sp); lw a4 8(sp) due to twin-predication
+  #lw a2, 0(sp);
+  .option pop
+
+
+        SET_SV_VL(0)
+        CLR_SV_CSRS()
+        SET_SV_MVL(0)
+
+  mv sp, a6
+
+        TEST_SV_IMM(a2, 1002) 
+        TEST_SV_IMM(a3, 0)
+        TEST_SV_IMM(a4, 1005)
+
+  .option pop
+
+        RVTEST_PASS           # Signal success.
+fail:
+        RVTEST_FAIL
+
+RVTEST_CODE_END     # End of test code.
+
+  .data
+data:
+  .word 1001;
+  .word 1002;
+  .word 1005;
+
+RVTEST_DATA_BEGIN
+
+RVTEST_DATA_END