st_ld.S (5066B)
1 # See LICENSE for license details. 2 3 #***************************************************************************** 4 # st_ld.S 5 #----------------------------------------------------------------------------- 6 # 7 # Test store and load instructions 8 # 9 10 #include "riscv_test.h" 11 #include "test_macros.h" 12 13 RVTEST_RV64U 14 RVTEST_CODE_BEGIN 15 16 #------------------------------------------------------------- 17 # Bypassing Tests 18 #------------------------------------------------------------- 19 20 # Test sb and lb (signed byte) 21 TEST_ST_LD_BYPASS(2, lb, sb, 0xffffffffffffffdd, 0, tdat ); 22 TEST_ST_LD_BYPASS(3, lb, sb, 0xffffffffffffffcd, 1, tdat ); 23 TEST_ST_LD_BYPASS(4, lb, sb, 0xffffffffffffffcc, 2, tdat ); 24 TEST_ST_LD_BYPASS(5, lb, sb, 0xffffffffffffffbc, 3, tdat ); 25 TEST_ST_LD_BYPASS(6, lb, sb, 0xffffffffffffffbb, 4, tdat ); 26 TEST_ST_LD_BYPASS(7, lb, sb, 0xffffffffffffffab, 5, tdat ); 27 28 TEST_ST_LD_BYPASS(8, lb, sb, 0x33, 0, tdat ); 29 TEST_ST_LD_BYPASS(9, lb, sb, 0x23, 1, tdat ); 30 TEST_ST_LD_BYPASS(10, lb, sb, 0x22, 2, tdat ); 31 TEST_ST_LD_BYPASS(11, lb, sb, 0x12, 3, tdat ); 32 TEST_ST_LD_BYPASS(12, lb, sb, 0x11, 4, tdat ); 33 TEST_ST_LD_BYPASS(13, lb, sb, 0x01, 5, tdat ); 34 35 # Test sb and lbu (unsigned byte) 36 TEST_ST_LD_BYPASS(14, lbu, sb, 0x33, 0, tdat ); 37 TEST_ST_LD_BYPASS(15, lbu, sb, 0x23, 1, tdat ); 38 TEST_ST_LD_BYPASS(16, lbu, sb, 0x22, 2, tdat ); 39 TEST_ST_LD_BYPASS(17, lbu, sb, 0x12, 3, tdat ); 40 TEST_ST_LD_BYPASS(18, lbu, sb, 0x11, 4, tdat ); 41 TEST_ST_LD_BYPASS(19, lbu, sb, 0x01, 5, tdat ); 42 43 # Test sw and lw (signed word) 44 TEST_ST_LD_BYPASS(20, lw, sw, 0xffffffffaabbccdd, 0, tdat ); 45 TEST_ST_LD_BYPASS(21, lw, sw, 0xffffffffdaabbccd, 4, tdat ); 46 TEST_ST_LD_BYPASS(22, lw, sw, 0xffffffffddaabbcc, 8, tdat ); 47 TEST_ST_LD_BYPASS(23, lw, sw, 0xffffffffcddaabbc, 12, tdat ); 48 TEST_ST_LD_BYPASS(24, lw, sw, 0xffffffffccddaabb, 16, tdat ); 49 TEST_ST_LD_BYPASS(25, lw, sw, 0xffffffffbccddaab, 20, tdat ); 50 51 TEST_ST_LD_BYPASS(26, lw, sw, 0x00112233, 0, tdat ); 52 TEST_ST_LD_BYPASS(27, lw, sw, 0x30011223, 4, tdat ); 53 TEST_ST_LD_BYPASS(28, lw, sw, 0x33001122, 8, tdat ); 54 TEST_ST_LD_BYPASS(29, lw, sw, 0x23300112, 12, tdat ); 55 TEST_ST_LD_BYPASS(30, lw, sw, 0x22330011, 16, tdat ); 56 TEST_ST_LD_BYPASS(31, lw, sw, 0x12233001, 20, tdat ); 57 58 # Test sh and lh (signed halfword) 59 TEST_ST_LD_BYPASS(32, lh, sh, 0xffffffffffffccdd, 0, tdat ); 60 TEST_ST_LD_BYPASS(33, lh, sh, 0xffffffffffffbccd, 2, tdat ); 61 TEST_ST_LD_BYPASS(34, lh, sh, 0xffffffffffffbbcc, 4, tdat ); 62 TEST_ST_LD_BYPASS(35, lh, sh, 0xffffffffffffabbc, 6, tdat ); 63 TEST_ST_LD_BYPASS(36, lh, sh, 0xffffffffffffaabb, 8, tdat ); 64 TEST_ST_LD_BYPASS(37, lh, sh, 0xffffffffffffdaab, 10, tdat ); 65 66 TEST_ST_LD_BYPASS(38, lh, sh, 0x2233, 0, tdat ); 67 TEST_ST_LD_BYPASS(39, lh, sh, 0x1223, 2, tdat ); 68 TEST_ST_LD_BYPASS(40, lh, sh, 0x1122, 4, tdat ); 69 TEST_ST_LD_BYPASS(41, lh, sh, 0x0112, 6, tdat ); 70 TEST_ST_LD_BYPASS(42, lh, sh, 0x0011, 8, tdat ); 71 TEST_ST_LD_BYPASS(43, lh, sh, 0x3001, 10, tdat ); 72 73 # Test sh and lhu (unsigned halfword) 74 TEST_ST_LD_BYPASS(44, lhu, sh, 0x2233, 0, tdat ); 75 TEST_ST_LD_BYPASS(45, lhu, sh, 0x1223, 2, tdat ); 76 TEST_ST_LD_BYPASS(46, lhu, sh, 0x1122, 4, tdat ); 77 TEST_ST_LD_BYPASS(47, lhu, sh, 0x0112, 6, tdat ); 78 TEST_ST_LD_BYPASS(48, lhu, sh, 0x0011, 8, tdat ); 79 TEST_ST_LD_BYPASS(49, lhu, sh, 0x3001, 10, tdat ); 80 81 # RV64-specific tests for ld, sd, and lwu 82 #if __riscv_xlen == 64 83 # Test sd and ld (doubleword) 84 TEST_ST_LD_BYPASS(50, ld, sd, 0x0011223344556677, 0, tdat ); 85 TEST_ST_LD_BYPASS(51, ld, sd, 0x1122334455667788, 8, tdat ); 86 TEST_ST_LD_BYPASS(52, ld, sd, 0x2233445566778899, 16, tdat ); 87 TEST_ST_LD_BYPASS(53, ld, sd, 0xabbccdd, 0, tdat ); 88 TEST_ST_LD_BYPASS(54, ld, sd, 0xaabbccd, 8, tdat ); 89 TEST_ST_LD_BYPASS(55, ld, sd, 0xdaabbcc, 16, tdat ); 90 TEST_ST_LD_BYPASS(56, ld, sd, 0xddaabbc, 24, tdat ); 91 TEST_ST_LD_BYPASS(57, ld, sd, 0xcddaabb, 32, tdat ); 92 TEST_ST_LD_BYPASS(58, ld, sd, 0xccddaab, 40, tdat ); 93 94 TEST_ST_LD_BYPASS(59, ld, sd, 0x00112233, 0, tdat ); 95 TEST_ST_LD_BYPASS(60, ld, sd, 0x30011223, 8, tdat ); 96 TEST_ST_LD_BYPASS(61, ld, sd, 0x33001122, 16, tdat ); 97 TEST_ST_LD_BYPASS(62, ld, sd, 0x23300112, 24, tdat ); 98 TEST_ST_LD_BYPASS(63, ld, sd, 0x22330011, 32, tdat ); 99 TEST_ST_LD_BYPASS(64, ld, sd, 0x12233001, 40, tdat ); 100 101 # Test sw and lwu (unsigned word) 102 TEST_ST_LD_BYPASS(65, lwu, sw, 0x00112233, 0, tdat ); 103 TEST_ST_LD_BYPASS(66, lwu, sw, 0x33001122, 8, tdat ); 104 TEST_ST_LD_BYPASS(67, lwu, sw, 0x30011223, 4, tdat ); 105 TEST_ST_LD_BYPASS(68, lwu, sw, 0x23300112, 12, tdat ); 106 TEST_ST_LD_BYPASS(69, lwu, sw, 0x22330011, 16, tdat ); 107 TEST_ST_LD_BYPASS(70, lwu, sw, 0x12233001, 20, tdat ); 108 #endif 109 110 li a0, 0xef # Immediate load for manual store test 111 la a1, tdat # Load address of tdat 112 sb a0, 3(a1) # Store byte at offset 3 of tdat 113 lb a2, 3(a1) # Load byte back for verification 114 115 TEST_PASSFAIL 116 117 RVTEST_CODE_END 118 119 .data 120 RVTEST_DATA_BEGIN 121 122 TEST_DATA 123 124 tdat: 125 .rept 20 126 .word 0xdeadbeef 127 .endr 128 129 130 RVTEST_DATA_END