blob: a8e43645b7abeda7805d95aeb4bb6badd63ad6e1 [file] [log] [blame]
.include "macros.inc"
test_suite shift
.macro test_shift prefix, dst, src, v, imm
\prefix\()_set \dst, \src, \v, \imm
\prefix\()_ver \dst, \v, \imm
.endm
.macro test_shift_sd prefix, v, imm
test_shift \prefix, a3, a2, \v, \imm
test_shift \prefix, a2, a2, \v, \imm
.endm
.macro tests_imm_shift prefix, v
test_shift_sd \prefix, \v, 1
test_shift_sd \prefix, \v, 2
test_shift_sd \prefix, \v, 7
test_shift_sd \prefix, \v, 8
test_shift_sd \prefix, \v, 15
test_shift_sd \prefix, \v, 16
test_shift_sd \prefix, \v, 31
.endm
.macro tests_shift prefix, v
test_shift_sd \prefix, \v, 0
tests_imm_shift \prefix, \v
test_shift_sd \prefix, \v, 32
.endm
.macro slli_set dst, src, v, imm
movi \src, \v
slli \dst, \src, \imm
.endm
.macro slli_ver dst, v, imm
mov a2, \dst
movi a3, ((\v) << (\imm)) & 0xffffffff
assert eq, a2, a3
.endm
test slli
tests_imm_shift slli, 0xa3c51249
test_end
.macro srai_set dst, src, v, imm
movi \src, \v
srai \dst, \src, \imm
.endm
.macro srai_ver dst, v, imm
mov a2, \dst
.if (\imm)
movi a3, (((\v) >> (\imm)) & 0xffffffff) | \
~((((\v) & 0x80000000) >> ((\imm) - 1)) - 1)
.else
movi a3, \v
.endif
assert eq, a2, a3
.endm
test srai
tests_imm_shift srai, 0x49a3c512
tests_imm_shift srai, 0xa3c51249
test_end
.macro srli_set dst, src, v, imm
movi \src, \v
srli \dst, \src, \imm
.endm
.macro srli_ver dst, v, imm
mov a2, \dst
movi a3, (((\v) >> (\imm)) & 0xffffffff)
assert eq, a2, a3
.endm
test srli
tests_imm_shift srli, 0x49a3c512
tests_imm_shift srli, 0xa3c51249
test_end
.macro sll_set dst, src, v, imm
movi a2, \imm
ssl a2
movi \src, \v
sll \dst, \src
.endm
.macro sll_sar_set dst, src, v, imm
movi a2, 32 - \imm
wsr a2, sar
movi \src, \v
sll \dst, \src
.endm
.macro sll_ver dst, v, imm
slli_ver \dst, \v, (\imm) & 0x1f
.endm
.macro sll_sar_ver dst, v, imm
slli_ver \dst, \v, \imm
.endm
test sll
tests_shift sll, 0xa3c51249
tests_shift sll_sar, 0xa3c51249
test_end
.macro srl_set dst, src, v, imm
movi a2, \imm
ssr a2
movi \src, \v
srl \dst, \src
.endm
.macro srl_sar_set dst, src, v, imm
movi a2, \imm
wsr a2, sar
movi \src, \v
srl \dst, \src
.endm
.macro srl_ver dst, v, imm
srli_ver \dst, \v, (\imm) & 0x1f
.endm
.macro srl_sar_ver dst, v, imm
srli_ver \dst, \v, \imm
.endm
test srl
tests_shift srl, 0xa3c51249
tests_shift srl_sar, 0xa3c51249
tests_shift srl, 0x49a3c512
tests_shift srl_sar, 0x49a3c512
test_end
.macro sra_set dst, src, v, imm
movi a2, \imm
ssr a2
movi \src, \v
sra \dst, \src
.endm
.macro sra_sar_set dst, src, v, imm
movi a2, \imm
wsr a2, sar
movi \src, \v
sra \dst, \src
.endm
.macro sra_ver dst, v, imm
srai_ver \dst, \v, (\imm) & 0x1f
.endm
.macro sra_sar_ver dst, v, imm
srai_ver \dst, \v, \imm
.endm
test sra
tests_shift sra, 0xa3c51249
tests_shift sra_sar, 0xa3c51249
tests_shift sra, 0x49a3c512
tests_shift sra_sar, 0x49a3c512
test_end
.macro src_set dst, src, v, imm
movi a2, \imm
ssr a2
movi \src, (\v) & 0xffffffff
movi a4, (\v) >> 32
src \dst, a4, \src
.endm
.macro src_sar_set dst, src, v, imm
movi a2, \imm
wsr a2, sar
movi \src, (\v) & 0xffffffff
movi a4, (\v) >> 32
src \dst, a4, \src
.endm
.macro src_ver dst, v, imm
src_sar_ver \dst, \v, (\imm) & 0x1f
.endm
.macro src_sar_ver dst, v, imm
mov a2, \dst
movi a3, ((\v) >> (\imm)) & 0xffffffff
assert eq, a2, a3
.endm
test src
tests_shift src, 0xa3c51249215c3a94
tests_shift src_sar, 0xa3c51249215c3a94
test_end
test_suite_end