From: Hui Zhu <teawater@gmail.com>
To: Michael Snyder <msnyder@vmware.com>
Cc: Joel Brobecker <brobecker@adacore.com>,
gdb-patches ml <gdb-patches@sourceware.org>
Subject: Re: [RFA/i386] Prec x86 MMX 3DNow! SSE SSE2 SSE3 SSSE3 SSE4 support
Date: Mon, 29 Mar 2010 13:21:00 -0000 [thread overview]
Message-ID: <daef60381003290620j6a563a26y7d041209741843fa@mail.gmail.com> (raw)
In-Reply-To: <daef60381003281922g997c37cldc2ee2c3d424d066@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1355 bytes --]
Hi Michael,
I make a new testsuite that can support sse and sse4 better.
When the pc doesn't support sse4 insn, the test will skip the sse4 insn test.
Please help me review it.
Thanks,
Hui
2010-03-29 Hui Zhu <teawater@gmail.com>
Michael Snyder <msnyder@vmware.com>
* gdb.reverse/i386-sse-reverse.exp: New file.
* gdb.reverse/i386-sse-reverse.c: New file.
On Mon, Mar 29, 2010 at 10:22, Hui Zhu <teawater@gmail.com> wrote:
> On Mon, Mar 29, 2010 at 09:40, Michael Snyder <msnyder@vmware.com> wrote:
>> Hui Zhu wrote:
>>>
>>> Hello,
>>>
>>> I make a testsute for sse. I make it just support x86-64 target
>>> because I got insn unsupport trap in a x86-32 pc. Maybe the CPU of
>>> this pc is too old. :)
>>>
>>> And I found some bug in sse patch. I make a new one.
>>>
>>> Please help me review them. Thanks.
>>
>> I also got a SIGILL here:
>>
>> Program received signal SIGILL, Illegal instruction.
>> sse_test () at
>> /data/home/msnyder/cvs/localhost/src/gdb/testsuite/gdb.reverse/i386-sse-reverse.c:42^M
>> 42 asm ("blendpd $1, %xmm1, %xmm0");
>> (gdb) FAIL: gdb.reverse/i386-sse-reverse.exp: continue to sse_test
>>
>>
>>
> I got it in an PC too. Looks these CPUs donn't support SSE4. It
> works OK in a new PC.
>
> Do you think we need remove it?
>
> Thanks,
> Hui
>
[-- Attachment #2: prec-x86-sse-test.txt --]
[-- Type: text/plain, Size: 26856 bytes --]
---
testsuite/gdb.reverse/i386-sse-reverse.c | 101 ++++
testsuite/gdb.reverse/i386-sse-reverse.exp | 705 +++++++++++++++++++++++++++++
2 files changed, 806 insertions(+)
--- /dev/null
+++ b/testsuite/gdb.reverse/i386-sse-reverse.c
@@ -0,0 +1,101 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2009, 2010 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/>. */
+
+/* Architecture tests for intel i386 platform. */
+
+void
+sse_test (void)
+{
+ char buf0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15};
+ char buf1[] = {16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31};
+ char buf2[] = {32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47};
+
+ asm ("movupd %0, %%xmm0":"=m"(buf0));
+ asm ("movupd %0, %%xmm1":"=m"(buf1));
+ asm ("movupd %0, %%xmm2":"=m"(buf2));
+
+ asm ("addpd %xmm0, %xmm1");
+ asm ("addps %xmm1, %xmm2");
+ asm ("addsd %xmm2, %xmm1");
+ asm ("addss %xmm1, %xmm0");
+ asm ("addsubpd %xmm0, %xmm2");
+ asm ("addsubps %xmm0, %xmm1");
+ asm ("andpd %xmm1, %xmm2");
+ asm ("andps %xmm2, %xmm1");
+ asm ("cmppd $3, %xmm0, %xmm1");
+ asm ("cmpps $4, %xmm1, %xmm2");
+ asm ("cmpsd $5, %xmm2, %xmm1");
+ asm ("cmpss $6, %xmm1, %xmm0");
+ asm ("comisd %xmm0, %xmm2");
+ asm ("comiss %xmm0, %xmm1");
+ asm ("cvtdq2pd %xmm1, %xmm2");
+ asm ("cvtdq2ps %xmm2, %xmm1");
+ asm ("cvtpd2dq %xmm1, %xmm0");
+ asm ("cvtpd2ps %xmm0, %xmm1");
+ asm ("divpd %xmm1, %xmm2");
+ asm ("divps %xmm2, %xmm1");
+ asm ("divsd %xmm1, %xmm0");
+ asm ("divss %xmm0, %xmm2");
+ asm ("mulpd %xmm0, %xmm1");
+ asm ("mulps %xmm1, %xmm2");
+ asm ("mulsd %xmm2, %xmm1");
+ asm ("mulss %xmm1, %xmm0");
+ asm ("orpd %xmm2, %xmm0");
+ asm ("orps %xmm0, %xmm1");
+ asm ("pabsb %xmm1, %xmm2");
+ asm ("pabsw %xmm2, %xmm1");
+ asm ("pabsd %xmm1, %xmm0");
+ asm ("packsswb %xmm0, %xmm2");
+ asm ("packssdw %xmm0, %xmm1");
+ asm ("ucomisd %xmm1, %xmm2");
+ asm ("ucomiss %xmm2, %xmm1");
+ asm ("unpckhpd %xmm1, %xmm0");
+ asm ("unpckhps %xmm2, %xmm0");
+ asm ("xorpd %xmm0, %xmm1");
+ asm ("xorps %xmm1, %xmm2");
+} /* end sse_test */
+
+void
+sse4_test (void)
+{
+ char buf0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,
+ 9, 10, 11, 12, 13, 14, 15};
+ char buf1[] = {16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31};
+ char buf2[] = {32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47};
+
+ asm ("movupd %0, %%xmm0":"=m"(buf0));
+ asm ("movupd %0, %%xmm1":"=m"(buf1));
+ asm ("movupd %0, %%xmm2":"=m"(buf2));
+
+ asm ("blendpd $1, %xmm1, %xmm0");
+ asm ("blendps $2, %xmm2, %xmm0");
+ asm ("blendvpd %xmm1, %xmm2");
+ asm ("blendvps %xmm2, %xmm1");
+} /* end sse4_test */
+
+int
+main ()
+{
+ sse_test ();
+ sse4_test ();
+ return 0; /* end of main */
+}
--- /dev/null
+++ b/testsuite/gdb.reverse/i386-sse-reverse.exp
@@ -0,0 +1,705 @@
+# Copyright 2009, 2010 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 ![target_info exists gdb,can_reverse] {
+ return
+}
+
+if $tracelevel {
+ strace $tracelevel
+}
+
+set prms_id 0
+set bug_id 0
+
+if ![istarget "*86*-*linux*"] then {
+ verbose "Skipping i386 reverse tests."
+ return
+}
+
+set testfile "i386-sse-reverse"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+# some targets have leading underscores on assembly symbols.
+# TODO: detect this automatically
+set additional_flags ""
+if [istarget "i?86-*-cygwin*"] then {
+ set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\""
+}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug $additional_flags]] != "" } {
+ untested i386-sse-reverse
+ 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_sse4_test [gdb_get_line_number " end sse4_test "]
+
+# Get things started.
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+runto main
+
+if [target_info exists gdb,use_precord] {
+ # Activate process record/replay
+ gdb_test "record" "" "Turn on process record"
+ # FIXME: command ought to acknowledge, so we can test if it succeeded.
+}
+
+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"
+
+gdb_test "continue" \
+ " end sse_test .*" \
+ "continue to end of sse_test"
+
+gdb_test "reverse-step" "xorps.*" "reverse-step to xorps"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
+ "verify xmm0 at end of sse_test"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x00ff00ff0000000000ff00ff00000000.*" \
+ "verify xmm1 at end of sse_test"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 at end of sse_test"
+
+gdb_test "reverse-step" "xorpd.*" "reverse-step to xorpd"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x7f007f007fff7fff7f007f007fff7fff.*" \
+ "verify xmm0 after reverse xorps"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+ "verify xmm1 after reverse xorps"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse xorps"
+
+gdb_test "reverse-step" "unpckhps.*" "reverse-step to unpckhps"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x7fff7fff7fff7fff0108000001400000.*" \
+ "verify xmm0 after reverse xorpd"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+ "verify xmm1 after reverse xorpd"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse xorpd"
+
+gdb_test "reverse-step" "unpckhpd.*" "reverse-step to unpckhpd"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm0 after reverse unpckhps"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+ "verify xmm1 after reverse unpckhps"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse unpckhps"
+
+gdb_test "reverse-step" "ucomiss.*" "reverse-step to ucomiss"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm0 after reverse unpckhpd"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+ "verify xmm1 after reverse unpckhpd"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse unpckhpd"
+
+gdb_test "reverse-step" "ucomisd.*" "reverse-step to ucomisd"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm0 after reverse ucomiss"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x7fff7fff7fff7fff7fff7fff7fff7fff.*" \
+ "verify xmm1 after reverse ucomiss"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse ucomiss"
+
+gdb_test "reverse-step" "packssdw.*" "reverse-step to packssdw"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm0 after reverse ucomisd"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm1 after reverse ucomisd"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x7f007f007f007f007f007f007f007f00.*" \
+ "verify xmm2 after reverse ucomisd"
+
+gdb_test "reverse-step" "packsswb.*" "reverse-step to packsswb"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm0 after reverse packssdw"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm1 after reverse packssdw"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm2 after reverse packssdw"
+
+gdb_test "reverse-step" "pabsd.*" "reverse-step to pabsd"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
+ "verify xmm0 after reverse packsswb"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm1 after reverse packsswb"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm2 after reverse packsswb"
+
+gdb_test "reverse-step" "pabsw.*" "reverse-step to pabsw"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
+ "verify xmm0 after reverse pabsd"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
+ "verify xmm1 after reverse pabsd"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0x01080000014000000108000001400000.*" \
+ "verify xmm2 after reverse pabsd"
+
+gdb_test "reverse-step" "pabsb.*" "reverse-step to pabsb"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
+ "verify xmm0 after reverse pabsw"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
+ "verify xmm1 after reverse pabsw"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
+ "verify xmm2 after reverse pabsw"
+
+gdb_test "reverse-step" "orps.*" "reverse-step to orps"
+
+gdb_test "info register xmm0" \
+ "xmm0 .*uint128 = 0xfff00000ffc00000fff80000ffc00000.*" \
+ "verify xmm0 after reverse pabsb"
+
+gdb_test "info register xmm1" \
+ "xmm1 .*uint128 = 0xfff80000ffc00000fff80000ffc00000.*" \
+ "verify xmm1 after reverse pabsb"
+
+gdb_test "info register xmm2" \
+ "xmm2 .*uint128 = 0xfff00000ffc00000fff00000ffc00000.*" \
+ "verify xmm2 after reverse pabsb"
+
+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"
+
+
+#sse4_test
+
+send_gdb "continue\n"
+
+gdb_test "break $end_sse4_test" \
+ "Breakpoint $decimal at .* line $end_sse4_test\." \
+ "set breakpoint at end of sse4_test"
+
+send_gdb "continue\n"
+gdb_expect {
+ -re " end sse4_test .*" {
+ pass "continue to end of sse4_test"
+ }
+ -re " Illegal instruction.*" {
+ 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"
next prev parent reply other threads:[~2010-03-29 13:21 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-07 15:00 [RFA] " Hui Zhu
2009-12-07 16:54 ` Michael Snyder
2009-12-07 17:16 ` Michael Snyder
2009-12-07 17:43 ` Joel Brobecker
2009-12-07 17:54 ` Michael Snyder
2009-12-07 18:00 ` Joel Brobecker
2009-12-07 18:05 ` Michael Snyder
2009-12-08 5:51 ` Hui Zhu
2009-12-08 19:56 ` Michael Snyder
2009-12-07 18:08 ` Doug Evans
2009-12-08 17:43 ` Tom Tromey
2009-12-10 19:52 ` Michael Snyder
2009-12-11 15:00 ` Hui Zhu
2009-12-13 4:28 ` Hui Zhu
2009-12-13 10:35 ` Hui Zhu
2009-12-14 18:24 ` Michael Snyder
2009-12-15 1:47 ` Hui Zhu
2009-12-18 19:44 ` Michael Snyder
2010-01-08 16:07 ` Hui Zhu
2010-01-08 18:45 ` Michael Snyder
2010-01-09 12:28 ` [RFA/i386] " Joel Brobecker
2010-01-11 2:48 ` Hui Zhu
2010-01-11 4:05 ` Joel Brobecker
2010-01-12 1:38 ` Michael Snyder
2010-03-28 16:27 ` Hui Zhu
2010-03-29 1:35 ` Michael Snyder
2010-03-29 1:36 ` Michael Snyder
2010-03-29 9:25 ` Hui Zhu
2010-03-29 1:40 ` Michael Snyder
2010-03-29 2:23 ` Hui Zhu
2010-03-29 13:21 ` Hui Zhu [this message]
2010-03-29 17:52 ` Michael Snyder
2010-03-29 18:11 ` Michael Snyder
2010-03-30 6:29 ` Hui Zhu
2010-03-30 12:55 ` Hui Zhu
2010-04-01 15:36 ` Hui Zhu
2010-04-01 21:50 ` Michael Snyder
2010-04-02 5:14 ` Hui Zhu
2010-03-29 2:18 ` Michael Snyder
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=daef60381003290620j6a563a26y7d041209741843fa@mail.gmail.com \
--to=teawater@gmail.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=msnyder@vmware.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox