Test x86 {push,pop}{w,l}.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5891
This commit is contained in:
Julian Seward 2006-05-12 14:24:18 +00:00
parent a50c624ded
commit 35b78ba27f
5 changed files with 68 additions and 1 deletions

View File

@ -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

View File

@ -0,0 +1,62 @@
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
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;
}

View File

View File

@ -0,0 +1,2 @@
do32: 0xCAFEBABE
do16: 0x0000FEBA

View File

@ -0,0 +1,2 @@
prog: pushpopmem
vgopts: -q