add some twin-predication zeroing unit tests on c.mv
[riscv-tests.git] / isa / rv64uc / sv_c_mv_predication.S
index 65b2bd6c4c732f028725a90f9d36b6f9910ec9eb..76d744cc48a450ba248ccc3b6ee480d439f4ae89 100644 (file)
@@ -4,37 +4,38 @@
 RVTEST_RV64U        # Define TVM used by program.
 
 
-#define SV_PRED_C_MV_TEST( pred1, pred2, expect1, expect2, expect3 ) \
+#define SV_PRED_C_MV_TEST( pred1, pred2, zero1, zero2, \
+                            expect1, expect2, expect3 ) \
                                                        \
-        SV_LD_DATA( x5, testdata+0 , 0);               \
-        SV_LD_DATA( x6, testdata+8, 0);                \
-        SV_LD_DATA( x7, testdata+16, 0);               \
+        SV_LD_DATA( x6, testdata+0 , 0);               \
+        SV_LD_DATA( x7, testdata+8, 0);                \
+        SV_LD_DATA( x8, testdata+16, 0);               \
                                                        \
-        li          x2, 2;                             \
-        li          x3, 3;                             \
-        li          x4, 4;                             \
+        li          x3, 2;                             \
+        li          x4, 3;                             \
+        li          x5, 4;                             \
         li          a3, pred1;                         \
         li          a4, pred2;                         \
                                                        \
         SET_SV_MVL(3);                                 \
-        SET_SV_2CSRS( SV_REG_CSR(1, 2, 0, 2, 1, 0),    \
-                      SV_REG_CSR(1, 5, 0, 5, 1, 0) );  \
+        SET_SV_2CSRS( SV_REG_CSR(1, 3, 0, 3, 1),       \
+                      SV_REG_CSR(1, 6, 0, 6, 1) );     \
         SET_SV_2PREDCSRS(                              \
-                      SV_PRED_CSR(1, 2, 0, 0, 13, 1),  \
-                      SV_PRED_CSR(1, 5, 0, 0, 14, 1) );\
+                      SV_PRED_CSR(1, 3, zero1, 0, 13, 0),  \
+                      SV_PRED_CSR(1, 6, zero2, 0, 14, 0) );\
         SET_SV_VL(3);                                  \
                                                        \
         .option rvc;                                   \
-        c.mv    x2, x5;                                \
+        c.mv    x3, x6;                                \
         .option norvc;                                 \
                                                        \
-        SET_SV_VL(0);                                  \
+        SET_SV_VL(1);                                  \
         CLR_SV_CSRS();                                 \
-        SET_SV_MVL(0);                                 \
+        SET_SV_MVL(1);                                 \
                                                        \
-        TEST_SV_IMM(x2, expect1);                      \
-        TEST_SV_IMM(x3, expect2);                      \
-        TEST_SV_IMM(x4, expect3);
+        TEST_SV_IMM(x3, expect1);                      \
+        TEST_SV_IMM(x4, expect2);                      \
+        TEST_SV_IMM(x5, expect3);
 
 # SV test: vector-vector add different rd and rs1
 #
@@ -46,24 +47,32 @@ RVTEST_CODE_BEGIN   # Start of test code.
 
         .option norvc
 
-        SV_PRED_C_MV_TEST( 0x7, 0x7, 1001, 41, 42 )
-        SV_PRED_C_MV_TEST( 0x3, 0x7, 1001, 41, 4 )
-        SV_PRED_C_MV_TEST( 0x1, 0x7, 1001, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x7, 0x7, 0, 0, 1001, 41, 42 )
+        SV_PRED_C_MV_TEST( 0x3, 0x7, 0, 0, 1001, 41, 4 )
+        SV_PRED_C_MV_TEST( 0x1, 0x7, 0, 0, 1001, 3, 4 )
 
-        SV_PRED_C_MV_TEST( 0x6, 0x7, 2, 1001, 41 )
-        SV_PRED_C_MV_TEST( 0x6, 0x3, 2, 1001, 41 )
-        SV_PRED_C_MV_TEST( 0x6, 0x1, 2, 1001, 4 )
-        SV_PRED_C_MV_TEST( 0x6, 0x6, 2, 41, 42 )
+        SV_PRED_C_MV_TEST( 0x6, 0x7, 0, 0, 2, 1001, 41 )
+        SV_PRED_C_MV_TEST( 0x6, 0x3, 0, 0, 2, 1001, 41 )
+        SV_PRED_C_MV_TEST( 0x6, 0x1, 0, 0, 2, 1001, 4 )
+        SV_PRED_C_MV_TEST( 0x6, 0x6, 0, 0, 2, 41, 42 )
 
-        SV_PRED_C_MV_TEST( 0x5, 0x6, 41, 3, 42 )
+        SV_PRED_C_MV_TEST( 0x5, 0x6, 0, 0, 41, 3, 42 )
 
-        SV_PRED_C_MV_TEST( 0x1, 0x1, 1001, 3, 4 )
-        SV_PRED_C_MV_TEST( 0x2, 0x1, 2, 1001, 4 )
-        SV_PRED_C_MV_TEST( 0x4, 0x1, 2, 3, 1001 )
+        SV_PRED_C_MV_TEST( 0x1, 0x1, 0, 0, 1001, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x2, 0x1, 0, 0, 2, 1001, 4 )
+        SV_PRED_C_MV_TEST( 0x4, 0x1, 0, 0, 2, 3, 1001 )
 
-        SV_PRED_C_MV_TEST( 0x1, 0x1, 1001, 3, 4 )
-        SV_PRED_C_MV_TEST( 0x1, 0x2, 41, 3, 4 )
-        SV_PRED_C_MV_TEST( 0x1, 0x4, 42, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x1, 0x1, 0, 0, 1001, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x1, 0x2, 0, 0, 41, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x1, 0x4, 0, 0, 42, 3, 4 )
+
+        # test zeroing with predication
+        SV_PRED_C_MV_TEST( 0x1, 0x1, 1, 1, 1001, 0, 0 )
+        SV_PRED_C_MV_TEST( 0x2, 0x3, 1, 1, 0, 41, 0 )
+        SV_PRED_C_MV_TEST( 0x5, 0x5, 1, 1, 1001, 0, 42 )
+        SV_PRED_C_MV_TEST( 0x1, 0x1, 1, 0, 1001, 3, 4 )
+        SV_PRED_C_MV_TEST( 0x2, 0x3, 1, 0, 0, 41, 4 )
+        SV_PRED_C_MV_TEST( 0x5, 0x5, 1, 0, 1001, 0, 4 )
 
         RVTEST_PASS           # Signal success.
 fail: