Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
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: Tue, 30 Mar 2010 12:55:00 -0000	[thread overview]
Message-ID: <daef60381003300554w2e84ad1dn370c1fa7d91ffff0@mail.gmail.com> (raw)
In-Reply-To: <daef60381003292329w255fcf1dmbba54b28d563b932@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1076 bytes --]

On Tue, Mar 30, 2010 at 14:29, Hui Zhu <teawater@gmail.com> wrote:
> On Tue, Mar 30, 2010 at 02:11, Michael Snyder <msnyder@vmware.com> wrote:
>> Hui Zhu wrote:
>>>
>>> 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.
>>
>> Hui,
>>
>> I found out that older versions of GAS require three arguments for blendvps
>> and blendvpd -- and the first argument must be %xmm0.
>>
>> Try this on your machine:
>>
>>
> Thanks Michael.
>
> I think it must because the version of as that we use is different.
> I will try it when I can use my PC that support sse4 insn.
>
> Best regards,
> Hui
>

Hi Michael,

I try this file in the PC that support sse4, it works OK.

I make a new patch include this change.  Please help me review it.

Thanks,
Hui

2010-03-30  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.

[-- Attachment #2: prec-x86-sse-test.txt --]
[-- Type: text/plain, Size: 26870 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 %xmm0, %xmm1, %xmm2");
+  asm ("blendvps %xmm0, %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"

  reply	other threads:[~2010-03-30 12:55 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
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 [this message]
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=daef60381003300554w2e84ad1dn370c1fa7d91ffff0@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