1 #include "macros.inc" 2 3 test_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 43 test slli 44 tests_imm_shift slli, 0xa3c51249 45 test_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 64 test srai 65 tests_imm_shift srai, 0x49a3c512 66 tests_imm_shift srai, 0xa3c51249 67 test_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 81 test srli 82 tests_imm_shift srli, 0x49a3c512 83 tests_imm_shift srli, 0xa3c51249 84 test_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 109 test sll 110 tests_shift sll, 0xa3c51249 111 tests_shift sll_sar, 0xa3c51249 112 test_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 137 test srl 138 tests_shift srl, 0xa3c51249 139 tests_shift srl_sar, 0xa3c51249 140 tests_shift srl, 0x49a3c512 141 tests_shift srl_sar, 0x49a3c512 142 test_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 167 test sra 168 tests_shift sra, 0xa3c51249 169 tests_shift sra_sar, 0xa3c51249 170 tests_shift sra, 0x49a3c512 171 tests_shift sra_sar, 0x49a3c512 172 test_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 201 test src 202 tests_shift src, 0xa3c51249215c3a94 203 tests_shift src_sar, 0xa3c51249215c3a94 204 test_end 205 206 test_suite_end 207