Statistics
| Branch: | Revision:

## root / tests / tcg / xtensa / test_mac16.S @ c09015dd

 1 ```.include "macros.inc" ``` ```test_suite mac16 ``` ```#define ext16(v) (((v) & 0xffff) | (((v) & 0x8000) * 0x1ffffffe)) ``` ```#define mul16(a, b) ((ext16(a) * ext16(b))) ``` ```.macro assert_acc_value v ``` ``` rsr a4, ACCLO ``` ``` movi a5, (\v) & 0xffffffff ``` ``` assert eq, a4, a5 ``` ``` rsr a4, ACCHI ``` ``` movi a5, (\v) >> 32 ``` ``` sext a5, a5, 7 ``` ``` assert eq, a4, a5 ``` ```.endm ``` ```.macro init_reg sr, reg, val ``` ``` .if (\sr) ``` ``` movi a4, \val ``` ``` wsr a4, \reg ``` ``` .else ``` ``` movi \reg, \val ``` ``` .endif ``` ```.endm ``` ```.macro test_mulxx mulop, comb, s, t, a, b ``` ``` init_reg \comb & 2, \s, \a ``` ``` init_reg \comb & 1, \t, \b ``` ``` \mulop\().ll \s, \t ``` ``` assert_acc_value mul16(\a, \b) ``` ``` \mulop\().lh \s, \t ``` ``` assert_acc_value mul16(\a, (\b >> 16)) ``` ``` \mulop\().hl \s, \t ``` ``` assert_acc_value mul16((\a >> 16), \b) ``` ``` \mulop\().hh \s, \t ``` ``` assert_acc_value mul16((\a >> 16), (\b >> 16)) ``` ```.endm ``` ```test mul_aa ``` ``` test_mulxx mul.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f ``` ```test_end ``` ```test mul_ad ``` ``` test_mulxx mul.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f ``` ```test_end ``` ```test mul_da ``` ``` test_mulxx mul.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f ``` ```test_end ``` ```test mul_dd ``` ``` test_mulxx mul.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f ``` ```test_end ``` ```.macro init_acc iv ``` ``` movi a4, (\iv) & 0xffffffff ``` ``` wsr a4, ACCLO ``` ``` movi a4, (\iv) >> 32 ``` ``` wsr a4, ACCHI ``` ```.endm ``` ```.macro test_mulxxx mulop, comb, s, t, a, b, iv, op ``` ``` init_reg \comb & 2, \s, \a ``` ``` init_reg \comb & 1, \t, \b ``` ``` init_acc \iv ``` ``` \mulop\().ll \s, \t ``` ``` assert_acc_value (\iv \op mul16(\a, \b)) ``` ``` init_acc \iv ``` ``` \mulop\().lh \s, \t ``` ``` assert_acc_value (\iv \op mul16(\a, (\b >> 16))) ``` ``` init_acc \iv ``` ``` \mulop\().hl \s, \t ``` ``` assert_acc_value (\iv \op mul16((\a >> 16), \b)) ``` ``` init_acc \iv ``` ``` \mulop\().hh \s, \t ``` ``` assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) ``` ```.endm ``` ```test mula_aa ``` ``` test_mulxxx mula.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + ``` ```test_end ``` ```test mula_ad ``` ``` test_mulxxx mula.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, + ``` ```test_end ``` ```test mula_da ``` ``` test_mulxxx mula.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ```test_end ``` ```test mula_dd ``` ``` test_mulxxx mula.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ```test_end ``` ```test muls_aa ``` ``` test_mulxxx muls.aa, 0, a2, a3, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - ``` ```test_end ``` ```test muls_ad ``` ``` test_mulxxx muls.ad, 1, a2, m2, 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, - ``` ```test_end ``` ```test muls_da ``` ``` test_mulxxx muls.da, 2, m1, a3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - ``` ```test_end ``` ```test muls_dd ``` ``` test_mulxxx muls.dd, 3, m0, m3, 0xf7315a5a, 0xa5a5137f, 0xfff73155aa, - ``` ```test_end ``` ```test ldinc ``` ``` movi a2, 1f - 4 ``` ``` ldinc m0, a2 ``` ``` movi a3, 1f ``` ``` assert eq, a2, a3 ``` ``` rsr a3, m0 ``` ``` movi a4, 0x55aa137f ``` ``` assert eq, a3, a4 ``` ``` ldinc m1, a2 ``` ``` movi a3, 1f + 4 ``` ``` assert eq, a2, a3 ``` ``` rsr a3, m1 ``` ``` movi a4, 0x12345678 ``` ``` assert eq, a3, a4 ``` ```.data ``` ```1: .word 0x55aa137f, 0x12345678, 0x137fa5a5 ``` ```.text ``` ```test_end ``` ```test lddec ``` ``` movi a2, 1f ``` ``` lddec m2, a2 ``` ``` movi a3, 1f - 4 ``` ``` assert eq, a2, a3 ``` ``` rsr a3, m2 ``` ``` movi a4, 0x12345678 ``` ``` assert eq, a3, a4 ``` ``` lddec m3, a2 ``` ``` movi a3, 1f - 8 ``` ``` assert eq, a2, a3 ``` ``` rsr a3, m3 ``` ``` movi a4, 0x55aa137f ``` ``` assert eq, a3, a4 ``` ```.data ``` ``` .word 0x55aa137f, 0x12345678 ``` ```1: ``` ```.text ``` ```test_end ``` ```.macro test_mulxxx_ld mulop, ldop, comb, w, x, s, t, a, b, iv, op ``` ``` init_reg \comb & 2, \s, \a ``` ``` init_reg \comb & 1, \t, \b ``` ``` init_acc \iv ``` ``` \mulop\().ll.\ldop \w, \x, \s, \t ``` ``` assert_acc_value (\iv \op mul16(\a, \b)) ``` ``` init_acc \iv ``` ``` \mulop\().lh.\ldop \w, \x, \s, \t ``` ``` assert_acc_value (\iv \op mul16(\a, (\b >> 16))) ``` ``` init_acc \iv ``` ``` \mulop\().hl.\ldop \w, \x, \s, \t ``` ``` assert_acc_value (\iv \op mul16((\a >> 16), \b)) ``` ``` init_acc \iv ``` ``` \mulop\().hh.\ldop \w, \x, \s, \t ``` ``` assert_acc_value (\iv \op mul16((\a >> 16), (\b >> 16))) ``` ```.endm ``` ```test mula_da_ldinc ``` ``` movi a2, 1f - 4 ``` ``` test_mulxxx_ld mula.da, ldinc, 2, m1, a2, m1, a3, \ ``` ``` 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ``` movi a3, 1f + 12 ``` ``` assert eq, a2, a3 ``` ``` rsr a2, m1 ``` ``` movi a3, 0x12345678 ``` ``` assert eq, a2, a3 ``` ```.data ``` ```1: .word 0xf7315a5a, 0xf7315a5a, 0xf7315a5a, 0x12345678 ``` ```.text ``` ```test_end ``` ```test mula_dd_ldinc ``` ``` movi a2, 1f - 4 ``` ``` test_mulxxx_ld mula.dd, ldinc, 3, m2, a2, m1, m2, \ ``` ``` 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ``` movi a3, 1f + 12 ``` ``` assert eq, a2, a3 ``` ``` rsr a2, m2 ``` ``` movi a3, 0x12345678 ``` ``` assert eq, a2, a3 ``` ```.data ``` ```1: .word 0xa5a5137f, 0xa5a5137f, 0xa5a5137f, 0x12345678 ``` ```.text ``` ```test_end ``` ```test mula_da_lddec ``` ``` movi a2, 1f ``` ``` test_mulxxx_ld mula.da, lddec, 2, m1, a2, m1, a3, \ ``` ``` 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ``` movi a3, 1f - 16 ``` ``` assert eq, a2, a3 ``` ``` rsr a2, m1 ``` ``` movi a3, 0x12345678 ``` ``` assert eq, a2, a3 ``` ```.data ``` ``` .word 0x12345678, 0xf7315a5a, 0xf7315a5a, 0xf7315a5a ``` ```1: ``` ```.text ``` ```test_end ``` ```test mula_dd_lddec ``` ``` movi a2, 1f ``` ``` test_mulxxx_ld mula.dd, lddec, 3, m2, a2, m1, m2, \ ``` ``` 0xf7315a5a, 0xa5a5137f, 0x0ff73155aa, + ``` ``` movi a3, 1f - 16 ``` ``` assert eq, a2, a3 ``` ``` rsr a2, m2 ``` ``` movi a3, 0x12345678 ``` ``` assert eq, a2, a3 ``` ```.data ``` ``` .word 0x12345678, 0xa5a5137f, 0xa5a5137f, 0xa5a5137f ``` ```1: ``` ```.text ``` ```test_end ``` ```test_suite_end ```