mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Test x86 {push,pop}{w,l}.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5891
This commit is contained in:
parent
a50c624ded
commit
35b78ba27f
@ -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
|
||||
|
||||
62
memcheck/tests/x86/pushpopmem.c
Normal file
62
memcheck/tests/x86/pushpopmem.c
Normal 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;
|
||||
}
|
||||
0
memcheck/tests/x86/pushpopmem.stderr.exp
Normal file
0
memcheck/tests/x86/pushpopmem.stderr.exp
Normal file
2
memcheck/tests/x86/pushpopmem.stdout.exp
Normal file
2
memcheck/tests/x86/pushpopmem.stdout.exp
Normal file
@ -0,0 +1,2 @@
|
||||
do32: 0xCAFEBABE
|
||||
do16: 0x0000FEBA
|
||||
2
memcheck/tests/x86/pushpopmem.vgtest
Normal file
2
memcheck/tests/x86/pushpopmem.vgtest
Normal file
@ -0,0 +1,2 @@
|
||||
prog: pushpopmem
|
||||
vgopts: -q
|
||||
Loading…
x
Reference in New Issue
Block a user