| # Copyright 2009-2016 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| # This file is part of the gdb testsuite. |
| |
| # |
| # This test tests some i386 general instructions for reverse execution. |
| # |
| |
| if ![supports_reverse] { |
| return |
| } |
| |
| |
| if ![istarget "*86*-*linux*"] then { |
| verbose "Skipping i386 reverse tests." |
| return |
| } |
| |
| standard_testfile |
| |
| # some targets have leading underscores on assembly symbols. |
| set additional_flags [gdb_target_symbol_prefix_flags] |
| |
| if {[prepare_for_testing $testfile.exp $testfile $srcfile \ |
| [list debug $additional_flags]]} { |
| return -1 |
| } |
| |
| set end_of_main [gdb_get_line_number " end of main "] |
| set end_sse_test [gdb_get_line_number " end sse_test "] |
| set end_ssse3_test [gdb_get_line_number " end ssse3_test "] |
| set end_sse4_test [gdb_get_line_number " end sse4_test "] |
| |
| runto main |
| |
| if [supports_process_record] { |
| # Activate process record/replay |
| gdb_test_no_output "record" "Turn on process record" |
| } |
| |
| global hex |
| global decimal |
| |
| #sse_test |
| |
| gdb_test "break $end_sse_test" \ |
| "Breakpoint $decimal at .* line $end_sse_test\." \ |
| "set breakpoint at end of sse_test" |
| |
| set test "continue to end of sse_test" |
| gdb_test_multiple "continue" $test { |
| -re " end sse_test .*\r\n$gdb_prompt $" { |
| pass $test |
| } |
| -re " Illegal instruction.*\r\n$gdb_prompt $" { |
| untested i386-sse-reverse |
| return -1 |
| } |
| } |
| |
| gdb_test "reverse-step" "xorps.*" "reverse-step to xorps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \ |
| "verify xmm0 at end of sse_test" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x70004000000000007800400000000000.*" \ |
| "verify xmm1 at end of sse_test" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 at end of sse_test" |
| |
| gdb_test "reverse-step" "xorpd.*" "reverse-step to xorpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xf000c00080008000f800c00080008000.*" \ |
| "verify xmm0 after reverse xorps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \ |
| "verify xmm1 after reverse xorps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse xorps" |
| |
| gdb_test "reverse-step" "unpckhps.*" "reverse-step to unpckhps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x8000800080008000fff00000ffc00000.*" \ |
| "verify xmm0 after reverse xorpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \ |
| "verify xmm1 after reverse xorpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse xorpd" |
| |
| gdb_test "reverse-step" "unpckhpd.*" "reverse-step to unpckhpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse unpckhps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \ |
| "verify xmm1 after reverse unpckhps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse unpckhps" |
| |
| gdb_test "reverse-step" "ucomiss.*" "reverse-step to ucomiss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse unpckhpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \ |
| "verify xmm1 after reverse unpckhpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse unpckhpd" |
| |
| gdb_test "reverse-step" "ucomisd.*" "reverse-step to ucomisd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse ucomiss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x80008000800080008000800080008000.*" \ |
| "verify xmm1 after reverse ucomiss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse ucomiss" |
| |
| gdb_test "reverse-step" "packssdw.*" "reverse-step to packssdw" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse ucomisd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse ucomisd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xf000c000f800c000f000c000f000c000.*" \ |
| "verify xmm2 after reverse ucomisd" |
| |
| gdb_test "reverse-step" "packsswb.*" "reverse-step to packsswb" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse packssdw" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse packssdw" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse packssdw" |
| |
| gdb_test "reverse-step" "orps.*" "reverse-step to orps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse packsswb" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse packsswb" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse packsswb" |
| |
| gdb_test "reverse-step" "orpd.*" "reverse-step to orpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse orps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse orps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse orps" |
| |
| gdb_test "reverse-step" "mulss.*" "reverse-step to mulss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse orpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse orpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse orpd" |
| |
| gdb_test "reverse-step" "mulsd.*" "reverse-step to mulsd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse mulss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse mulss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse mulss" |
| |
| gdb_test "reverse-step" "mulps.*" "reverse-step to mulps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse mulsd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \ |
| "verify xmm1 after reverse mulsd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse mulsd" |
| |
| gdb_test "reverse-step" "mulpd.*" "reverse-step to mulpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse mulps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm1 after reverse mulps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff0000000000000fff00000ffc00000.*" \ |
| "verify xmm2 after reverse mulps" |
| |
| gdb_test "reverse-step" "divss.*" "reverse-step to divss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0000000000000000fff80000ffc00000.*" \ |
| "verify xmm0 after reverse mulpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm1 after reverse mulpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \ |
| "verify xmm2 after reverse mulpd" |
| |
| gdb_test "reverse-step" "divsd.*" "reverse-step to divsd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \ |
| "verify xmm0 after reverse divss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \ |
| "verify xmm1 after reverse divss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \ |
| "verify xmm2 after reverse divss" |
| |
| gdb_test "reverse-step" "divps.*" "reverse-step to divps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \ |
| "verify xmm0 after reverse divsd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x00000000000000000000000080000000.*" \ |
| "verify xmm1 after reverse divsd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xfff0000000000000fff0000000000000.*" \ |
| "verify xmm2 after reverse divsd" |
| |
| gdb_test "reverse-step" "divpd.*" "reverse-step to divpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \ |
| "verify xmm0 after reverse divps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x00000000000000000000000080000000.*" \ |
| "verify xmm1 after reverse divps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \ |
| "verify xmm2 after reverse divps" |
| |
| gdb_test "reverse-step" "cvtpd2ps.*" "reverse-step to cvtpd2ps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x00000000000000008000000080000000.*" \ |
| "verify xmm0 after reverse divpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \ |
| "verify xmm1 after reverse divpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \ |
| "verify xmm2 after reverse divpd" |
| |
| gdb_test "reverse-step" "cvtpd2dq.*" "reverse-step to cvtpd2dq" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \ |
| "verify xmm0 after reverse cvtpd2ps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0xce80200000000000ce80200000000000.*" \ |
| "verify xmm1 after reverse cvtpd2ps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \ |
| "verify xmm2 after reverse cvtpd2ps" |
| |
| gdb_test "reverse-step" "cvtdq2ps.*" "reverse-step to cvtdq2ps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \ |
| "verify xmm0 after reverse cvtpd2dq" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \ |
| "verify xmm1 after reverse cvtpd2dq" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xbff0000000000000bff0000000000000.*" \ |
| "verify xmm2 after reverse cvtpd2dq" |
| |
| gdb_test "reverse-step" "cvtdq2pd.*" "reverse-step to cvtdq2pd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \ |
| "verify xmm0 after reverse cvtdq2ps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \ |
| "verify xmm1 after reverse cvtdq2ps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \ |
| "verify xmm2 after reverse cvtdq2ps" |
| |
| gdb_test "reverse-step" "comiss.*" "reverse-step to comiss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \ |
| "verify xmm0 after reverse cvtdq2pd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \ |
| "verify xmm1 after reverse cvtdq2pd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \ |
| "verify xmm2 after reverse cvtdq2pd" |
| |
| gdb_test "reverse-step" "comisd.*" "reverse-step to comisd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a090807060504ffffffff.*" \ |
| "verify xmm0 after reverse comiss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \ |
| "verify xmm1 after reverse comiss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \ |
| "verify xmm2 after reverse comiss" |
| |
| gdb_test "reverse-step" "cmpss.*" "reverse-step to cmpss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse comisd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0000000000000000ffffffffffffffff.*" \ |
| "verify xmm1 after reverse comisd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \ |
| "verify xmm2 after reverse comisd" |
| |
| gdb_test "reverse-step" "cmpsd.*" "reverse-step to cmpsd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse cmpss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x00000000000000000000000000000000.*" \ |
| "verify xmm1 after reverse cmpss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0xffffffffffffffffffffffff00000000.*" \ |
| "verify xmm2 after reverse cmpss" |
| |
| gdb_test "reverse-step" "cmpps.*" "reverse-step to cmpps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse cmpsd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x00000000000000000000000000000000.*" \ |
| "verify xmm1 after reverse cmpsd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \ |
| "verify xmm2 after reverse cmpsd" |
| |
| gdb_test "reverse-step" "cmppd.*" "reverse-step to cmppd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse cmpps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \ |
| "verify xmm1 after reverse cmpps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \ |
| "verify xmm2 after reverse cmpps" |
| |
| gdb_test "reverse-step" "andps.*" "reverse-step to andps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse cmppd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \ |
| "verify xmm1 after reverse cmppd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x0f0e0d0c0b0a09082726252400000000.*" \ |
| "verify xmm2 after reverse cmppd" |
| |
| gdb_test "reverse-step" "andpd.*" "reverse-step to andpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse andps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252400000000.*" \ |
| "verify xmm1 after reverse andps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse andps" |
| |
| gdb_test "reverse-step" "addsubps.*" "reverse-step to addsubps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse andpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \ |
| "verify xmm1 after reverse andpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse andpd" |
| |
| gdb_test "reverse-step" "addsubpd.*" "reverse-step to addsubpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050423222120.*" \ |
| "verify xmm0 after reverse addsubps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \ |
| "verify xmm1 after reverse addsubps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse addsubps" |
| |
| gdb_test "reverse-step" "addss.*" "reverse-step to addss" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse addsubpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19182726252423222120.*" \ |
| "verify xmm1 after reverse addsubpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse addsubpd" |
| |
| gdb_test "reverse-step" "addsd.*" "reverse-step to addsd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse addss" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse addss" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse addss" |
| |
| gdb_test "reverse-step" "addps.*" "reverse-step to addps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse addsd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse addsd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse addsd" |
| |
| gdb_test "reverse-step" "addpd.*" "reverse-step to addpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse addps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse addps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse addps" |
| |
| |
| #ssse3_test |
| |
| gdb_test "continue" \ |
| " end sse_test .*" \ |
| "continue to end of sse_test #2" |
| |
| gdb_test "break $end_ssse3_test" \ |
| "Breakpoint $decimal at .* line $end_ssse3_test\." \ |
| "set breakpoint at end of ssse3_test" |
| |
| set test "continue to end of ssse3_test" |
| gdb_test_multiple "continue" $test { |
| -re " end ssse3_test .*\r\n$gdb_prompt $" { |
| pass $test |
| } |
| -re " Illegal instruction.*\r\n$gdb_prompt $" { |
| untested i386-ssse3-reverse |
| return -1 |
| } |
| } |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm0 at end of ssse3_test" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 at end of ssse3_test" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm2 at end of ssse3_test" |
| |
| gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse pabsd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse pabsd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm2 after reverse pabsd" |
| |
| gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse pabsw" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse pabsw" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm2 after reverse pabsw" |
| |
| gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse pabsb" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse pabsb" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse pabsb" |
| |
| |
| #sse4_test |
| |
| gdb_test "continue" \ |
| " end ssse3_test .*" \ |
| "continue to end of ssse3_test #2" |
| |
| gdb_test "break $end_sse4_test" \ |
| "Breakpoint $decimal at .* line $end_sse4_test\." \ |
| "set breakpoint at end of sse4_test" |
| |
| set test "continue to end of sse4_test" |
| gdb_test_multiple "continue" $test { |
| -re " end sse4_test .*\r\n$gdb_prompt $" { |
| pass $test |
| } |
| -re " Illegal instruction.*\r\n$gdb_prompt $" { |
| untested i386-sse4-reverse |
| return -1 |
| } |
| } |
| |
| gdb_test "reverse-step" "blendvps.*" "reverse-step to blendvps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09082726252413121110.*" \ |
| "verify xmm0 at end of sse4_test" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 at end of sse4_test" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 at end of sse4_test" |
| |
| gdb_test "reverse-step" "blendvpd.*" "reverse-step to blendvpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09082726252413121110.*" \ |
| "verify xmm0 after reverse blendvps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse blendvps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse blendvps" |
| |
| gdb_test "reverse-step" "blendps.*" "reverse-step to blendps" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09081716151413121110.*" \ |
| "verify xmm0 after reverse blendvpd" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse blendvpd" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse blendvpd" |
| |
| gdb_test "reverse-step" "blendpd.*" "reverse-step to blendpd" |
| |
| gdb_test "info register xmm0" \ |
| "xmm0 .*uint128 = 0x0f0e0d0c0b0a09080706050403020100.*" \ |
| "verify xmm0 after reverse blendps" |
| |
| gdb_test "info register xmm1" \ |
| "xmm1 .*uint128 = 0x1f1e1d1c1b1a19181716151413121110.*" \ |
| "verify xmm1 after reverse blendps" |
| |
| gdb_test "info register xmm2" \ |
| "xmm2 .*uint128 = 0x2f2e2d2c2b2a29282726252423222120.*" \ |
| "verify xmm2 after reverse blendps" |