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