redirect c_lwsp / c_swsp to x28
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 11 Nov 2018 20:28:58 +0000 (20:28 +0000)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 11 Nov 2018 20:28:58 +0000 (20:28 +0000)
isa/rv64uc/sv_c_lwsp.S
isa/rv64uc/sv_c_swsp.S

index 38dcaa2135ce134ce287e7d9c7374a248b389444..a64220334ce0a4573b7a08f211c7bb255bc68499 100644 (file)
@@ -17,9 +17,43 @@ RVTEST_CODE_BEGIN
   .option push
   .option norvc
 
   .option push
   .option norvc
 
-        li          a2, 0 
-        li          a3, 0 
-        li          a4, 0 
+        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, 28, 1) )
+        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),
 
         SET_SV_MVL(3)
         SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1),
@@ -30,8 +64,8 @@ RVTEST_CODE_BEGIN
   la sp, data;
 
   .option push;
   la sp, data;
 
   .option push;
-  .option rvc; 
-  .align 2; 
+  .option rvc;
+  .align 2;
   c.lwsp a2, 0(sp);
   #lw a2, 0(sp);
   .option pop
   c.lwsp a2, 0(sp);
   #lw a2, 0(sp);
   .option pop
@@ -43,7 +77,7 @@ RVTEST_CODE_BEGIN
 
   mv sp, a1
 
 
   mv sp, a1
 
-        TEST_SV_IMM(a2, 1001) 
+        TEST_SV_IMM(a2, 1001)
         TEST_SV_IMM(a3, 1002)
         TEST_SV_IMM(a4, 1005)
 
         TEST_SV_IMM(a3, 1002)
         TEST_SV_IMM(a4, 1005)
 
index 622ca9eb37f95e2d0d9d3326e06fe12b9491490a..64d38cdfda6556520d05f4de911d1921a9cf349b 100644 (file)
 RVTEST_RV64U
 RVTEST_CODE_BEGIN
 
 RVTEST_RV64U
 RVTEST_CODE_BEGIN
 
+  .align 2
+  .option push
+  .option norvc
+
+        li          a2, 1000;
+        li          a3, 1001;
+        li          a4, 1004;
+
+        SET_SV_MVL(3)
+        SET_SV_2CSRS( SV_REG_CSR(1, 12, 0, 12, 1),
+                      SV_REG_CSR(1, 2, 0, 28, 1) )
+        SET_SV_VL(3)
+
+  # CSR redirects SP (x2) to x28
+  la x28, data;
+
+  .option push;
+  .option rvc;
+  .align 2;
+  c.swsp a2, 0(sp); # not SP, actually x28!
+  .option pop
+
+
+        SET_SV_VL(1)
+        CLR_SV_CSRS()
+        SET_SV_MVL(1)
+
+  la a2, data;
+  lw a4, 0(a2);
+  lw a5, 4(a2);
+  lw a6, 8(a2);
+
+        TEST_SV_IMM(a4, 1000)
+        TEST_SV_IMM(a5, 1001)
+        TEST_SV_IMM(a6, 1004)
+
+  .option pop
+
   .align 2
   .option push
   .option norvc
   .align 2
   .option push
   .option norvc
@@ -30,8 +68,8 @@ RVTEST_CODE_BEGIN
   la sp, data;
 
   .option push;
   la sp, data;
 
   .option push;
-  .option rvc; 
-  .align 2; 
+  .option rvc;
+  .align 2;
   c.swsp a2, 0(sp);
   #lw a2, 0(sp);
   .option pop
   c.swsp a2, 0(sp);
   #lw a2, 0(sp);
   .option pop
@@ -48,7 +86,7 @@ RVTEST_CODE_BEGIN
   lw a5, 4(a2);
   lw a6, 8(a2);
 
   lw a5, 4(a2);
   lw a6, 8(a2);
 
-        TEST_SV_IMM(a4, 1000) 
+        TEST_SV_IMM(a4, 1000)
         TEST_SV_IMM(a5, 1001)
         TEST_SV_IMM(a6, 1004)
 
         TEST_SV_IMM(a5, 1001)
         TEST_SV_IMM(a6, 1004)