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