cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

test_mac16.S (5322B)


      1#include "macros.inc"
      2
      3test_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
     46test mul_aa
     47    test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f
     48test_end
     49
     50test mul_ad
     51    test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f
     52test_end
     53
     54test mul_da
     55    test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f
     56test_end
     57
     58test mul_dd
     59    test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f
     60test_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
     92test mula_aa
     93    test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
     94test_end
     95
     96test mula_ad
     97    test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, +
     98test_end
     99
    100test mula_da
    101    test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    102test_end
    103
    104test mula_dd
    105    test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, +
    106test_end
    107
    108
    109test muls_aa
    110    test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
    111test_end
    112
    113test muls_ad
    114    test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, -
    115test_end
    116
    117test muls_da
    118    test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
    119test_end
    120
    121test muls_dd
    122    test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, -
    123test_end
    124
    125test 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
    1411:  .word 0x55aa137f, 0x12345678, 0x137fa5a5
    142.text
    143test_end
    144
    145test 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
    1611:
    162.text
    163test_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
    187test 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
    1971:  .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678
    198.text
    199test_end
    200
    201test 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
    2111:  .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678
    212.text
    213test_end
    214
    215test 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
    2261:
    227.text
    228test_end
    229
    230test 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
    2411:
    242.text
    243test_end
    244
    245#endif
    246
    247test_suite_end