1 # Copyright 2009, 2010 Free Software Foundation, Inc.
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.
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.
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/>.
16 # This file is part of the gdb testsuite.
19 # This test tests some i386 general instructions for reverse execution.
22 if ![target_info exists gdb,can_reverse] {
31 if ![istarget "*86*-*linux*"] then {
32 verbose "Skipping i386 reverse tests."
36 set testfile "i386-sse-reverse"
37 set srcfile ${testfile}.c
38 set binfile ${objdir}/${subdir}/${testfile}
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=\"_\""
47 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
48 untested i386-sse-reverse
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 "]
60 gdb_reinitialize_dir $srcdir/$subdir
64 if [target_info exists gdb,use_precord] {
65 # Activate process record/replay
66 gdb_test "record" "" "Turn on process record"
67 # FIXME: command ought to acknowledge, so we can test if it succeeded.
75 gdb_test "break $end_sse_test" \
76 "Breakpoint $decimal at .* line $end_sse_test\." \
77 "set breakpoint at end of sse_test"
81 "continue to end of sse_test"
83 gdb_test "reverse-step" "xorps.*" "reverse-step to xorps"
85 gdb_test "info register xmm0" \
86 "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
87 "verify xmm0 at end of sse_test"
89 gdb_test "info register xmm1" \
90 "xmm1 .*uint128 = 0x00ff00ff0000000000ff00ff00000000.*" \
91 "verify xmm1 at end of sse_test"
93 gdb_test "info register xmm2" \
94 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
95 "verify xmm2 at end of sse_test"
97 gdb_test "reverse-step" "xorpd.*" "reverse-step to xorpd"
99 gdb_test "info register xmm0" \
100 "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
101 "verify xmm0 after reverse xorps"
103 gdb_test "info register xmm1" \
104 "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
105 "verify xmm1 after reverse xorps"
107 gdb_test "info register xmm2" \
108 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
109 "verify xmm2 after reverse xorps"
111 gdb_test "reverse-step" "unpckhps.*" "reverse-step to unpckhps"
113 gdb_test "info register xmm0" \
114 "xmm0 .*uint128 = 0x7fff7fff7fff7fff0108000001400000.*" \
115 "verify xmm0 after reverse xorpd"
117 gdb_test "info register xmm1" \
118 "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
119 "verify xmm1 after reverse xorpd"
121 gdb_test "info register xmm2" \
122 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
123 "verify xmm2 after reverse xorpd"
125 gdb_test "reverse-step" "unpckhpd.*" "reverse-step to unpckhpd"
127 gdb_test "info register xmm0" \
128 "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
129 "verify xmm0 after reverse unpckhps"
131 gdb_test "info register xmm1" \
132 "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
133 "verify xmm1 after reverse unpckhps"
135 gdb_test "info register xmm2" \
136 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
137 "verify xmm2 after reverse unpckhps"
139 gdb_test "reverse-step" "ucomiss.*" "reverse-step to ucomiss"
141 gdb_test "info register xmm0" \
142 "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
143 "verify xmm0 after reverse unpckhpd"
145 gdb_test "info register xmm1" \
146 "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
147 "verify xmm1 after reverse unpckhpd"
149 gdb_test "info register xmm2" \
150 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
151 "verify xmm2 after reverse unpckhpd"
153 gdb_test "reverse-step" "ucomisd.*" "reverse-step to ucomisd"
155 gdb_test "info register xmm0" \
156 "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
157 "verify xmm0 after reverse ucomiss"
159 gdb_test "info register xmm1" \
160 "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
161 "verify xmm1 after reverse ucomiss"
163 gdb_test "info register xmm2" \
164 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
165 "verify xmm2 after reverse ucomiss"
167 gdb_test "reverse-step" "packssdw.*" "reverse-step to packssdw"
169 gdb_test "info register xmm0" \
170 "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
171 "verify xmm0 after reverse ucomisd"
173 gdb_test "info register xmm1" \
174 "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
175 "verify xmm1 after reverse ucomisd"
177 gdb_test "info register xmm2" \
178 "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
179 "verify xmm2 after reverse ucomisd"
181 gdb_test "reverse-step" "packsswb.*" "reverse-step to packsswb"
183 gdb_test "info register xmm0" \
184 "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
185 "verify xmm0 after reverse packssdw"
187 gdb_test "info register xmm1" \
188 "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
189 "verify xmm1 after reverse packssdw"
191 gdb_test "info register xmm2" \
192 "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
193 "verify xmm2 after reverse packssdw"
195 gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd"
197 gdb_test "info register xmm0" \
198 "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
199 "verify xmm0 after reverse packsswb"
201 gdb_test "info register xmm1" \
202 "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
203 "verify xmm1 after reverse packsswb"
205 gdb_test "info register xmm2" \
206 "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
207 "verify xmm2 after reverse packsswb"
209 gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw"
211 gdb_test "info register xmm0" \
212 "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
213 "verify xmm0 after reverse pabsd"
215 gdb_test "info register xmm1" \
216 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
217 "verify xmm1 after reverse pabsd"
219 gdb_test "info register xmm2" \
220 "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
221 "verify xmm2 after reverse pabsd"
223 gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb"
225 gdb_test "info register xmm0" \
226 "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
227 "verify xmm0 after reverse pabsw"
229 gdb_test "info register xmm1" \
230 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
231 "verify xmm1 after reverse pabsw"
233 gdb_test "info register xmm2" \
234 "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
235 "verify xmm2 after reverse pabsw"
237 gdb_test "reverse-step" "orps.*" "reverse-step to orps"
239 gdb_test "info register xmm0" \
240 "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
241 "verify xmm0 after reverse pabsb"
243 gdb_test "info register xmm1" \
244 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
245 "verify xmm1 after reverse pabsb"
247 gdb_test "info register xmm2" \
248 "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
249 "verify xmm2 after reverse pabsb"
251 gdb_test "reverse-step" "orpd.*" "reverse-step to orpd"
253 gdb_test "info register xmm0" \
254 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
255 "verify xmm0 after reverse orps"
257 gdb_test "info register xmm1" \
258 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
259 "verify xmm1 after reverse orps"
261 gdb_test "info register xmm2" \
262 "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
263 "verify xmm2 after reverse orps"
265 gdb_test "reverse-step" "mulss.*" "reverse-step to mulss"
267 gdb_test "info register xmm0" \
268 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
269 "verify xmm0 after reverse orpd"
271 gdb_test "info register xmm1" \
272 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
273 "verify xmm1 after reverse orpd"
275 gdb_test "info register xmm2" \
276 "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
277 "verify xmm2 after reverse orpd"
279 gdb_test "reverse-step" "mulsd.*" "reverse-step to mulsd"
281 gdb_test "info register xmm0" \
282 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
283 "verify xmm0 after reverse mulss"
285 gdb_test "info register xmm1" \
286 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
287 "verify xmm1 after reverse mulss"
289 gdb_test "info register xmm2" \
290 "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
291 "verify xmm2 after reverse mulss"
293 gdb_test "reverse-step" "mulps.*" "reverse-step to mulps"
295 gdb_test "info register xmm0" \
296 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
297 "verify xmm0 after reverse mulsd"
299 gdb_test "info register xmm1" \
300 "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
301 "verify xmm1 after reverse mulsd"
303 gdb_test "info register xmm2" \
304 "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \
305 "verify xmm2 after reverse mulsd"
307 gdb_test "reverse-step" "mulpd.*" "reverse-step to mulpd"
309 gdb_test "info register xmm0" \
310 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
311 "verify xmm0 after reverse mulps"
313 gdb_test "info register xmm1" \
314 "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
315 "verify xmm1 after reverse mulps"
317 gdb_test "info register xmm2" \
318 "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \
319 "verify xmm2 after reverse mulps"
321 gdb_test "reverse-step" "divss.*" "reverse-step to divss"
323 gdb_test "info register xmm0" \
324 "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \
325 "verify xmm0 after reverse mulpd"
327 gdb_test "info register xmm1" \
328 "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
329 "verify xmm1 after reverse mulpd"
331 gdb_test "info register xmm2" \
332 "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
333 "verify xmm2 after reverse mulpd"
335 gdb_test "reverse-step" "divsd.*" "reverse-step to divsd"
337 gdb_test "info register xmm0" \
338 "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \
339 "verify xmm0 after reverse divss"
341 gdb_test "info register xmm1" \
342 "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
343 "verify xmm1 after reverse divss"
345 gdb_test "info register xmm2" \
346 "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
347 "verify xmm2 after reverse divss"
349 gdb_test "reverse-step" "divps.*" "reverse-step to divps"
351 gdb_test "info register xmm0" \
352 "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \
353 "verify xmm0 after reverse divsd"
355 gdb_test "info register xmm1" \
356 "xmm1 .*uint128 = 0x00000000000000000000000080000000.*" \
357 "verify xmm1 after reverse divsd"
359 gdb_test "info register xmm2" \
360 "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \
361 "verify xmm2 after reverse divsd"
363 gdb_test "reverse-step" "divpd.*" "reverse-step to divpd"
365 gdb_test "info register xmm0" \
366 "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \
367 "verify xmm0 after reverse divps"
369 gdb_test "info register xmm1" \
370 "xmm1 .*uint128 = 0x00000000000000000000000080000000.*" \
371 "verify xmm1 after reverse divps"
373 gdb_test "info register xmm2" \
374 "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
375 "verify xmm2 after reverse divps"
377 gdb_test "reverse-step" "cvtpd2ps.*" "reverse-step to cvtpd2ps"
379 gdb_test "info register xmm0" \
380 "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \
381 "verify xmm0 after reverse divpd"
383 gdb_test "info register xmm1" \
384 "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \
385 "verify xmm1 after reverse divpd"
387 gdb_test "info register xmm2" \
388 "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
389 "verify xmm2 after reverse divpd"
391 gdb_test "reverse-step" "cvtpd2dq.*" "reverse-step to cvtpd2dq"
393 gdb_test "info register xmm0" \
394 "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \
395 "verify xmm0 after reverse cvtpd2ps"
397 gdb_test "info register xmm1" \
398 "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \
399 "verify xmm1 after reverse cvtpd2ps"
401 gdb_test "info register xmm2" \
402 "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
403 "verify xmm2 after reverse cvtpd2ps"
405 gdb_test "reverse-step" "cvtdq2ps.*" "reverse-step to cvtdq2ps"
407 gdb_test "info register xmm0" \
408 "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \
409 "verify xmm0 after reverse cvtpd2dq"
411 gdb_test "info register xmm1" \
412 "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \
413 "verify xmm1 after reverse cvtpd2dq"
415 gdb_test "info register xmm2" \
416 "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \
417 "verify xmm2 after reverse cvtpd2dq"
419 gdb_test "reverse-step" "cvtdq2pd.*" "reverse-step to cvtdq2pd"
421 gdb_test "info register xmm0" \
422 "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \
423 "verify xmm0 after reverse cvtdq2ps"
425 gdb_test "info register xmm1" \
426 "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \
427 "verify xmm1 after reverse cvtdq2ps"
429 gdb_test "info register xmm2" \
430 "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
431 "verify xmm2 after reverse cvtdq2ps"
433 gdb_test "reverse-step" "comiss.*" "reverse-step to comiss"
435 gdb_test "info register xmm0" \
436 "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \
437 "verify xmm0 after reverse cvtdq2pd"
439 gdb_test "info register xmm1" \
440 "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \
441 "verify xmm1 after reverse cvtdq2pd"
443 gdb_test "info register xmm2" \
444 "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
445 "verify xmm2 after reverse cvtdq2pd"
447 gdb_test "reverse-step" "comisd.*" "reverse-step to comisd"
449 gdb_test "info register xmm0" \
450 "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \
451 "verify xmm0 after reverse comiss"
453 gdb_test "info register xmm1" \
454 "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \
455 "verify xmm1 after reverse comiss"
457 gdb_test "info register xmm2" \
458 "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
459 "verify xmm2 after reverse comiss"
461 gdb_test "reverse-step" "cmpss.*" "reverse-step to cmpss"
463 gdb_test "info register xmm0" \
464 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
465 "verify xmm0 after reverse comisd"
467 gdb_test "info register xmm1" \
468 "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \
469 "verify xmm1 after reverse comisd"
471 gdb_test "info register xmm2" \
472 "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
473 "verify xmm2 after reverse comisd"
475 gdb_test "reverse-step" "cmpsd.*" "reverse-step to cmpsd"
477 gdb_test "info register xmm0" \
478 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
479 "verify xmm0 after reverse cmpss"
481 gdb_test "info register xmm1" \
482 "xmm1 .*uint128 = 0x00000000000000000000000000000000.*" \
483 "verify xmm1 after reverse cmpss"
485 gdb_test "info register xmm2" \
486 "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \
487 "verify xmm2 after reverse cmpss"
489 gdb_test "reverse-step" "cmpps.*" "reverse-step to cmpps"
491 gdb_test "info register xmm0" \
492 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
493 "verify xmm0 after reverse cmpsd"
495 gdb_test "info register xmm1" \
496 "xmm1 .*uint128 = 0x00000000000000000000000000000000.*" \
497 "verify xmm1 after reverse cmpsd"
499 gdb_test "info register xmm2" \
500 "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \
501 "verify xmm2 after reverse cmpsd"
503 gdb_test "reverse-step" "cmppd.*" "reverse-step to cmppd"
505 gdb_test "info register xmm0" \
506 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
507 "verify xmm0 after reverse cmpps"
509 gdb_test "info register xmm1" \
510 "xmm1 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \
511 "verify xmm1 after reverse cmpps"
513 gdb_test "info register xmm2" \
514 "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \
515 "verify xmm2 after reverse cmpps"
517 gdb_test "reverse-step" "andps.*" "reverse-step to andps"
519 gdb_test "info register xmm0" \
520 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
521 "verify xmm0 after reverse cmppd"
523 gdb_test "info register xmm1" \
524 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \
525 "verify xmm1 after reverse cmppd"
527 gdb_test "info register xmm2" \
528 "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \
529 "verify xmm2 after reverse cmppd"
531 gdb_test "reverse-step" "andpd.*" "reverse-step to andpd"
533 gdb_test "info register xmm0" \
534 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
535 "verify xmm0 after reverse andps"
537 gdb_test "info register xmm1" \
538 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \
539 "verify xmm1 after reverse andps"
541 gdb_test "info register xmm2" \
542 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
543 "verify xmm2 after reverse andps"
545 gdb_test "reverse-step" "addsubps.*" "reverse-step to addsubps"
547 gdb_test "info register xmm0" \
548 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
549 "verify xmm0 after reverse andpd"
551 gdb_test "info register xmm1" \
552 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
553 "verify xmm1 after reverse andpd"
555 gdb_test "info register xmm2" \
556 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
557 "verify xmm2 after reverse andpd"
559 gdb_test "reverse-step" "addsubpd.*" "reverse-step to addsubpd"
561 gdb_test "info register xmm0" \
562 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \
563 "verify xmm0 after reverse addsubps"
565 gdb_test "info register xmm1" \
566 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
567 "verify xmm1 after reverse addsubps"
569 gdb_test "info register xmm2" \
570 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
571 "verify xmm2 after reverse addsubps"
573 gdb_test "reverse-step" "addss.*" "reverse-step to addss"
575 gdb_test "info register xmm0" \
576 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
577 "verify xmm0 after reverse addsubpd"
579 gdb_test "info register xmm1" \
580 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \
581 "verify xmm1 after reverse addsubpd"
583 gdb_test "info register xmm2" \
584 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
585 "verify xmm2 after reverse addsubpd"
587 gdb_test "reverse-step" "addsd.*" "reverse-step to addsd"
589 gdb_test "info register xmm0" \
590 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
591 "verify xmm0 after reverse addss"
593 gdb_test "info register xmm1" \
594 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
595 "verify xmm1 after reverse addss"
597 gdb_test "info register xmm2" \
598 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
599 "verify xmm2 after reverse addss"
601 gdb_test "reverse-step" "addps.*" "reverse-step to addps"
603 gdb_test "info register xmm0" \
604 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
605 "verify xmm0 after reverse addsd"
607 gdb_test "info register xmm1" \
608 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
609 "verify xmm1 after reverse addsd"
611 gdb_test "info register xmm2" \
612 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
613 "verify xmm2 after reverse addsd"
615 gdb_test "reverse-step" "addpd.*" "reverse-step to addpd"
617 gdb_test "info register xmm0" \
618 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
619 "verify xmm0 after reverse addps"
621 gdb_test "info register xmm1" \
622 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
623 "verify xmm1 after reverse addps"
625 gdb_test "info register xmm2" \
626 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
627 "verify xmm2 after reverse addps"
632 send_gdb "continue\n"
634 gdb_test "break $end_sse4_test" \
635 "Breakpoint $decimal at .* line $end_sse4_test\." \
636 "set breakpoint at end of sse4_test"
638 send_gdb "continue\n"
640 -re " end sse4_test .*" {
641 pass "continue to end of sse4_test"
643 -re " Illegal instruction.*" {
644 untested i386-sse4-reverse
649 gdb_test "reverse-step" "blendvps.*" "reverse-step to blendvps"
651 gdb_test "info register xmm0" \
652 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09082726252413121110.*" \
653 "verify xmm0 at end of sse4_test"
655 gdb_test "info register xmm1" \
656 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
657 "verify xmm1 at end of sse4_test"
659 gdb_test "info register xmm2" \
660 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
661 "verify xmm2 at end of sse4_test"
663 gdb_test "reverse-step" "blendvpd.*" "reverse-step to blendvpd"
665 gdb_test "info register xmm0" \
666 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09082726252413121110.*" \
667 "verify xmm0 after reverse blendvps"
669 gdb_test "info register xmm1" \
670 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
671 "verify xmm1 after reverse blendvps"
673 gdb_test "info register xmm2" \
674 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
675 "verify xmm2 after reverse blendvps"
677 gdb_test "reverse-step" "blendps.*" "reverse-step to blendps"
679 gdb_test "info register xmm0" \
680 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09081716151413121110.*" \
681 "verify xmm0 after reverse blendvpd"
683 gdb_test "info register xmm1" \
684 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
685 "verify xmm1 after reverse blendvpd"
687 gdb_test "info register xmm2" \
688 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
689 "verify xmm2 after reverse blendvpd"
691 gdb_test "reverse-step" "blendpd.*" "reverse-step to blendpd"
693 gdb_test "info register xmm0" \
694 "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \
695 "verify xmm0 after reverse blendps"
697 gdb_test "info register xmm1" \
698 "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \
699 "verify xmm1 after reverse blendps"
701 gdb_test "info register xmm2" \
702 "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \
703 "verify xmm2 after reverse blendps"