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