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