rvc.S revision 12771:75508af5d8dc
11897Sstever@eecs.umich.edu# See LICENSE for license details. 23077Sstever@eecs.umich.edu 31897Sstever@eecs.umich.edu#***************************************************************************** 41897Sstever@eecs.umich.edu# rvc.S 51897Sstever@eecs.umich.edu#----------------------------------------------------------------------------- 61897Sstever@eecs.umich.edu# 71897Sstever@eecs.umich.edu# Test RVC corner cases. 81897Sstever@eecs.umich.edu# 91897Sstever@eecs.umich.edu 101897Sstever@eecs.umich.edu#include "riscv_test.h" 111897Sstever@eecs.umich.edu#include "test_macros.h" 121897Sstever@eecs.umich.edu 131897Sstever@eecs.umich.eduRVTEST_RV64U 141897Sstever@eecs.umich.eduRVTEST_CODE_BEGIN 151897Sstever@eecs.umich.edu 161897Sstever@eecs.umich.edu .align 2 171897Sstever@eecs.umich.edu .option push 181897Sstever@eecs.umich.edu .option norvc 191897Sstever@eecs.umich.edu 201897Sstever@eecs.umich.edu #define RVC_TEST_CASE(n, r, v, code...) \ 211897Sstever@eecs.umich.edu TEST_CASE (n, r, v, .option push; .option rvc; code; .align 2; .option pop) 221897Sstever@eecs.umich.edu 231897Sstever@eecs.umich.edu // Make sure fetching a 4-byte instruction across a page boundary works. 241897Sstever@eecs.umich.edu li TESTNUM, 2 251897Sstever@eecs.umich.edu li a1, 666 261897Sstever@eecs.umich.edu TEST_CASE (2, a1, 667, \ 271897Sstever@eecs.umich.edu j 1f; \ 281897Sstever@eecs.umich.edu .align 3; \ 291897Sstever@eecs.umich.edu data: \ 301897Sstever@eecs.umich.edu .dword 0xfedcba9876543210; \ 311897Sstever@eecs.umich.edu .dword 0xfedcba9876543210; \ 321897Sstever@eecs.umich.edu .align 12; \ 331897Sstever@eecs.umich.edu .skip 4094; \ 341897Sstever@eecs.umich.edu 1: addi a1, a1, 1) 351897Sstever@eecs.umich.edu 361897Sstever@eecs.umich.edu li sp, 0x1234 371897Sstever@eecs.umich.edu RVC_TEST_CASE (3, a0, 0x1234 + 1020, c.addi4spn a0, sp, 1020) 381897Sstever@eecs.umich.edu RVC_TEST_CASE (4, sp, 0x1234 + 496, c.addi16sp sp, 496) 391897Sstever@eecs.umich.edu RVC_TEST_CASE (5, sp, 0x1234 + 496 - 512, c.addi16sp sp, -512) 401897Sstever@eecs.umich.edu 411897Sstever@eecs.umich.edu la a1, data 423077Sstever@eecs.umich.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)) 433099Sstever@eecs.umich.edu#if __riscv_xlen == 64 443099Sstever@eecs.umich.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)) 451897Sstever@eecs.umich.edu#endif 461897Sstever@eecs.umich.edu 473099Sstever@eecs.umich.edu RVC_TEST_CASE (8, a0, -15, ori a0, x0, 1; c.addi a0, -16) 483099Sstever@eecs.umich.edu RVC_TEST_CASE (9, a5, -16, ori a5, x0, 1; c.li a5, -16) 491897Sstever@eecs.umich.edu#if __riscv_xlen == 64 503099Sstever@eecs.umich.edu RVC_TEST_CASE (10, a0, 0x76543210, ld a0, (a1); c.addiw a0, -1) 511897Sstever@eecs.umich.edu#endif 521897Sstever@eecs.umich.edu 531897Sstever@eecs.umich.edu RVC_TEST_CASE (11, s0, 0xffffffffffffffe1, c.lui s0, 0xfffe1; c.srai s0, 12) 541897Sstever@eecs.umich.edu#if __riscv_xlen == 64 551897Sstever@eecs.umich.edu RVC_TEST_CASE (12, s0, 0x000fffffffffffe1, c.lui s0, 0xfffe1; c.srli s0, 12) 561897Sstever@eecs.umich.edu#else 571897Sstever@eecs.umich.edu RVC_TEST_CASE (12, s0, 0x000fffe1, c.lui s0, 0xfffe1; c.srli s0, 12) 581897Sstever@eecs.umich.edu#endif 591897Sstever@eecs.umich.edu RVC_TEST_CASE (14, s0, ~0x11, c.li s0, -2; c.andi s0, ~0x10) 601897Sstever@eecs.umich.edu RVC_TEST_CASE (15, s1, 14, li s1, 20; li a0, 6; c.sub s1, a0) 611897Sstever@eecs.umich.edu RVC_TEST_CASE (16, s1, 18, li s1, 20; li a0, 6; c.xor s1, a0) 621897Sstever@eecs.umich.edu RVC_TEST_CASE (17, s1, 22, li s1, 20; li a0, 6; c.or s1, a0) 631897Sstever@eecs.umich.edu RVC_TEST_CASE (18, s1, 4, li s1, 20; li a0, 6; c.and s1, a0) 641897Sstever@eecs.umich.edu#if __riscv_xlen == 64 651897Sstever@eecs.umich.edu RVC_TEST_CASE (19, s1, 0xffffffff80000000, li s1, 0x7fffffff; li a0, -1; c.subw s1, a0) 661897Sstever@eecs.umich.edu RVC_TEST_CASE (20, s1, 0xffffffff80000000, li s1, 0x7fffffff; li a0, 1; c.addw s1, a0) 671897Sstever@eecs.umich.edu#endif 681897Sstever@eecs.umich.edu RVC_TEST_CASE (21, s0, 0x12340, li s0, 0x1234; c.slli s0, 4) 691897Sstever@eecs.umich.edu 701897Sstever@eecs.umich.edu RVC_TEST_CASE (30, ra, 0, \ 711897Sstever@eecs.umich.edu li ra, 0; \ 721897Sstever@eecs.umich.edu c.j 1f; \ 731897Sstever@eecs.umich.edu c.j 2f; \ 741897Sstever@eecs.umich.edu 1:c.j 1f; \ 751897Sstever@eecs.umich.edu 2:j fail; \ 761897Sstever@eecs.umich.edu 1:) 771897Sstever@eecs.umich.edu 781897Sstever@eecs.umich.edu RVC_TEST_CASE (31, x0, 0, \ 791897Sstever@eecs.umich.edu li a0, 0; \ 801897Sstever@eecs.umich.edu c.beqz a0, 1f; \ 813077Sstever@eecs.umich.edu c.j 2f; \ 823077Sstever@eecs.umich.edu 1:c.j 1f; \ 833077Sstever@eecs.umich.edu 2:j fail; \ 843077Sstever@eecs.umich.edu 1:) 853077Sstever@eecs.umich.edu 863077Sstever@eecs.umich.edu RVC_TEST_CASE (32, x0, 0, \ 873077Sstever@eecs.umich.edu li a0, 1; \ 883077Sstever@eecs.umich.edu c.bnez a0, 1f; \ 893077Sstever@eecs.umich.edu c.j 2f; \ 901897Sstever@eecs.umich.edu 1:c.j 1f; \ 911897Sstever@eecs.umich.edu 2:j fail; \ 921897Sstever@eecs.umich.edu 1:) 931897Sstever@eecs.umich.edu 941897Sstever@eecs.umich.edu RVC_TEST_CASE (33, x0, 0, \ 951897Sstever@eecs.umich.edu li a0, 1; \ 961897Sstever@eecs.umich.edu c.beqz a0, 1f; \ 971897Sstever@eecs.umich.edu c.j 2f; \ 98 1:c.j fail; \ 99 2:) 100 101 RVC_TEST_CASE (34, x0, 0, \ 102 li a0, 0; \ 103 c.bnez a0, 1f; \ 104 c.j 2f; \ 105 1:c.j fail; \ 106 2:) 107 108 RVC_TEST_CASE (35, ra, 0, \ 109 la t0, 1f; \ 110 li ra, 0; \ 111 c.jr t0; \ 112 c.j 2f; \ 113 1:c.j 1f; \ 114 2:j fail; \ 115 1:) 116 117 RVC_TEST_CASE (36, ra, -2, \ 118 la t0, 1f; \ 119 li ra, 0; \ 120 c.jalr t0; \ 121 c.j 2f; \ 122 1:c.j 1f; \ 123 2:j fail; \ 124 1:sub ra, ra, t0) 125 126#if __riscv_xlen == 32 127 RVC_TEST_CASE (37, ra, -2, \ 128 la t0, 1f; \ 129 li ra, 0; \ 130 c.jal 1f; \ 131 c.j 2f; \ 132 1:c.j 1f; \ 133 2:j fail; \ 134 1:sub ra, ra, t0) 135#endif 136 137 la sp, data 138 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)) 139#if __riscv_xlen == 64 140 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)) 141#endif 142 143 RVC_TEST_CASE (42, t0, 0x246, li a0, 0x123; c.mv t0, a0; c.add t0, a0) 144 145 .option pop 146 147 TEST_PASSFAIL 148 149RVTEST_CODE_END 150 151 .data 152RVTEST_DATA_BEGIN 153 154RVTEST_DATA_END 155