]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
64-bit regtest for #132813 (Assertion at priv/guest-x86/toIR.c:652 fails)
authorJulian Seward <jseward@acm.org>
Mon, 28 Aug 2006 18:53:25 +0000 (18:53 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 28 Aug 2006 18:53:25 +0000 (18:53 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6035

none/tests/amd64/Makefile.am
none/tests/amd64/bug132813-amd64.c [new file with mode: 0644]
none/tests/amd64/bug132813-amd64.stderr.exp [new file with mode: 0644]
none/tests/amd64/bug132813-amd64.stdout.exp [new file with mode: 0644]
none/tests/amd64/bug132813-amd64.vgtest [new file with mode: 0644]

index 8cd9eaad3951b97a9561125a4e22c7d677277052..797a89b427a1ee8735dd7b1e923a8b7f798bb703 100644 (file)
@@ -6,6 +6,8 @@ INSN_TESTS = insn_basic insn_mmx insn_sse insn_sse2 insn_sse3 insn_fpu
 
 EXTRA_DIST = $(noinst_SCRIPTS) \
        bug127521-64.vgtest bug127521-64.stdout.exp bug127521-64.stderr.exp \
+       bug132813-amd64.vgtest bug132813-amd64.stdout.exp \
+       bug132813-amd64.stderr.exp \
        clc.vgtest clc.stdout.exp clc.stderr.exp \
        faultstatus.disabled faultstatus.stderr.exp \
        fcmovnu.vgtest fcmovnu.stderr.exp fcmovnu.stdout.exp \
@@ -22,7 +24,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
 
 
 check_PROGRAMS = \
-       bug127521-64 \
+       bug127521-64 bug132813-amd64 \
        clc \
        faultstatus fcmovnu fxtract $(INSN_TESTS) looper jrcxz smc1 shrld \
        nibz_bennee_mmap
diff --git a/none/tests/amd64/bug132813-amd64.c b/none/tests/amd64/bug132813-amd64.c
new file mode 100644 (file)
index 0000000..99bd3cb
--- /dev/null
@@ -0,0 +1,170 @@
+
+#include <stdio.h>
+
+void do_pushb_pos ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      ".byte 0x6A,0x22\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushb_pos: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_pushb_neg ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      ".byte 0x6A,0xEE\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushb_neg: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_pushw_pos ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      "pushw $0x3344\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushw_neg: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_pushw_neg ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      "pushw $0xDDCC\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushw_pos: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_pushq_pos ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      "pushq $0x67675656\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushq_pos: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_pushq_neg ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      "pushq $0x78988787\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("  pushq_neg: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+
+void do_66pushb_pos ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      ".byte 0x66,0x6A,0x22\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("66pushb_pos: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+void do_66pushb_neg ( void )
+{
+   unsigned long long int block[3];
+   __asm__ __volatile__ (
+      "movq  %0, %%rdx\n\t"
+      "pushq $0x55555555\n\t"
+      "movq  %%rsp, 0(%%rdx)\n\t"
+      ".byte 0x66,0x6A,0xEE\n\t"
+      "movq  %%rsp, 8(%%rdx)\n\t"
+      "popq  %%rax\n\t"
+      "movq  %%rax,16(%%rdx)\n\t"
+      "movq  0(%%rdx),%%rsp\n\t"
+      "addq  $8, %%rsp"
+      : : "r"(&block) : "rax","rdx","cc","memory"
+    );
+    printf("66pushb_neg: delta %lld, top64 0x%016llx\n",
+           block[0] - block[1], block[2]);
+}
+
+
+int main ( void )
+{
+  do_pushb_pos();
+  do_pushb_neg();
+  do_pushw_pos();
+  do_pushw_neg();
+  do_pushq_pos();
+  do_pushq_neg();
+
+  do_66pushb_pos();
+  do_66pushb_neg();
+  return 0;
+}
diff --git a/none/tests/amd64/bug132813-amd64.stderr.exp b/none/tests/amd64/bug132813-amd64.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/amd64/bug132813-amd64.stdout.exp b/none/tests/amd64/bug132813-amd64.stdout.exp
new file mode 100644 (file)
index 0000000..91538ca
--- /dev/null
@@ -0,0 +1,8 @@
+  pushb_pos: delta 8, top64 0x0000000000000022
+  pushb_neg: delta 8, top64 0xffffffffffffffee
+  pushw_neg: delta 2, top64 0x0000555555553344
+  pushw_pos: delta 2, top64 0x000055555555ddcc
+  pushq_pos: delta 8, top64 0x0000000067675656
+  pushq_neg: delta 8, top64 0x0000000078988787
+66pushb_pos: delta 2, top64 0x0000555555550022
+66pushb_neg: delta 2, top64 0x000055555555ffee
diff --git a/none/tests/amd64/bug132813-amd64.vgtest b/none/tests/amd64/bug132813-amd64.vgtest
new file mode 100644 (file)
index 0000000..8960265
--- /dev/null
@@ -0,0 +1 @@
+prog: bug132813-amd64