qemu

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

test_mac16.S (5322B)


      1 #include "macros.inc"
      2 
      3 test_suite mac16
      4 
      5 #if XCHAL_HAVE_MAC16
      6 
      7 #define ext16(v) (((v) & 0xffff) | (((v) & 0x8000) * 0x1ffffffe))
      8 #define mul16(a, b) ((ext16(a) * ext16(b)))
      9 
     10 .macro assert_acc_value v
     11     rsr     a4, ACCLO
     12     movi    a5, (\v) & 0xffffffff
     13     assert  eq, a4, a5
     14     rsr     a4, ACCHI
     15     movi    a5, (\v) >> 32
     16     sext    a5, a5, 7
     17     assert  eq, a4, a5
     18 .endm
     19 
     20 .macro init_reg sr, reg, val
     21     .if (\sr)
     22     movi    a4, \val
     23     wsr     a4, \reg
     24     .else
     25     movi    \reg, \val
     26     .endif
     27 .endm
     28 
     29 .macro test_mulxx mulop, comb, s, t, a, b
     30     init_reg \comb & 2, \s, \a
     31     init_reg \comb & 1, \t, \b
     32 
     33     \mulop\().ll \s, \t
     34     assert_acc_value mul16(\a, \b)
     35 
     36     \mulop\().lh \s, \t
     37     assert_acc_value mul16(\a, (\b >> 16))
     38 
     39     \mulop\().hl \s, \t
     40     assert_acc_value mul16((\a >> 16), \b)
     41 
     42     \mulop\().hh \s, \t
     43     assert_acc_value mul16((\a >> 16), (\b >> 16))
     44 .endm
     45 
     46 test mul_aa
     47     test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f
     48 test_end
     49 
     50 test mul_ad
     51     test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f
     52 test_end
     53 
     54 test mul_da
     55     test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f
     56 test_end
     57 
     58 test mul_dd
     59     test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f
     60 test_end
     61 
     62 
     63 .macro init_acc iv
     64     movi    a4, (\iv) & 0xffffffff
     65     wsr     a4, ACCLO
     66     movi    a4, (\iv) >> 32
     67     wsr     a4, ACCHI
     68 .endm
     69 
     70 .macro test_mulxxx mulop, comb, s, t, a, b, iv, op
     71     init_reg \comb & 2, \s, \a
     72     init_reg \comb & 1, \t, \b
     73 
     74     init_acc \iv
     75     \mulop\().ll \s, \t
     76     assert_acc_value (\iv \op mul16(\a, \b))
     77 
     78     init_acc \iv
     79     \mulop\().lh \s, \t
     80     assert_acc_value (\iv \op mul16(\a, (\b >> 16)))
     81 
     82     init_acc \iv
     83     \mulop\().hl \s, \t
     84     assert_acc_value (\iv \op mul16((\a >> 16), \b))
     85 
     86     init_acc \iv
     87     \mulop\().hh \s, \t
     88     assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16)))
     89 .endm
     90 
     91 
     92 test mula_aa
     93     test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
     94 test_end
     95 
     96 test mula_ad
     97     test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
     98 test_end
     99 
    100 test mula_da
    101     test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    102 test_end
    103 
    104 test mula_dd
    105     test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    106 test_end
    107 
    108 
    109 test muls_aa
    110     test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
    111 test_end
    112 
    113 test muls_ad
    114     test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
    115 test_end
    116 
    117 test muls_da
    118     test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
    119 test_end
    120 
    121 test muls_dd
    122     test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
    123 test_end
    124 
    125 test ldinc
    126     movi    a2, 1f - 4
    127     ldinc   m0, a2
    128     movi    a3, 1f
    129     assert  eq, a2, a3
    130     rsr     a3, m0
    131     movi    a4, 0x55aa137f
    132     assert  eq, a3, a4
    133     ldinc   m1, a2
    134     movi    a3, 1f + 4
    135     assert  eq, a2, a3
    136     rsr     a3, m1
    137     movi    a4, 0x12345678
    138     assert  eq, a3, a4
    139 
    140 .data
    141 1:  .word 0x55aa137f, 0x12345678, 0x137fa5a5
    142 .text
    143 test_end
    144 
    145 test lddec
    146     movi    a2, 1f
    147     lddec   m2, a2
    148     movi    a3, 1f - 4
    149     assert  eq, a2, a3
    150     rsr     a3, m2
    151     movi    a4, 0x12345678
    152     assert  eq, a3, a4
    153     lddec   m3, a2
    154     movi    a3, 1f - 8
    155     assert  eq, a2, a3
    156     rsr     a3, m3
    157     movi    a4, 0x55aa137f
    158     assert  eq, a3, a4
    159 .data
    160     .word 0x55aa137f, 0x12345678
    161 1:
    162 .text
    163 test_end
    164 
    165 
    166 .macro test_mulxxx_ld mulop, ldop, comb, w, x, s, t, a, b, iv, op
    167     init_reg \comb & 2, \s, \a
    168     init_reg \comb & 1, \t, \b
    169 
    170     init_acc \iv
    171     \mulop\().ll.\ldop \w, \x, \s, \t
    172     assert_acc_value (\iv \op mul16(\a, \b))
    173 
    174     init_acc \iv
    175     \mulop\().lh.\ldop \w, \x, \s, \t
    176     assert_acc_value (\iv \op mul16(\a, (\b >> 16)))
    177 
    178     init_acc \iv
    179     \mulop\().hl.\ldop \w, \x, \s, \t
    180     assert_acc_value (\iv \op mul16((\a >> 16), \b))
    181 
    182     init_acc \iv
    183     \mulop\().hh.\ldop \w, \x, \s, \t
    184     assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16)))
    185 .endm
    186 
    187 test mula_da_ldinc
    188     movi    a2, 1f - 4
    189     test_mulxxx_ld mula.da, ldinc, 2, m1, a2, m1, a3, \
    190         0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    191     movi    a3, 1f + 12
    192     assert  eq, a2, a3
    193     rsr     a2, m1
    194     movi    a3, 0x12345678
    195     assert  eq, a2, a3
    196 .data
    197 1:  .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678
    198 .text
    199 test_end
    200 
    201 test mula_dd_ldinc
    202     movi    a2, 1f - 4
    203     test_mulxxx_ld mula.dd, ldinc, 3, m2, a2, m1, m2, \
    204         0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    205     movi    a3, 1f + 12
    206     assert  eq, a2, a3
    207     rsr     a2, m2
    208     movi    a3, 0x12345678
    209     assert  eq, a2, a3
    210 .data
    211 1:  .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678
    212 .text
    213 test_end
    214 
    215 test mula_da_lddec
    216     movi    a2, 1f
    217     test_mulxxx_ld mula.da, lddec, 2, m1, a2, m1, a3, \
    218         0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    219     movi    a3, 1f - 16
    220     assert  eq, a2, a3
    221     rsr     a2, m1
    222     movi    a3, 0x12345678
    223     assert  eq, a2, a3
    224 .data
    225     .word 0x12345678, 0xf7315a5a, 0xf7315a5a, 0xf7315a5a
    226 1:
    227 .text
    228 test_end
    229 
    230 test mula_dd_lddec
    231     movi    a2, 1f
    232     test_mulxxx_ld mula.dd, lddec, 3, m2, a2, m1, m2, \
    233         0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    234     movi    a3, 1f - 16
    235     assert  eq, a2, a3
    236     rsr     a2, m2
    237     movi    a3, 0x12345678
    238     assert  eq, a2, a3
    239 .data
    240     .word 0x12345678, 0xa5a5137f, 0xa5a5137f, 0xa5a5137f
    241 1:
    242 .text
    243 test_end
    244 
    245 #endif
    246 
    247 test_suite_end