fix up c_lwsp and predicated test
[riscv-tests.git] / isa / rv64uc / sv_c_lwsp.S
index db3c94f03be85eaf5489fb1f60409acf52bf7f8d..81503a46a568508d6c263627b9da09460b1d5dae 100644 (file)
@@ -17,33 +17,69 @@ RVTEST_CODE_BEGIN
   .option push
   .option norvc
 
-        li          a2, 0 
-        li          a3, 0 
+        li          a2, 0
+        li          a3, 0
+        li          a4, 0
 
-        SET_SV_MVL(2)
-        SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1, 0),
-                      SV_REG_CSR(1, 2, 0, 2, 1, 0) )
-        SET_SV_VL(2)
+        SET_SV_MVL(3)
+        SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1),
+                      SV_REG_CSR(1, 2, 0, 28, 0) )
+        SET_SV_VL(3)
+
+  # store addr of data in x28 because CSR redirects x2 to x28
+  # and c.lwsp is an element-offset (if isvec=true that is)
+  la x28, data;
+
+  .option push;
+  .option rvc;
+  .align 2;
+  c.lwsp a2, 0(sp); # SP is actually redirected to x28!
+  .option pop
+
+
+        SET_SV_VL(1)
+        CLR_SV_CSRS()
+        SET_SV_MVL(1)
+
+        TEST_SV_IMM(a2, 1001)
+        TEST_SV_IMM(a3, 1002)
+        TEST_SV_IMM(a4, 1005)
+
+  .option pop
+
+  .align 2
+  .option push
+  .option norvc
+
+        li          a2, 0
+        li          a3, 0
+        li          a4, 0
+
+        SET_SV_MVL(3)
+        SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1),
+                      SV_REG_CSR(1, 2, 0, 2, 0) )
+        SET_SV_VL(3)
 
   mv a1, sp
   la sp, data;
 
   .option push;
-  .option rvc; 
-  .align 2; 
+  .option rvc;
+  .align 2;
   c.lwsp a2, 0(sp);
   #lw a2, 0(sp);
   .option pop
 
 
-        SET_SV_VL(0)
+        SET_SV_VL(1)
         CLR_SV_CSRS()
-        SET_SV_MVL(0)
+        SET_SV_MVL(1)
 
   mv sp, a1
 
-        TEST_SV_IMM(a2, 1001) 
+        TEST_SV_IMM(a2, 1001)
         TEST_SV_IMM(a3, 1002)
+        TEST_SV_IMM(a4, 1005)
 
   .option pop
 
@@ -57,7 +93,7 @@ RVTEST_CODE_END     # End of test code.
 data:
   .word 1001;
   .word 1002;
-  .word 0x01234567;
+  .word 1005;
 
 RVTEST_DATA_BEGIN