1.include "macros.inc" 2 3test_suite shift 4 5.macro test_shift prefix, dst, src, v, imm 6 \prefix\()_set \dst, \src, \v, \imm 7 \prefix\()_ver \dst, \v, \imm 8.endm 9 10.macro test_shift_sd prefix, v, imm 11 test_shift \prefix, a3, a2, \v, \imm 12 test_shift \prefix, a2, a2, \v, \imm 13.endm 14 15.macro tests_imm_shift prefix, v 16 test_shift_sd \prefix, \v, 1 17 test_shift_sd \prefix, \v, 2 18 test_shift_sd \prefix, \v, 7 19 test_shift_sd \prefix, \v, 8 20 test_shift_sd \prefix, \v, 15 21 test_shift_sd \prefix, \v, 16 22 test_shift_sd \prefix, \v, 31 23.endm 24 25.macro tests_shift prefix, v 26 test_shift_sd \prefix, \v, 0 27 tests_imm_shift \prefix, \v 28 test_shift_sd \prefix, \v, 32 29.endm 30 31 32.macro slli_set dst, src, v, imm 33 movi \src, \v 34 slli \dst, \src, \imm 35.endm 36 37.macro slli_ver dst, v, imm 38 mov a2, \dst 39 movi a3, ((\v) << (\imm)) & 0xffffffff 40 assert eq, a2, a3 41.endm 42 43test slli 44 tests_imm_shift slli, 0xa3c51249 45test_end 46 47 48.macro srai_set dst, src, v, imm 49 movi \src, \v 50 srai \dst, \src, \imm 51.endm 52 53.macro srai_ver dst, v, imm 54 mov a2, \dst 55 .if (\imm) 56 movi a3, (((\v) >> (\imm)) & 0xffffffff) | \ 57 ~((((\v) & 0x80000000) >> ((\imm) - 1)) - 1) 58 .else 59 movi a3, \v 60 .endif 61 assert eq, a2, a3 62.endm 63 64test srai 65 tests_imm_shift srai, 0x49a3c512 66 tests_imm_shift srai, 0xa3c51249 67test_end 68 69 70.macro srli_set dst, src, v, imm 71 movi \src, \v 72 srli \dst, \src, \imm 73.endm 74 75.macro srli_ver dst, v, imm 76 mov a2, \dst 77 movi a3, (((\v) >> (\imm)) & 0xffffffff) 78 assert eq, a2, a3 79.endm 80 81test srli 82 tests_imm_shift srli, 0x49a3c512 83 tests_imm_shift srli, 0xa3c51249 84test_end 85 86 87.macro sll_set dst, src, v, imm 88 movi a2, \imm 89 ssl a2 90 movi \src, \v 91 sll \dst, \src 92.endm 93 94.macro sll_sar_set dst, src, v, imm 95 movi a2, 32 - \imm 96 wsr a2, sar 97 movi \src, \v 98 sll \dst, \src 99.endm 100 101.macro sll_ver dst, v, imm 102 slli_ver \dst, \v, (\imm) & 0x1f 103.endm 104 105.macro sll_sar_ver dst, v, imm 106 slli_ver \dst, \v, \imm 107.endm 108 109test sll 110 tests_shift sll, 0xa3c51249 111 tests_shift sll_sar, 0xa3c51249 112test_end 113 114 115.macro srl_set dst, src, v, imm 116 movi a2, \imm 117 ssr a2 118 movi \src, \v 119 srl \dst, \src 120.endm 121 122.macro srl_sar_set dst, src, v, imm 123 movi a2, \imm 124 wsr a2, sar 125 movi \src, \v 126 srl \dst, \src 127.endm 128 129.macro srl_ver dst, v, imm 130 srli_ver \dst, \v, (\imm) & 0x1f 131.endm 132 133.macro srl_sar_ver dst, v, imm 134 srli_ver \dst, \v, \imm 135.endm 136 137test srl 138 tests_shift srl, 0xa3c51249 139 tests_shift srl_sar, 0xa3c51249 140 tests_shift srl, 0x49a3c512 141 tests_shift srl_sar, 0x49a3c512 142test_end 143 144 145.macro sra_set dst, src, v, imm 146 movi a2, \imm 147 ssr a2 148 movi \src, \v 149 sra \dst, \src 150.endm 151 152.macro sra_sar_set dst, src, v, imm 153 movi a2, \imm 154 wsr a2, sar 155 movi \src, \v 156 sra \dst, \src 157.endm 158 159.macro sra_ver dst, v, imm 160 srai_ver \dst, \v, (\imm) & 0x1f 161.endm 162 163.macro sra_sar_ver dst, v, imm 164 srai_ver \dst, \v, \imm 165.endm 166 167test sra 168 tests_shift sra, 0xa3c51249 169 tests_shift sra_sar, 0xa3c51249 170 tests_shift sra, 0x49a3c512 171 tests_shift sra_sar, 0x49a3c512 172test_end 173 174 175.macro src_set dst, src, v, imm 176 movi a2, \imm 177 ssr a2 178 movi \src, (\v) & 0xffffffff 179 movi a4, (\v) >> 32 180 src \dst, a4, \src 181.endm 182 183.macro src_sar_set dst, src, v, imm 184 movi a2, \imm 185 wsr a2, sar 186 movi \src, (\v) & 0xffffffff 187 movi a4, (\v) >> 32 188 src \dst, a4, \src 189.endm 190 191.macro src_ver dst, v, imm 192 src_sar_ver \dst, \v, (\imm) & 0x1f 193.endm 194 195.macro src_sar_ver dst, v, imm 196 mov a2, \dst 197 movi a3, ((\v) >> (\imm)) & 0xffffffff 198 assert eq, a2, a3 199.endm 200 201test src 202 tests_shift src, 0xa3c51249215c3a94 203 tests_shift src_sar, 0xa3c51249215c3a94 204test_end 205 206test_suite_end 207