From: Julian Seward Date: Fri, 12 May 2006 14:24:18 +0000 (+0000) Subject: Test x86 {push,pop}{w,l}. X-Git-Tag: svn/VALGRIND_3_2_0~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35b78ba27f029c55a9bd35468d41f188b5b6b672;p=thirdparty%2Fvalgrind.git Test x86 {push,pop}{w,l}. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5891 --- diff --git a/memcheck/tests/x86/Makefile.am b/memcheck/tests/x86/Makefile.am index 9564b005c9..70fe921e8a 100644 --- a/memcheck/tests/x86/Makefile.am +++ b/memcheck/tests/x86/Makefile.am @@ -10,6 +10,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ $(addsuffix .stdout.exp,$(INSN_TESTS)) \ $(addsuffix .vgtest,$(INSN_TESTS)) \ pushfpopf.stderr.exp pushfpopf.stdout.exp pushfpopf.vgtest \ + pushpopmem.stderr.exp pushpopmem.stdout.exp pushpopmem.vgtest \ scalar.stderr.exp scalar.stderr.exp2 scalar.vgtest \ scalar_fork.stderr.exp scalar_fork.vgtest \ scalar_exit_group.stderr.exp scalar_exit_group.stderr.exp2 \ @@ -25,7 +26,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \ check_PROGRAMS = \ scalar_exit_group scalar_fork scalar_supp scalar_vfork \ - fpeflags pushfpopf scalar sse_memory tronical \ + fpeflags pushfpopf pushpopmem scalar sse_memory tronical \ more_x86_fp fprem AM_CPPFLAGS = -I$(top_srcdir)/include diff --git a/memcheck/tests/x86/pushpopmem.c b/memcheck/tests/x86/pushpopmem.c new file mode 100644 index 0000000000..fb122339d9 --- /dev/null +++ b/memcheck/tests/x86/pushpopmem.c @@ -0,0 +1,62 @@ + +#include +#include +#include + +unsigned int do32 ( unsigned int x ) +{ + unsigned int* y = malloc(sizeof(unsigned int)); + unsigned int* z = malloc(sizeof(unsigned int)); + unsigned int t; + assert(y); + assert(z); + y[0] = x; + __asm__ __volatile__( + "pushl %0\n\t" + "pushl %1\n\t" + "popl %%ebx\n\t" + "popl %%eax\n\t" + "pushl 0(%%eax)\n\t" + "popl 0(%%ebx)" + : /*OUT*/ + : /*IN*/ "r"(y), "r"(z) + : /*TRASH*/ "memory", "eax", "ebx" + ); + t = z[0]; + free(y); + free(z); + return t; +} + +unsigned short do16 ( unsigned short x ) +{ + unsigned short* y = malloc(sizeof(unsigned short)); + unsigned short* z = malloc(sizeof(unsigned short)); + unsigned short t; + assert(y); + assert(z); + y[0] = x; + __asm__ __volatile__( + "pushl %0\n\t" + "pushl %1\n\t" + "popl %%ebx\n\t" + "popl %%eax\n\t" + "pushw 0(%%eax)\n\t" + "popw 0(%%ebx)" + : /*OUT*/ + : /*IN*/ "r"(y), "r"(z) + : /*TRASH*/ "memory", "eax", "ebx" + ); + t = z[0]; + free(y); + free(z); + return t; +} + + +int main ( void ) +{ + printf("do32: 0x%08X\n", do32(0xCafeBabe) ); + printf("do16: 0x%08X\n", (unsigned int)do16(0xfeBa) ); + return 0; +} diff --git a/memcheck/tests/x86/pushpopmem.stderr.exp b/memcheck/tests/x86/pushpopmem.stderr.exp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/x86/pushpopmem.stdout.exp b/memcheck/tests/x86/pushpopmem.stdout.exp new file mode 100644 index 0000000000..1dc9138bc7 --- /dev/null +++ b/memcheck/tests/x86/pushpopmem.stdout.exp @@ -0,0 +1,2 @@ +do32: 0xCAFEBABE +do16: 0x0000FEBA diff --git a/memcheck/tests/x86/pushpopmem.vgtest b/memcheck/tests/x86/pushpopmem.vgtest new file mode 100644 index 0000000000..142748ec52 --- /dev/null +++ b/memcheck/tests/x86/pushpopmem.vgtest @@ -0,0 +1,2 @@ +prog: pushpopmem +vgopts: -q