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