gas/
[binutils.git] / gas / testsuite / gas / mips / vr4130.s
blob74a02bf3c23db7f9bea154a81631521daa17ad54
1 .macro check2 insn
2 mflo $2
3 \insn $3,$3
4 .endm
6 .macro check3 insn
7 mfhi $2
8 \insn $0,$3,$3
9 .endm
11 .macro main func
13 .ent \func
14 .type \func,@function
15 \func:
17 # PART A
19 # Check that mfhis and mflos in .set noreorder blocks are considered.
21 .set noreorder
22 mfhi $2
23 .set reorder
24 mult $3,$3
26 .set noreorder
27 mflo $2
28 .set reorder
29 mult $3,$3
31 # PART B
33 # Check for simple instances.
35 mfhi $2
36 mult $3,$3 # 4 nops
38 mfhi $2
39 addiu $3,1
40 mult $4,$4 # 3 nops
42 mfhi $2
43 addiu $3,1
44 addiu $4,1
45 mult $5,$5 # 2 nops
47 mfhi $2
48 addiu $3,1
49 addiu $4,1
50 addiu $5,1
51 mult $6,$6 # 1 nop
53 mfhi $2
54 addiu $3,1
55 addiu $4,1
56 addiu $5,1
57 addiu $6,1
58 mult $7,$7 # 0 nops
60 # PART C
62 # Check that no nops are inserted after the result has been read.
64 mfhi $2
65 addiu $2,1
66 addiu $3,1
67 addiu $4,1
68 mult $5,$5
70 mfhi $2
71 addiu $3,1
72 addiu $2,1
73 addiu $4,1
74 mult $5,$5
76 mfhi $2
77 addiu $3,1
78 addiu $4,1
79 addiu $2,1
80 mult $5,$5
82 mfhi $2
83 addiu $3,1
84 addiu $4,1
85 addiu $5,1
86 mult $2,$2
88 # PART D
90 # Check that we still insert the usual interlocking nops in cases
91 # where the VR4130 errata doesn't apply.
93 mfhi $2
94 mult $2,$2 # 2 nops
96 mfhi $2
97 addiu $2,1
98 mult $3,$3 # 1 nop
100 mfhi $2
101 addiu $3,1
102 mult $2,$2 # 1 nop
104 # PART E
106 # Check for branches whose targets might be affected.
108 mfhi $2
109 bnez $3,1f # 2 nops for normal mode, 3 for mips16
111 mfhi $2
112 addiu $3,1
113 bnez $3,1f # 1 nop for normal mode, 2 for mips16
115 mfhi $2
116 addiu $3,1
117 addiu $3,1
118 bnez $3,1f # 0 nops for normal mode, 1 for mips16
120 mfhi $2
121 addiu $3,1
122 addiu $3,1
123 addiu $3,1
124 bnez $3,1f # 0 nops
126 # PART F
128 # As above, but with no dependencies between the branch and
129 # the previous instruction. The final branch can use the
130 # preceding addiu as its delay slot.
132 mfhi $2
133 addiu $3,1
134 bnez $4,1f # 1 nop for normal mode, 2 for mips16
136 mfhi $2
137 addiu $3,1
138 addiu $4,1
139 bnez $5,1f # 0 nops for normal mode, 1 for mips16
141 mfhi $2
142 addiu $3,1
143 addiu $4,1
144 addiu $5,1
145 bnez $6,1f # 0 nops, fill delay slot in normal mode
148 # PART G
150 # Like part B, but check that intervening .set noreorders don't
151 # affect the number of nops.
153 mfhi $2
154 .set noreorder
155 addiu $3,1
156 .set reorder
157 mult $4,$4 # 3 nops
159 mfhi $2
160 .set noreorder
161 addiu $3,1
162 .set reorder
163 addiu $4,1
164 mult $5,$5 # 2 nops
166 mfhi $2
167 addiu $3,1
168 .set noreorder
169 addiu $4,1
170 .set reorder
171 mult $5,$5 # 2 nops
173 mfhi $2
174 .set noreorder
175 addiu $3,1
176 addiu $4,1
177 .set reorder
178 mult $5,$5 # 2 nops
180 mfhi $2
181 addiu $3,1
182 .set noreorder
183 addiu $4,1
184 .set reorder
185 addiu $5,1
186 mult $6,$6 # 1 nop
188 mfhi $2
189 .set noreorder
190 addiu $3,1
191 addiu $4,1
192 addiu $5,1
193 .set reorder
194 mult $6,$6 # 1 nop
196 mfhi $2
197 .set noreorder
198 addiu $3,1
199 addiu $4,1
200 addiu $5,1
201 addiu $6,1
202 .set reorder
203 mult $7,$7 # 0 nops
205 # PART H
207 # Like part B, but the mult occurs in a .set noreorder block.
209 mfhi $2
210 .set noreorder
211 mult $3,$3 # 4 nops
212 .set reorder
214 mfhi $2
215 .set noreorder
216 addiu $3,1
217 mult $4,$4 # 3 nops
218 .set reorder
220 mfhi $2
221 addiu $3,1
222 .set noreorder
223 addiu $4,1
224 mult $5,$5 # 2 nops
225 .set reorder
227 mfhi $2
228 .set noreorder
229 addiu $3,1
230 addiu $4,1
231 addiu $5,1
232 mult $6,$6 # 1 nop
233 .set reorder
235 mfhi $2
236 .set noreorder
237 addiu $3,1
238 addiu $4,1
239 addiu $5,1
240 addiu $6,1
241 mult $7,$7 # 0 nops
242 .set reorder
244 # PART I
246 # Check every affected multiplication and division instruction.
248 check2 mult
249 check2 multu
250 check2 dmult
251 check2 dmultu
253 check3 div
254 check3 divu
255 check3 ddiv
256 check3 ddivu
258 .end \func
259 .endm
261 .set nomips16
262 main foo
264 # PART J
266 # Check every affected multiply-accumulate instruction.
268 check3 macc
269 check3 macchi
270 check3 macchis
271 check3 macchiu
272 check3 macchius
273 check3 maccs
274 check3 maccu
275 check3 maccus
277 check3 dmacc
278 check3 dmacchi
279 check3 dmacchis
280 check3 dmacchiu
281 check3 dmacchius
282 check3 dmaccs
283 check3 dmaccu
284 check3 dmaccus
286 # PART K
288 # Check that mtlo and mthi are exempt from the VR4130 errata,
289 # although the usual interlocking delay applies.
291 mflo $2
292 mtlo $3
294 mflo $2
295 mthi $3
297 mfhi $2
298 mtlo $3
300 mfhi $2
301 mthi $3
303 .set mips16
304 main bar