rvc.S revision 12771
112771Sqtt2@cornell.edu# See LICENSE for license details. 212771Sqtt2@cornell.edu 312771Sqtt2@cornell.edu#***************************************************************************** 412771Sqtt2@cornell.edu# rvc.S 512771Sqtt2@cornell.edu#----------------------------------------------------------------------------- 612771Sqtt2@cornell.edu# 712771Sqtt2@cornell.edu# Test RVC corner cases. 812771Sqtt2@cornell.edu# 912771Sqtt2@cornell.edu 1012771Sqtt2@cornell.edu#include "riscv_test.h" 1112771Sqtt2@cornell.edu#include "test_macros.h" 1212771Sqtt2@cornell.edu 1312771Sqtt2@cornell.eduRVTEST_RV64U 1412771Sqtt2@cornell.eduRVTEST_CODE_BEGIN 1512771Sqtt2@cornell.edu 1612771Sqtt2@cornell.edu .align 2 1712771Sqtt2@cornell.edu .option push 1812771Sqtt2@cornell.edu .option norvc 1912771Sqtt2@cornell.edu 2012771Sqtt2@cornell.edu #define RVC_TEST_CASE(n, r, v, code...) \ 2112771Sqtt2@cornell.edu TEST_CASE (n, r, v, .option push; .option rvc; code; .align 2; .option pop) 2212771Sqtt2@cornell.edu 2312771Sqtt2@cornell.edu // Make sure fetching a 4-byte instruction across a page boundary works. 2412771Sqtt2@cornell.edu li TESTNUM, 2 2512771Sqtt2@cornell.edu li a1, 666 2612771Sqtt2@cornell.edu TEST_CASE (2, a1, 667, \ 2712771Sqtt2@cornell.edu j 1f; \ 2812771Sqtt2@cornell.edu .align 3; \ 2912771Sqtt2@cornell.edu data: \ 3012771Sqtt2@cornell.edu .dword 0xfedcba9876543210; \ 3112771Sqtt2@cornell.edu .dword 0xfedcba9876543210; \ 3212771Sqtt2@cornell.edu .align 12; \ 3312771Sqtt2@cornell.edu .skip 4094; \ 3412771Sqtt2@cornell.edu 1: addi a1, a1, 1) 3512771Sqtt2@cornell.edu 3612771Sqtt2@cornell.edu li sp, 0x1234 3712771Sqtt2@cornell.edu RVC_TEST_CASE (3, a0, 0x1234 + 1020, c.addi4spn a0, sp, 1020) 3812771Sqtt2@cornell.edu RVC_TEST_CASE (4, sp, 0x1234 + 496, c.addi16sp sp, 496) 3912771Sqtt2@cornell.edu RVC_TEST_CASE (5, sp, 0x1234 + 496 - 512, c.addi16sp sp, -512) 4012771Sqtt2@cornell.edu 4112771Sqtt2@cornell.edu la a1, data 4212771Sqtt2@cornell.edu RVC_TEST_CASE (6, a2, 0xfffffffffedcba99, c.lw a0, 4(a1); addi a0, a0, 1; c.sw a0, 4(a1); c.lw a2, 4(a1)) 4312771Sqtt2@cornell.edu#if __riscv_xlen == 64 4412771Sqtt2@cornell.edu RVC_TEST_CASE (7, a2, 0xfedcba9976543211, c.ld a0, 0(a1); addi a0, a0, 1; c.sd a0, 0(a1); c.ld a2, 0(a1)) 4512771Sqtt2@cornell.edu#endif 4612771Sqtt2@cornell.edu 4712771Sqtt2@cornell.edu RVC_TEST_CASE (8, a0, -15, ori a0, x0, 1; c.addi a0, -16) 4812771Sqtt2@cornell.edu RVC_TEST_CASE (9, a5, -16, ori a5, x0, 1; c.li a5, -16) 4912771Sqtt2@cornell.edu#if __riscv_xlen == 64 5012771Sqtt2@cornell.edu RVC_TEST_CASE (10, a0, 0x76543210, ld a0, (a1); c.addiw a0, -1) 5112771Sqtt2@cornell.edu#endif 5212771Sqtt2@cornell.edu 5312771Sqtt2@cornell.edu RVC_TEST_CASE (11, s0, 0xffffffffffffffe1, c.lui s0, 0xfffe1; c.srai s0, 12) 5412771Sqtt2@cornell.edu#if __riscv_xlen == 64 5512771Sqtt2@cornell.edu RVC_TEST_CASE (12, s0, 0x000fffffffffffe1, c.lui s0, 0xfffe1; c.srli s0, 12) 5612771Sqtt2@cornell.edu#else 5712771Sqtt2@cornell.edu RVC_TEST_CASE (12, s0, 0x000fffe1, c.lui s0, 0xfffe1; c.srli s0, 12) 5812771Sqtt2@cornell.edu#endif 5912771Sqtt2@cornell.edu RVC_TEST_CASE (14, s0, ~0x11, c.li s0, -2; c.andi s0, ~0x10) 6012771Sqtt2@cornell.edu RVC_TEST_CASE (15, s1, 14, li s1, 20; li a0, 6; c.sub s1, a0) 6112771Sqtt2@cornell.edu RVC_TEST_CASE (16, s1, 18, li s1, 20; li a0, 6; c.xor s1, a0) 6212771Sqtt2@cornell.edu RVC_TEST_CASE (17, s1, 22, li s1, 20; li a0, 6; c.or s1, a0) 6312771Sqtt2@cornell.edu RVC_TEST_CASE (18, s1, 4, li s1, 20; li a0, 6; c.and s1, a0) 6412771Sqtt2@cornell.edu#if __riscv_xlen == 64 6512771Sqtt2@cornell.edu RVC_TEST_CASE (19, s1, 0xffffffff80000000, li s1, 0x7fffffff; li a0, -1; c.subw s1, a0) 6612771Sqtt2@cornell.edu RVC_TEST_CASE (20, s1, 0xffffffff80000000, li s1, 0x7fffffff; li a0, 1; c.addw s1, a0) 6712771Sqtt2@cornell.edu#endif 6812771Sqtt2@cornell.edu RVC_TEST_CASE (21, s0, 0x12340, li s0, 0x1234; c.slli s0, 4) 6912771Sqtt2@cornell.edu 7012771Sqtt2@cornell.edu RVC_TEST_CASE (30, ra, 0, \ 7112771Sqtt2@cornell.edu li ra, 0; \ 7212771Sqtt2@cornell.edu c.j 1f; \ 7312771Sqtt2@cornell.edu c.j 2f; \ 7412771Sqtt2@cornell.edu 1:c.j 1f; \ 7512771Sqtt2@cornell.edu 2:j fail; \ 7612771Sqtt2@cornell.edu 1:) 7712771Sqtt2@cornell.edu 7812771Sqtt2@cornell.edu RVC_TEST_CASE (31, x0, 0, \ 7912771Sqtt2@cornell.edu li a0, 0; \ 8012771Sqtt2@cornell.edu c.beqz a0, 1f; \ 8112771Sqtt2@cornell.edu c.j 2f; \ 8212771Sqtt2@cornell.edu 1:c.j 1f; \ 8312771Sqtt2@cornell.edu 2:j fail; \ 8412771Sqtt2@cornell.edu 1:) 8512771Sqtt2@cornell.edu 8612771Sqtt2@cornell.edu RVC_TEST_CASE (32, x0, 0, \ 8712771Sqtt2@cornell.edu li a0, 1; \ 8812771Sqtt2@cornell.edu c.bnez a0, 1f; \ 8912771Sqtt2@cornell.edu c.j 2f; \ 9012771Sqtt2@cornell.edu 1:c.j 1f; \ 9112771Sqtt2@cornell.edu 2:j fail; \ 9212771Sqtt2@cornell.edu 1:) 9312771Sqtt2@cornell.edu 9412771Sqtt2@cornell.edu RVC_TEST_CASE (33, x0, 0, \ 9512771Sqtt2@cornell.edu li a0, 1; \ 9612771Sqtt2@cornell.edu c.beqz a0, 1f; \ 9712771Sqtt2@cornell.edu c.j 2f; \ 9812771Sqtt2@cornell.edu 1:c.j fail; \ 9912771Sqtt2@cornell.edu 2:) 10012771Sqtt2@cornell.edu 10112771Sqtt2@cornell.edu RVC_TEST_CASE (34, x0, 0, \ 10212771Sqtt2@cornell.edu li a0, 0; \ 10312771Sqtt2@cornell.edu c.bnez a0, 1f; \ 10412771Sqtt2@cornell.edu c.j 2f; \ 10512771Sqtt2@cornell.edu 1:c.j fail; \ 10612771Sqtt2@cornell.edu 2:) 10712771Sqtt2@cornell.edu 10812771Sqtt2@cornell.edu RVC_TEST_CASE (35, ra, 0, \ 10912771Sqtt2@cornell.edu la t0, 1f; \ 11012771Sqtt2@cornell.edu li ra, 0; \ 11112771Sqtt2@cornell.edu c.jr t0; \ 11212771Sqtt2@cornell.edu c.j 2f; \ 11312771Sqtt2@cornell.edu 1:c.j 1f; \ 11412771Sqtt2@cornell.edu 2:j fail; \ 11512771Sqtt2@cornell.edu 1:) 11612771Sqtt2@cornell.edu 11712771Sqtt2@cornell.edu RVC_TEST_CASE (36, ra, -2, \ 11812771Sqtt2@cornell.edu la t0, 1f; \ 11912771Sqtt2@cornell.edu li ra, 0; \ 12012771Sqtt2@cornell.edu c.jalr t0; \ 12112771Sqtt2@cornell.edu c.j 2f; \ 12212771Sqtt2@cornell.edu 1:c.j 1f; \ 12312771Sqtt2@cornell.edu 2:j fail; \ 12412771Sqtt2@cornell.edu 1:sub ra, ra, t0) 12512771Sqtt2@cornell.edu 12612771Sqtt2@cornell.edu#if __riscv_xlen == 32 12712771Sqtt2@cornell.edu RVC_TEST_CASE (37, ra, -2, \ 12812771Sqtt2@cornell.edu la t0, 1f; \ 12912771Sqtt2@cornell.edu li ra, 0; \ 13012771Sqtt2@cornell.edu c.jal 1f; \ 13112771Sqtt2@cornell.edu c.j 2f; \ 13212771Sqtt2@cornell.edu 1:c.j 1f; \ 13312771Sqtt2@cornell.edu 2:j fail; \ 13412771Sqtt2@cornell.edu 1:sub ra, ra, t0) 13512771Sqtt2@cornell.edu#endif 13612771Sqtt2@cornell.edu 13712771Sqtt2@cornell.edu la sp, data 13812771Sqtt2@cornell.edu RVC_TEST_CASE (40, a2, 0xfffffffffedcba99, c.lwsp a0, 12(sp); addi a0, a0, 1; c.swsp a0, 12(sp); c.lwsp a2, 12(sp)) 13912771Sqtt2@cornell.edu#if __riscv_xlen == 64 14012771Sqtt2@cornell.edu RVC_TEST_CASE (41, a2, 0xfedcba9976543211, c.ldsp a0, 8(sp); addi a0, a0, 1; c.sdsp a0, 8(sp); c.ldsp a2, 8(sp)) 14112771Sqtt2@cornell.edu#endif 14212771Sqtt2@cornell.edu 14312771Sqtt2@cornell.edu RVC_TEST_CASE (42, t0, 0x246, li a0, 0x123; c.mv t0, a0; c.add t0, a0) 14412771Sqtt2@cornell.edu 14512771Sqtt2@cornell.edu .option pop 14612771Sqtt2@cornell.edu 14712771Sqtt2@cornell.edu TEST_PASSFAIL 14812771Sqtt2@cornell.edu 14912771Sqtt2@cornell.eduRVTEST_CODE_END 15012771Sqtt2@cornell.edu 15112771Sqtt2@cornell.edu .data 15212771Sqtt2@cornell.eduRVTEST_DATA_BEGIN 15312771Sqtt2@cornell.edu 15412771Sqtt2@cornell.eduRVTEST_DATA_END 155