xref: /qemu/tests/tcg/xtensa/test_shift.S (revision a2e67072b7c3b2abf70d0a11918723a5dd841a05)
1*a2e67072SMax Filippov#include "macros.inc"
27d890b40SMax Filippov
37d890b40SMax Filippovtest_suite shift
47d890b40SMax Filippov
57d890b40SMax Filippov.macro test_shift prefix, dst, src, v, imm
67d890b40SMax Filippov    \prefix\()_set \dst, \src, \v, \imm
77d890b40SMax Filippov    \prefix\()_ver \dst, \v, \imm
87d890b40SMax Filippov.endm
97d890b40SMax Filippov
107d890b40SMax Filippov.macro test_shift_sd prefix, v, imm
117d890b40SMax Filippov    test_shift \prefix, a3, a2, \v, \imm
127d890b40SMax Filippov    test_shift \prefix, a2, a2, \v, \imm
137d890b40SMax Filippov.endm
147d890b40SMax Filippov
157d890b40SMax Filippov.macro tests_imm_shift prefix, v
167d890b40SMax Filippov    test_shift_sd \prefix, \v, 1
177d890b40SMax Filippov    test_shift_sd \prefix, \v, 2
187d890b40SMax Filippov    test_shift_sd \prefix, \v, 7
197d890b40SMax Filippov    test_shift_sd \prefix, \v, 8
207d890b40SMax Filippov    test_shift_sd \prefix, \v, 15
217d890b40SMax Filippov    test_shift_sd \prefix, \v, 16
227d890b40SMax Filippov    test_shift_sd \prefix, \v, 31
237d890b40SMax Filippov.endm
247d890b40SMax Filippov
257d890b40SMax Filippov.macro tests_shift prefix, v
267d890b40SMax Filippov    test_shift_sd \prefix, \v, 0
277d890b40SMax Filippov    tests_imm_shift \prefix, \v
287d890b40SMax Filippov    test_shift_sd \prefix, \v, 32
297d890b40SMax Filippov.endm
307d890b40SMax Filippov
317d890b40SMax Filippov
327d890b40SMax Filippov.macro slli_set dst, src, v, imm
337d890b40SMax Filippov    movi    \src, \v
347d890b40SMax Filippov    slli    \dst, \src, \imm
357d890b40SMax Filippov.endm
367d890b40SMax Filippov
377d890b40SMax Filippov.macro slli_ver dst, v, imm
387d890b40SMax Filippov    mov     a2, \dst
397d890b40SMax Filippov    movi    a3, ((\v) << (\imm)) & 0xffffffff
407d890b40SMax Filippov    assert  eq, a2, a3
417d890b40SMax Filippov.endm
427d890b40SMax Filippov
437d890b40SMax Filippovtest slli
447d890b40SMax Filippov    tests_imm_shift slli, 0xa3c51249
457d890b40SMax Filippovtest_end
467d890b40SMax Filippov
477d890b40SMax Filippov
487d890b40SMax Filippov.macro srai_set dst, src, v, imm
497d890b40SMax Filippov    movi    \src, \v
507d890b40SMax Filippov    srai    \dst, \src, \imm
517d890b40SMax Filippov.endm
527d890b40SMax Filippov
537d890b40SMax Filippov.macro srai_ver dst, v, imm
547d890b40SMax Filippov    mov     a2, \dst
557d890b40SMax Filippov    .if (\imm)
567d890b40SMax Filippov    movi    a3, (((\v) >> (\imm)) & 0xffffffff) | \
577d890b40SMax Filippov                ~((((\v) & 0x80000000) >> ((\imm) - 1)) - 1)
587d890b40SMax Filippov    .else
597d890b40SMax Filippov    movi    a3, \v
607d890b40SMax Filippov    .endif
617d890b40SMax Filippov    assert  eq, a2, a3
627d890b40SMax Filippov.endm
637d890b40SMax Filippov
647d890b40SMax Filippovtest srai
657d890b40SMax Filippov    tests_imm_shift srai, 0x49a3c512
667d890b40SMax Filippov    tests_imm_shift srai, 0xa3c51249
677d890b40SMax Filippovtest_end
687d890b40SMax Filippov
697d890b40SMax Filippov
707d890b40SMax Filippov.macro srli_set dst, src, v, imm
717d890b40SMax Filippov    movi    \src, \v
727d890b40SMax Filippov    srli    \dst, \src, \imm
737d890b40SMax Filippov.endm
747d890b40SMax Filippov
757d890b40SMax Filippov.macro srli_ver dst, v, imm
767d890b40SMax Filippov    mov     a2, \dst
777d890b40SMax Filippov    movi    a3, (((\v) >> (\imm)) & 0xffffffff)
787d890b40SMax Filippov    assert  eq, a2, a3
797d890b40SMax Filippov.endm
807d890b40SMax Filippov
817d890b40SMax Filippovtest srli
827d890b40SMax Filippov    tests_imm_shift srli, 0x49a3c512
837d890b40SMax Filippov    tests_imm_shift srli, 0xa3c51249
847d890b40SMax Filippovtest_end
857d890b40SMax Filippov
867d890b40SMax Filippov
877d890b40SMax Filippov.macro sll_set dst, src, v, imm
887d890b40SMax Filippov    movi    a2, \imm
897d890b40SMax Filippov    ssl     a2
907d890b40SMax Filippov    movi    \src, \v
917d890b40SMax Filippov    sll     \dst, \src
927d890b40SMax Filippov.endm
937d890b40SMax Filippov
947d890b40SMax Filippov.macro sll_sar_set dst, src, v, imm
957d890b40SMax Filippov    movi    a2, 32 - \imm
967d890b40SMax Filippov    wsr     a2, sar
977d890b40SMax Filippov    movi    \src, \v
987d890b40SMax Filippov    sll     \dst, \src
997d890b40SMax Filippov.endm
1007d890b40SMax Filippov
1017d890b40SMax Filippov.macro sll_ver dst, v, imm
1027d890b40SMax Filippov    slli_ver \dst, \v, (\imm) & 0x1f
1037d890b40SMax Filippov.endm
1047d890b40SMax Filippov
1057d890b40SMax Filippov.macro sll_sar_ver dst, v, imm
1067d890b40SMax Filippov    slli_ver \dst, \v, \imm
1077d890b40SMax Filippov.endm
1087d890b40SMax Filippov
1097d890b40SMax Filippovtest sll
1107d890b40SMax Filippov    tests_shift sll, 0xa3c51249
1117d890b40SMax Filippov    tests_shift sll_sar, 0xa3c51249
1127d890b40SMax Filippovtest_end
1137d890b40SMax Filippov
1147d890b40SMax Filippov
1157d890b40SMax Filippov.macro srl_set dst, src, v, imm
1167d890b40SMax Filippov    movi    a2, \imm
1177d890b40SMax Filippov    ssr     a2
1187d890b40SMax Filippov    movi    \src, \v
1197d890b40SMax Filippov    srl     \dst, \src
1207d890b40SMax Filippov.endm
1217d890b40SMax Filippov
1227d890b40SMax Filippov.macro srl_sar_set dst, src, v, imm
1237d890b40SMax Filippov    movi    a2, \imm
1247d890b40SMax Filippov    wsr     a2, sar
1257d890b40SMax Filippov    movi    \src, \v
1267d890b40SMax Filippov    srl     \dst, \src
1277d890b40SMax Filippov.endm
1287d890b40SMax Filippov
1297d890b40SMax Filippov.macro srl_ver dst, v, imm
1307d890b40SMax Filippov    srli_ver \dst, \v, (\imm) & 0x1f
1317d890b40SMax Filippov.endm
1327d890b40SMax Filippov
1337d890b40SMax Filippov.macro srl_sar_ver dst, v, imm
1347d890b40SMax Filippov    srli_ver \dst, \v, \imm
1357d890b40SMax Filippov.endm
1367d890b40SMax Filippov
1377d890b40SMax Filippovtest srl
1387d890b40SMax Filippov    tests_shift srl, 0xa3c51249
1397d890b40SMax Filippov    tests_shift srl_sar, 0xa3c51249
1407d890b40SMax Filippov    tests_shift srl, 0x49a3c512
1417d890b40SMax Filippov    tests_shift srl_sar, 0x49a3c512
1427d890b40SMax Filippovtest_end
1437d890b40SMax Filippov
1447d890b40SMax Filippov
1457d890b40SMax Filippov.macro sra_set dst, src, v, imm
1467d890b40SMax Filippov    movi    a2, \imm
1477d890b40SMax Filippov    ssr     a2
1487d890b40SMax Filippov    movi    \src, \v
1497d890b40SMax Filippov    sra     \dst, \src
1507d890b40SMax Filippov.endm
1517d890b40SMax Filippov
1527d890b40SMax Filippov.macro sra_sar_set dst, src, v, imm
1537d890b40SMax Filippov    movi    a2, \imm
1547d890b40SMax Filippov    wsr     a2, sar
1557d890b40SMax Filippov    movi    \src, \v
1567d890b40SMax Filippov    sra     \dst, \src
1577d890b40SMax Filippov.endm
1587d890b40SMax Filippov
1597d890b40SMax Filippov.macro sra_ver dst, v, imm
1607d890b40SMax Filippov    srai_ver \dst, \v, (\imm) & 0x1f
1617d890b40SMax Filippov.endm
1627d890b40SMax Filippov
1637d890b40SMax Filippov.macro sra_sar_ver dst, v, imm
1647d890b40SMax Filippov    srai_ver \dst, \v, \imm
1657d890b40SMax Filippov.endm
1667d890b40SMax Filippov
1677d890b40SMax Filippovtest sra
1687d890b40SMax Filippov    tests_shift sra, 0xa3c51249
1697d890b40SMax Filippov    tests_shift sra_sar, 0xa3c51249
1707d890b40SMax Filippov    tests_shift sra, 0x49a3c512
1717d890b40SMax Filippov    tests_shift sra_sar, 0x49a3c512
1727d890b40SMax Filippovtest_end
1737d890b40SMax Filippov
1747d890b40SMax Filippov
1757d890b40SMax Filippov.macro src_set dst, src, v, imm
1767d890b40SMax Filippov    movi    a2, \imm
1777d890b40SMax Filippov    ssr     a2
1787d890b40SMax Filippov    movi    \src, (\v) & 0xffffffff
1797d890b40SMax Filippov    movi    a4, (\v) >> 32
1807d890b40SMax Filippov    src     \dst, a4, \src
1817d890b40SMax Filippov.endm
1827d890b40SMax Filippov
1837d890b40SMax Filippov.macro src_sar_set dst, src, v, imm
1847d890b40SMax Filippov    movi    a2, \imm
1857d890b40SMax Filippov    wsr     a2, sar
1867d890b40SMax Filippov    movi    \src, (\v) & 0xffffffff
1877d890b40SMax Filippov    movi    a4, (\v) >> 32
1887d890b40SMax Filippov    src     \dst, a4, \src
1897d890b40SMax Filippov.endm
1907d890b40SMax Filippov
1917d890b40SMax Filippov.macro src_ver dst, v, imm
1927d890b40SMax Filippov    src_sar_ver \dst, \v, (\imm) & 0x1f
1937d890b40SMax Filippov.endm
1947d890b40SMax Filippov
1957d890b40SMax Filippov.macro src_sar_ver dst, v, imm
1967d890b40SMax Filippov    mov     a2, \dst
1977d890b40SMax Filippov    movi    a3, ((\v) >> (\imm)) & 0xffffffff
1987d890b40SMax Filippov    assert  eq, a2, a3
1997d890b40SMax Filippov.endm
2007d890b40SMax Filippov
2017d890b40SMax Filippovtest src
2027d890b40SMax Filippov    tests_shift src, 0xa3c51249215c3a94
2037d890b40SMax Filippov    tests_shift src_sar, 0xa3c51249215c3a94
2047d890b40SMax Filippovtest_end
2057d890b40SMax Filippov
2067d890b40SMax Filippovtest_suite_end
207