]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Regtest for #135421 (long-form encoding of 'push{l,w} %reg')
authorJulian Seward <jseward@acm.org>
Sat, 18 Nov 2006 23:00:23 +0000 (23:00 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 18 Nov 2006 23:00:23 +0000 (23:00 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6360

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

index f73ea835c399bc9f85fd72e5b5dd6bdb452e1a4e..710e979425a6feb9f4a070c265f40b342c4a0964 100644 (file)
@@ -11,6 +11,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        bug125959-x86.stderr.exp bug125959-x86.stdout.exp bug125959-x86.vgtest \
        bug126147-x86.stderr.exp bug126147-x86.stdout.exp bug126147-x86.vgtest \
        bug132813-x86.stderr.exp bug132813-x86.stdout.exp bug132813-x86.vgtest \
+       bug135421-x86.stderr.exp bug135421-x86.stdout.exp bug135421-x86.vgtest \
        cpuid.stderr.exp cpuid.stdout.exp cpuid.vgtest \
        cmpxchg8b.stderr.exp cmpxchg8b.stdout.exp cmpxchg8b.vgtest \
        faultstatus.disabled faultstatus.stderr.exp \
@@ -40,6 +41,7 @@ check_PROGRAMS = \
        bug125959-x86 \
        bug126147-x86 \
        bug132813-x86 \
+       bug135421-x86 \
        cmpxchg8b cpuid \
        faultstatus fcmovnu fpu_lazy_eflags fxtract \
        getseg incdec_alt $(INSN_TESTS) \
diff --git a/none/tests/x86/bug135421-x86.c b/none/tests/x86/bug135421-x86.c
new file mode 100644 (file)
index 0000000..48a245e
--- /dev/null
@@ -0,0 +1,29 @@
+
+/* Test for long-form encodings of push %reg */
+
+#include <stdio.h>
+
+int foo ( int x )
+{
+  int block[2];
+  block[0] = x;
+  block[1] = 0;
+  __asm__ __volatile__(
+    "movl $0,%%edi\n\t"
+    "movl $0,%%esi\n\t"
+    "movl %0,%%edi\n\t"
+    ".byte   0xFF,0xF7\n\t" /*pushl %edi */
+    "popl %%esi\n\t"
+    "movl %%esi, %1"
+    : : /*in*/ "m"(block[0]), "m"(block[1]) : "esi","edi","memory"
+  );
+  return block[1]; 
+}
+
+int main ( void )
+{
+  int i;
+  for (i = 0; i < 100000000; i += 11111111)
+    printf("%d %d\n",i,foo(i));
+  return 0;
+}
diff --git a/none/tests/x86/bug135421-x86.stderr.exp b/none/tests/x86/bug135421-x86.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/x86/bug135421-x86.stdout.exp b/none/tests/x86/bug135421-x86.stdout.exp
new file mode 100644 (file)
index 0000000..c345d3e
--- /dev/null
@@ -0,0 +1,10 @@
+0 0
+11111111 11111111
+22222222 22222222
+33333333 33333333
+44444444 44444444
+55555555 55555555
+66666666 66666666
+77777777 77777777
+88888888 88888888
+99999999 99999999
diff --git a/none/tests/x86/bug135421-x86.vgtest b/none/tests/x86/bug135421-x86.vgtest
new file mode 100644 (file)
index 0000000..8102c22
--- /dev/null
@@ -0,0 +1 @@
+prog: bug135421-x86