# 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