Update copyright year range in all GDB files.
[external/binutils.git] / gdb / testsuite / gdb.reverse / i386-sse-reverse.exp
1 # Copyright 2009-2019 Free Software Foundation, Inc.
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 # This file is part of the gdb testsuite.
17
18 #
19 # This test tests some i386 general instructions for reverse execution.
20 #
21
22 if ![supports_reverse] {
23     return
24 }
25
26
27 if ![istarget "*86*-*linux*"] then {
28     verbose "Skipping i386 reverse tests."
29     return
30 }
31
32 standard_testfile
33
34 # some targets have leading underscores on assembly symbols.
35 set additional_flags [gdb_target_symbol_prefix_flags]
36
37 if {[prepare_for_testing "failed to prepare" $testfile $srcfile \
38          [list debug $additional_flags]]} {
39     return -1
40 }
41
42 set end_of_main          [gdb_get_line_number " end of main "]
43 set end_sse_test         [gdb_get_line_number " end sse_test "]
44 set end_ssse3_test       [gdb_get_line_number " end ssse3_test "]
45 set end_sse4_test         [gdb_get_line_number " end sse4_test "]
46
47 runto main
48
49 if [supports_process_record] {
50     # Activate process record/replay
51     gdb_test_no_output "record" "turn on process record"
52 }
53
54 global hex
55 global decimal
56
57 #sse_test
58
59 gdb_test "break $end_sse_test" \
60     "Breakpoint $decimal at .* line $end_sse_test\." \
61     "set breakpoint at end of sse_test"
62
63 set test "continue to end of sse_test"
64 gdb_test_multiple "continue" $test {
65     -re " end sse_test .*\r\n$gdb_prompt $" {
66         pass $test
67     }
68     -re " Illegal instruction.*\r\n$gdb_prompt $" {
69         untested i386-sse-reverse
70         return -1
71     }
72 }
73
74 gdb_test "reverse-step" "xorps.*" "reverse-step to xorps"
75
76 gdb_test "info register xmm0" \
77     "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \
78     "verify xmm0 at end of sse_test"
79
80 gdb_test "info register xmm1" \
81     "xmm1 .*uint128 = 0x70004000000000007800400000000000.*" \
82     "verify xmm1 at end of sse_test"
83
84 gdb_test "info register xmm2" \
85     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
86     "verify xmm2 at end of sse_test"
87
88 gdb_test "reverse-step" "xorpd.*" "reverse-step to xorpd"
89
90 gdb_test "info register xmm0" \
91     "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \
92     "verify xmm0 after reverse xorps"
93
94 gdb_test "info register xmm1" \
95     "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
96     "verify xmm1 after reverse xorps"
97
98 gdb_test "info register xmm2" \
99     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
100     "verify xmm2 after reverse xorps"
101
102 gdb_test "reverse-step" "unpckhps.*" "reverse-step to unpckhps"
103
104 gdb_test "info register xmm0" \
105     "xmm0 .*uint128 = 0x8000800080008000fff00000ffc00000.*" \
106     "verify xmm0 after reverse xorpd"
107
108 gdb_test "info register xmm1" \
109     "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
110     "verify xmm1 after reverse xorpd"
111
112 gdb_test "info register xmm2" \
113     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
114     "verify xmm2 after reverse xorpd"
115
116 gdb_test "reverse-step" "unpckhpd.*" "reverse-step to unpckhpd"
117
118 gdb_test "info register xmm0" \
119     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
120     "verify xmm0 after reverse unpckhps"
121
122 gdb_test "info register xmm1" \
123     "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
124     "verify xmm1 after reverse unpckhps"
125
126 gdb_test "info register xmm2" \
127     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
128     "verify xmm2 after reverse unpckhps"
129
130 gdb_test "reverse-step" "ucomiss.*" "reverse-step to ucomiss"
131
132 gdb_test "info register xmm0" \
133     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
134     "verify xmm0 after reverse unpckhpd"
135
136 gdb_test "info register xmm1" \
137     "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
138     "verify xmm1 after reverse unpckhpd"
139
140 gdb_test "info register xmm2" \
141     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
142     "verify xmm2 after reverse unpckhpd"
143
144 gdb_test "reverse-step" "ucomisd.*" "reverse-step to ucomisd"
145
146 gdb_test "info register xmm0" \
147     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
148     "verify xmm0 after reverse ucomiss"
149
150 gdb_test "info register xmm1" \
151     "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \
152     "verify xmm1 after reverse ucomiss"
153
154 gdb_test "info register xmm2" \
155     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
156     "verify xmm2 after reverse ucomiss"
157
158 gdb_test "reverse-step" "packssdw.*" "reverse-step to packssdw"
159
160 gdb_test "info register xmm0" \
161     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
162     "verify xmm0 after reverse ucomisd"
163
164 gdb_test "info register xmm1" \
165     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
166     "verify xmm1 after reverse ucomisd"
167
168 gdb_test "info register xmm2" \
169     "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \
170     "verify xmm2 after reverse ucomisd"
171
172 gdb_test "reverse-step" "packsswb.*" "reverse-step to packsswb"
173
174 gdb_test "info register xmm0" \
175     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
176     "verify xmm0 after reverse packssdw"
177
178 gdb_test "info register xmm1" \
179     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
180     "verify xmm1 after reverse packssdw"
181
182 gdb_test "info register xmm2" \
183     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
184     "verify xmm2 after reverse packssdw"
185
186 gdb_test "reverse-step" "orps.*" "reverse-step to orps"
187
188 gdb_test "info register xmm0" \
189     "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
190     "verify xmm0 after reverse packsswb"
191
192 gdb_test "info register xmm1" \
193     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
194     "verify xmm1 after reverse packsswb"
195
196 gdb_test "info register xmm2" \
197     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
198     "verify xmm2 after reverse packsswb"
199
200 gdb_test "reverse-step" "orpd.*" "reverse-step to orpd"
201
202 gdb_test "info register xmm0" \
203     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
204     "verify xmm0 after reverse orps"
205
206 gdb_test "info register xmm1" \
207     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
208     "verify xmm1 after reverse orps"
209
210 gdb_test "info register xmm2" \
211     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
212     "verify xmm2 after reverse orps"
213
214 gdb_test "reverse-step" "mulss.*" "reverse-step to mulss"
215
216 gdb_test "info register xmm0" \
217     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
218     "verify xmm0 after reverse orpd"
219
220 gdb_test "info register xmm1" \
221     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
222     "verify xmm1 after reverse orpd"
223
224 gdb_test "info register xmm2" \
225     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
226     "verify xmm2 after reverse orpd"
227
228 gdb_test "reverse-step" "mulsd.*" "reverse-step to mulsd"
229
230 gdb_test "info register xmm0" \
231     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
232     "verify xmm0 after reverse mulss"
233
234 gdb_test "info register xmm1" \
235     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
236     "verify xmm1 after reverse mulss"
237
238 gdb_test "info register xmm2" \
239     "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
240     "verify xmm2 after reverse mulss"
241
242 gdb_test "reverse-step" "mulps.*" "reverse-step to mulps"
243
244 gdb_test "info register xmm0" \
245     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
246     "verify xmm0 after reverse mulsd"
247
248 gdb_test "info register xmm1" \
249     "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
250     "verify xmm1 after reverse mulsd"
251
252 gdb_test "info register xmm2" \
253     "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \
254     "verify xmm2 after reverse mulsd"
255
256 gdb_test "reverse-step" "mulpd.*" "reverse-step to mulpd"
257
258 gdb_test "info register xmm0" \
259     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
260     "verify xmm0 after reverse mulps"
261
262 gdb_test "info register xmm1" \
263     "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
264     "verify xmm1 after reverse mulps"
265
266 gdb_test "info register xmm2" \
267     "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \
268     "verify xmm2 after reverse mulps"
269
270 gdb_test "reverse-step" "divss.*" "reverse-step to divss"
271
272 gdb_test "info register xmm0" \
273     "xmm0 .*uint128 = 0xfff80000ffc00000.*" \
274     "verify xmm0 after reverse mulpd"
275
276 gdb_test "info register xmm1" \
277     "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
278     "verify xmm1 after reverse mulpd"
279
280 gdb_test "info register xmm2" \
281     "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
282     "verify xmm2 after reverse mulpd"
283
284 gdb_test "reverse-step" "divsd.*" "reverse-step to divsd"
285
286 gdb_test "info register xmm0" \
287     "xmm0 .*uint128 = 0x8000000080000000.*" \
288     "verify xmm0 after reverse divss"
289
290 gdb_test "info register xmm1" \
291     "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
292     "verify xmm1 after reverse divss"
293
294 gdb_test "info register xmm2" \
295     "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
296     "verify xmm2 after reverse divss"
297
298 gdb_test "reverse-step" "divps.*" "reverse-step to divps"
299
300 gdb_test "info register xmm0" \
301     "xmm0 .*uint128 = 0x8000000080000000.*" \
302     "verify xmm0 after reverse divsd"
303
304 gdb_test "info register xmm1" \
305     "xmm1 .*uint128 = 0x80000000.*" \
306     "verify xmm1 after reverse divsd"
307
308 gdb_test "info register xmm2" \
309     "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
310     "verify xmm2 after reverse divsd"
311
312 gdb_test "reverse-step" "divpd.*" "reverse-step to divpd"
313
314 gdb_test "info register xmm0" \
315     "xmm0 .*uint128 = 0x8000000080000000.*" \
316     "verify xmm0 after reverse divps"
317
318 gdb_test "info register xmm1" \
319     "xmm1 .*uint128 = 0x80000000.*" \
320     "verify xmm1 after reverse divps"
321
322 gdb_test "info register xmm2" \
323     "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
324     "verify xmm2 after reverse divps"
325
326 gdb_test "reverse-step" "cvtpd2ps.*" "reverse-step to cvtpd2ps"
327
328 gdb_test "info register xmm0" \
329     "xmm0 .*uint128 = 0x8000000080000000.*" \
330     "verify xmm0 after reverse divpd"
331
332 gdb_test "info register xmm1" \
333     "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \
334     "verify xmm1 after reverse divpd"
335
336 gdb_test "info register xmm2" \
337     "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
338     "verify xmm2 after reverse divpd"
339
340 gdb_test "reverse-step" "cvtpd2dq.*" "reverse-step to cvtpd2dq"
341
342 gdb_test "info register xmm0" \
343     "xmm0 .*uint128 = 0xf0e0d0c0b0a090807060504ffffffff.*" \
344     "verify xmm0 after reverse cvtpd2ps"
345
346 gdb_test "info register xmm1" \
347     "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \
348     "verify xmm1 after reverse cvtpd2ps"
349
350 gdb_test "info register xmm2" \
351     "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
352     "verify xmm2 after reverse cvtpd2ps"
353
354 gdb_test "reverse-step" "cvtdq2ps.*" "reverse-step to cvtdq2ps"
355
356 gdb_test "info register xmm0" \
357     "xmm0 .*uint128 = 0xf0e0d0c0b0a090807060504ffffffff.*" \
358     "verify xmm0 after reverse cvtpd2dq"
359
360 gdb_test "info register xmm1" \
361     "xmm1 .*uint128 = 0xffffffffffffffff.*" \
362     "verify xmm1 after reverse cvtpd2dq"
363
364 gdb_test "info register xmm2" \
365     "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
366     "verify xmm2 after reverse cvtpd2dq"
367
368 gdb_test "reverse-step" "cvtdq2pd.*" "reverse-step to cvtdq2pd"
369
370 gdb_test "info register xmm0" \
371     "xmm0 .*uint128 = 0xf0e0d0c0b0a090807060504ffffffff.*" \
372     "verify xmm0 after reverse cvtdq2ps"
373
374 gdb_test "info register xmm1" \
375     "xmm1 .*uint128 = 0xffffffffffffffff.*" \
376     "verify xmm1 after reverse cvtdq2ps"
377
378 gdb_test "info register xmm2" \
379     "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
380     "verify xmm2 after reverse cvtdq2ps"
381
382 gdb_test "reverse-step" "comiss.*" "reverse-step to comiss"
383
384 gdb_test "info register xmm0" \
385     "xmm0 .*uint128 = 0xf0e0d0c0b0a090807060504ffffffff.*" \
386     "verify xmm0 after reverse cvtdq2pd"
387
388 gdb_test "info register xmm1" \
389     "xmm1 .*uint128 = 0xffffffffffffffff.*" \
390     "verify xmm1 after reverse cvtdq2pd"
391
392 gdb_test "info register xmm2" \
393     "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
394     "verify xmm2 after reverse cvtdq2pd"
395
396 gdb_test "reverse-step" "comisd.*" "reverse-step to comisd"
397
398 gdb_test "info register xmm0" \
399     "xmm0 .*uint128 = 0xf0e0d0c0b0a090807060504ffffffff.*" \
400     "verify xmm0 after reverse comiss"
401
402 gdb_test "info register xmm1" \
403     "xmm1 .*uint128 = 0xffffffffffffffff.*" \
404     "verify xmm1 after reverse comiss"
405
406 gdb_test "info register xmm2" \
407     "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
408     "verify xmm2 after reverse comiss"
409
410 gdb_test "reverse-step" "cmpss.*" "reverse-step to cmpss"
411
412 gdb_test "info register xmm0" \
413     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
414     "verify xmm0 after reverse comisd"
415
416 gdb_test "info register xmm1" \
417     "xmm1 .*uint128 = 0xffffffffffffffff.*" \
418     "verify xmm1 after reverse comisd"
419
420 gdb_test "info register xmm2" \
421     "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
422     "verify xmm2 after reverse comisd"
423
424 gdb_test "reverse-step" "cmpsd.*" "reverse-step to cmpsd"
425
426 gdb_test "info register xmm0" \
427     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
428     "verify xmm0 after reverse cmpss"
429
430 gdb_test "info register xmm1" \
431     "xmm1 .*uint128 = 0x.*" \
432     "verify xmm1 after reverse cmpss"
433
434 gdb_test "info register xmm2" \
435     "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
436     "verify xmm2 after reverse cmpss"
437
438 gdb_test "reverse-step" "cmpps.*" "reverse-step to cmpps"
439
440 gdb_test "info register xmm0" \
441     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
442     "verify xmm0 after reverse cmpsd"
443
444 gdb_test "info register xmm1" \
445     "xmm1 .*uint128 = 0x.*" \
446     "verify xmm1 after reverse cmpsd"
447
448 gdb_test "info register xmm2" \
449     "xmm2 .*uint128 = 0xf0e0d0c0b0a09082726252400000000.*" \
450     "verify xmm2 after reverse cmpsd"
451
452 gdb_test "reverse-step" "cmppd.*" "reverse-step to cmppd"
453
454 gdb_test "info register xmm0" \
455     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
456     "verify xmm0 after reverse cmpps"
457
458 gdb_test "info register xmm1" \
459     "xmm1 .*uint128 = 0xf0e0d0c0b0a09082726252400000000.*" \
460     "verify xmm1 after reverse cmpps"
461
462 gdb_test "info register xmm2" \
463     "xmm2 .*uint128 = 0xf0e0d0c0b0a09082726252400000000.*" \
464     "verify xmm2 after reverse cmpps"
465
466 gdb_test "reverse-step" "andps.*" "reverse-step to andps"
467
468 gdb_test "info register xmm0" \
469     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
470     "verify xmm0 after reverse cmppd"
471
472 gdb_test "info register xmm1" \
473     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \
474     "verify xmm1 after reverse cmppd"
475
476 gdb_test "info register xmm2" \
477     "xmm2 .*uint128 = 0xf0e0d0c0b0a09082726252400000000.*" \
478     "verify xmm2 after reverse cmppd"
479
480 gdb_test "reverse-step" "andpd.*" "reverse-step to andpd"
481
482 gdb_test "info register xmm0" \
483     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
484     "verify xmm0 after reverse andps"
485
486 gdb_test "info register xmm1" \
487     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \
488     "verify xmm1 after reverse andps"
489
490 gdb_test "info register xmm2" \
491     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
492     "verify xmm2 after reverse andps"
493
494 gdb_test "reverse-step" "addsubps.*" "reverse-step to addsubps"
495
496 gdb_test "info register xmm0" \
497     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
498     "verify xmm0 after reverse andpd"
499
500 gdb_test "info register xmm1" \
501     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
502     "verify xmm1 after reverse andpd"
503
504 gdb_test "info register xmm2" \
505     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
506     "verify xmm2 after reverse andpd"
507
508 gdb_test "reverse-step" "addsubpd.*" "reverse-step to addsubpd"
509
510 gdb_test "info register xmm0" \
511     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050423222120.*" \
512     "verify xmm0 after reverse addsubps"
513
514 gdb_test "info register xmm1" \
515     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
516     "verify xmm1 after reverse addsubps"
517
518 gdb_test "info register xmm2" \
519     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
520     "verify xmm2 after reverse addsubps"
521
522 gdb_test "reverse-step" "addss.*" "reverse-step to addss"
523
524 gdb_test "info register xmm0" \
525     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
526     "verify xmm0 after reverse addsubpd"
527
528 gdb_test "info register xmm1" \
529     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
530     "verify xmm1 after reverse addsubpd"
531
532 gdb_test "info register xmm2" \
533     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
534     "verify xmm2 after reverse addsubpd"
535
536 gdb_test "reverse-step" "addsd.*" "reverse-step to addsd"
537
538 gdb_test "info register xmm0" \
539     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
540     "verify xmm0 after reverse addss"
541
542 gdb_test "info register xmm1" \
543     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
544     "verify xmm1 after reverse addss"
545
546 gdb_test "info register xmm2" \
547     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
548     "verify xmm2 after reverse addss"
549
550 gdb_test "reverse-step" "addps.*" "reverse-step to addps"
551
552 gdb_test "info register xmm0" \
553     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
554     "verify xmm0 after reverse addsd"
555
556 gdb_test "info register xmm1" \
557     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
558     "verify xmm1 after reverse addsd"
559
560 gdb_test "info register xmm2" \
561     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
562     "verify xmm2 after reverse addsd"
563
564 gdb_test "reverse-step" "addpd.*" "reverse-step to addpd"
565
566 gdb_test "info register xmm0" \
567     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
568     "verify xmm0 after reverse addps"
569
570 gdb_test "info register xmm1" \
571     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
572     "verify xmm1 after reverse addps"
573
574 gdb_test "info register xmm2" \
575     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
576     "verify xmm2 after reverse addps"
577
578
579 #ssse3_test
580
581 gdb_test "continue" \
582     " end sse_test .*" \
583     "continue to end of sse_test #2"
584
585 gdb_test "break $end_ssse3_test" \
586     "Breakpoint $decimal at .* line $end_ssse3_test\." \
587     "set breakpoint at end of ssse3_test"
588
589 set test "continue to end of ssse3_test"
590 gdb_test_multiple "continue" $test {
591     -re " end ssse3_test .*\r\n$gdb_prompt $" {
592         pass $test
593     }
594     -re " Illegal instruction.*\r\n$gdb_prompt $" {
595         untested i386-ssse3-reverse
596         return -1
597     }
598 }
599
600 gdb_test "info register xmm0" \
601     "xmm0 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
602     "verify xmm0 at end of ssse3_test"
603
604 gdb_test "info register xmm1" \
605     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
606     "verify xmm1 at end of ssse3_test"
607
608 gdb_test "info register xmm2" \
609     "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
610     "verify xmm2 at end of ssse3_test"
611
612 gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd"
613
614 gdb_test "info register xmm0" \
615     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
616     "verify xmm0 after reverse pabsd"
617
618 gdb_test "info register xmm1" \
619     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
620     "verify xmm1 after reverse pabsd"
621
622 gdb_test "info register xmm2" \
623     "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
624     "verify xmm2 after reverse pabsd"
625
626 gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw"
627
628 gdb_test "info register xmm0" \
629     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
630     "verify xmm0 after reverse pabsw"
631
632 gdb_test "info register xmm1" \
633     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
634     "verify xmm1 after reverse pabsw"
635
636 gdb_test "info register xmm2" \
637     "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
638     "verify xmm2 after reverse pabsw"
639
640 gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb"
641
642 gdb_test "info register xmm0" \
643     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
644     "verify xmm0 after reverse pabsb"
645
646 gdb_test "info register xmm1" \
647     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
648     "verify xmm1 after reverse pabsb"
649
650 gdb_test "info register xmm2" \
651     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
652     "verify xmm2 after reverse pabsb"
653
654
655 #sse4_test
656
657 gdb_test "continue" \
658     " end ssse3_test .*" \
659     "continue to end of ssse3_test #2"
660
661 gdb_test "break $end_sse4_test" \
662     "Breakpoint $decimal at .* line $end_sse4_test\." \
663     "set breakpoint at end of sse4_test"
664
665 set test "continue to end of sse4_test"
666 gdb_test_multiple "continue" $test {
667     -re " end sse4_test .*\r\n$gdb_prompt $" {
668         pass $test
669     }
670     -re " Illegal instruction.*\r\n$gdb_prompt $" {
671         untested i386-sse4-reverse
672         return -1
673     }
674 }
675
676 gdb_test "reverse-step" "blendvps.*" "reverse-step to blendvps"
677
678 gdb_test "info register xmm0" \
679     "xmm0 .*uint128 = 0xf0e0d0c0b0a09082726252413121110.*" \
680     "verify xmm0 at end of sse4_test"
681
682 gdb_test "info register xmm1" \
683     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
684     "verify xmm1 at end of sse4_test"
685
686 gdb_test "info register xmm2" \
687     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
688     "verify xmm2 at end of sse4_test"
689
690 gdb_test "reverse-step" "blendvpd.*" "reverse-step to blendvpd"
691
692 gdb_test "info register xmm0" \
693     "xmm0 .*uint128 = 0xf0e0d0c0b0a09082726252413121110.*" \
694     "verify xmm0 after reverse blendvps"
695
696 gdb_test "info register xmm1" \
697     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
698     "verify xmm1 after reverse blendvps"
699
700 gdb_test "info register xmm2" \
701     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
702     "verify xmm2 after reverse blendvps"
703
704 gdb_test "reverse-step" "blendps.*" "reverse-step to blendps"
705
706 gdb_test "info register xmm0" \
707     "xmm0 .*uint128 = 0xf0e0d0c0b0a09081716151413121110.*" \
708     "verify xmm0 after reverse blendvpd"
709
710 gdb_test "info register xmm1" \
711     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
712     "verify xmm1 after reverse blendvpd"
713
714 gdb_test "info register xmm2" \
715     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
716     "verify xmm2 after reverse blendvpd"
717
718 gdb_test "reverse-step" "blendpd.*" "reverse-step to blendpd"
719
720 gdb_test "info register xmm0" \
721     "xmm0 .*uint128 = 0xf0e0d0c0b0a09080706050403020100.*" \
722     "verify xmm0 after reverse blendps"
723
724 gdb_test "info register xmm1" \
725     "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
726     "verify xmm1 after reverse blendps"
727
728 gdb_test "info register xmm2" \
729     "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
730     "verify xmm2 after reverse blendps"