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