qemu/tests/tcg/xtensa/test_shift.S
<<
>>
Prefs
   1#include "macros.inc"
   2
   3test_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
  43test slli
  44    tests_imm_shift slli, 0xa3c51249
  45test_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
  64test srai
  65    tests_imm_shift srai, 0x49a3c512
  66    tests_imm_shift srai, 0xa3c51249
  67test_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
  81test srli
  82    tests_imm_shift srli, 0x49a3c512
  83    tests_imm_shift srli, 0xa3c51249
  84test_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
 109test sll
 110    tests_shift sll, 0xa3c51249
 111    tests_shift sll_sar, 0xa3c51249
 112test_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
 137test srl
 138    tests_shift srl, 0xa3c51249
 139    tests_shift srl_sar, 0xa3c51249
 140    tests_shift srl, 0x49a3c512
 141    tests_shift srl_sar, 0x49a3c512
 142test_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
 167test sra
 168    tests_shift sra, 0xa3c51249
 169    tests_shift sra_sar, 0xa3c51249
 170    tests_shift sra, 0x49a3c512
 171    tests_shift sra_sar, 0x49a3c512
 172test_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
 201test src
 202    tests_shift src, 0xa3c51249215c3a94
 203    tests_shift src_sar, 0xa3c51249215c3a94
 204test_end
 205
 206test_suite_end
 207