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

History | View | Annotate | Download (5.2 kB)

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 |