qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

test_shift.S (3933B)


      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