|
From: Nicholas N. <nj...@ca...> - 2004-10-19 16:29:35
|
CVS commit by nethercote:
Arch-abstraction:
- Rewrote tests/cputest.c so that it can apply to different kinds of
processors. The idea being that any arch-specific tests have a cpu_test:
label in their .vgtest file, so they'll only get executed if the right
machine is being used.
- Rewrote a bunch of .vgtest files accordingly.
M +1 -1 addrcheck/tests/insn_cmov.vgtest 1.2
M +1 -1 addrcheck/tests/insn_fpu.vgtest 1.2
M +1 -1 addrcheck/tests/insn_mmx.vgtest 1.2
M +1 -1 addrcheck/tests/insn_mmxext.vgtest 1.2
M +1 -1 addrcheck/tests/insn_sse.vgtest 1.2
M +1 -1 addrcheck/tests/insn_sse2.vgtest 1.2
M +1 -1 cachegrind/tests/insn_cmov.vgtest 1.3
M +1 -1 cachegrind/tests/insn_fpu.vgtest 1.3
M +1 -1 cachegrind/tests/insn_mmx.vgtest 1.3
M +1 -1 cachegrind/tests/insn_mmxext.vgtest 1.3
M +1 -1 cachegrind/tests/insn_sse.vgtest 1.3
M +1 -1 cachegrind/tests/insn_sse2.vgtest 1.3
M +1 -1 helgrind/tests/insn_cmov.vgtest 1.2
M +1 -1 helgrind/tests/insn_fpu.vgtest 1.2
M +1 -1 helgrind/tests/insn_mmx.vgtest 1.2
M +1 -1 helgrind/tests/insn_mmxext.vgtest 1.2
M +1 -1 helgrind/tests/insn_sse.vgtest 1.2
M +1 -1 helgrind/tests/insn_sse2.vgtest 1.2
M +1 -1 memcheck/tests/insn_cmov.vgtest 1.2
M +1 -1 memcheck/tests/insn_fpu.vgtest 1.2
M +1 -1 memcheck/tests/insn_mmx.vgtest 1.2
M +1 -1 memcheck/tests/insn_mmxext.vgtest 1.2
M +1 -1 memcheck/tests/insn_sse.vgtest 1.2
M +1 -1 memcheck/tests/insn_sse2.vgtest 1.2
M +1 -1 none/tests/insn_cmov.vgtest 1.2
M +1 -1 none/tests/insn_fpu.vgtest 1.2
M +1 -1 none/tests/insn_mmx.vgtest 1.2
M +1 -1 none/tests/insn_mmxext.vgtest 1.2
M +1 -1 none/tests/insn_sse.vgtest 1.2
M +1 -1 none/tests/insn_sse2.vgtest 1.2
M +1 -0 tests/Makefile.am 1.37
M +53 -36 tests/cputest.c 1.4 [POSSIBLY UNSAFE: printf]
--- valgrind/addrcheck/tests/insn_cmov.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_cmov
-cpu_test: cmov
+cpu_test: x86-cmov
--- valgrind/addrcheck/tests/insn_fpu.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_fpu
-cpu_test: fpu
+cpu_test: x86-fpu
--- valgrind/addrcheck/tests/insn_mmx.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmx
-cpu_test: mmx
+cpu_test: x86-mmx
--- valgrind/addrcheck/tests/insn_mmxext.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmxext
-cpu_test: mmxext
+cpu_test: x86-mmxext
--- valgrind/addrcheck/tests/insn_sse.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse
-cpu_test: sse
+cpu_test: x86-sse
--- valgrind/addrcheck/tests/insn_sse2.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse2
-cpu_test: sse2
+cpu_test: x86-sse2
--- valgrind/cachegrind/tests/insn_cmov.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_cmov
-cpu_test: cmov
+cpu_test: x86-cmov
delete: cachegrind.out.*
--- valgrind/cachegrind/tests/insn_fpu.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_fpu
-cpu_test: fpu
+cpu_test: x86-fpu
delete: cachegrind.out.*
--- valgrind/cachegrind/tests/insn_mmx.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_mmx
-cpu_test: mmx
+cpu_test: x86-mmx
delete: cachegrind.out.*
--- valgrind/cachegrind/tests/insn_mmxext.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_mmxext
-cpu_test: mmxext
+cpu_test: x86-mmxext
delete: cachegrind.out.*
--- valgrind/cachegrind/tests/insn_sse.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_sse
-cpu_test: sse
+cpu_test: x86-sse
delete: cachegrind.out.*
--- valgrind/cachegrind/tests/insn_sse2.vgtest #1.2:1.3
@@ -1,4 +1,4 @@
vgopts: -q
prog: ../../none/tests/insn_sse2
-cpu_test: sse2
+cpu_test: x86-sse2
delete: cachegrind.out.*
--- valgrind/helgrind/tests/insn_cmov.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_cmov
-cpu_test: cmov
+cpu_test: x86-cmov
--- valgrind/helgrind/tests/insn_fpu.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_fpu
-cpu_test: fpu
+cpu_test: x86-fpu
--- valgrind/helgrind/tests/insn_mmx.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmx
-cpu_test: mmx
+cpu_test: x86-mmx
--- valgrind/helgrind/tests/insn_mmxext.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmxext
-cpu_test: mmxext
+cpu_test: x86-mmxext
--- valgrind/helgrind/tests/insn_sse.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse
-cpu_test: sse
+cpu_test: x86-sse
--- valgrind/helgrind/tests/insn_sse2.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse2
-cpu_test: sse2
+cpu_test: x86-sse2
--- valgrind/memcheck/tests/insn_cmov.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_cmov
-cpu_test: cmov
+cpu_test: x86-cmov
--- valgrind/memcheck/tests/insn_fpu.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_fpu
-cpu_test: fpu
+cpu_test: x86-fpu
--- valgrind/memcheck/tests/insn_mmx.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmx
-cpu_test: mmx
+cpu_test: x86-mmx
--- valgrind/memcheck/tests/insn_mmxext.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_mmxext
-cpu_test: mmxext
+cpu_test: x86-mmxext
--- valgrind/memcheck/tests/insn_sse.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse
-cpu_test: sse
+cpu_test: x86-sse
--- valgrind/memcheck/tests/insn_sse2.vgtest #1.1:1.2
@@ -1,3 +1,3 @@
vgopts: -q
prog: ../../none/tests/insn_sse2
-cpu_test: sse2
+cpu_test: x86-sse2
--- valgrind/none/tests/insn_cmov.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_cmov
-cpu_test: cmov
+cpu_test: x86-cmov
--- valgrind/none/tests/insn_fpu.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_fpu
-cpu_test: fpu
+cpu_test: x86-fpu
--- valgrind/none/tests/insn_mmx.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_mmx
-cpu_test: mmx
+cpu_test: x86-mmx
--- valgrind/none/tests/insn_mmxext.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_mmxext
-cpu_test: mmxext
+cpu_test: x86-mmxext
--- valgrind/none/tests/insn_sse.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_sse
-cpu_test: sse
+cpu_test: x86-sse
--- valgrind/none/tests/insn_sse2.vgtest #1.1:1.2
@@ -1,2 +1,2 @@
prog: insn_sse2
-cpu_test: sse2
+cpu_test: x86-sse2
--- valgrind/tests/Makefile.am #1.36:1.37
@@ -22,4 +22,5 @@
# generic C ones
cputest_SOURCES = cputest.c
+cputest_CFLAGS = $(AM_CFLAGS) -D__$(VG_ARCH)__
toobig_allocs_SOURCES = toobig-allocs.c
true_SOURCES = true.c
--- valgrind/tests/cputest.c #1.3:1.4
@@ -3,4 +3,7 @@
#include <string.h>
+// We return 0 if the machine matches the asked-for cpu, 1 otherwise.
+
+#ifdef __x86__
static __inline__ void cpuid(unsigned int n,
unsigned int *a, unsigned int *b,
@@ -14,38 +17,31 @@ static __inline__ void cpuid(unsigned in
}
-int main(int argc, char **argv)
+static int go(char* cpu)
{
- unsigned int level = 0;
- unsigned int mask = 0;
- unsigned int a;
- unsigned int b;
- unsigned int c;
- unsigned int d;
+ unsigned int level = 0, mask = 0, a, b, c, d;
- if ( argc == 2 ) {
- if ( strcmp( argv[1], "fpu" ) == 0 ) {
+ if ( strcmp( cpu, "x86" ) == 0 ) {
level = 1;
mask = 1 << 0;
- } else if ( strcmp( argv[1], "cmov" ) == 0 ) {
+ } else if ( strcmp( cpu, "x86-fpu" ) == 0 ) {
+ level = 1;
+ mask = 1 << 0;
+ } else if ( strcmp( cpu, "x86-cmov" ) == 0 ) {
level = 1;
mask = 1 << 15;
- } else if ( strcmp( argv[1], "mmx" ) == 0 ) {
+ } else if ( strcmp( cpu, "x86-mmx" ) == 0 ) {
level = 1;
mask = 1 << 23;
- } else if ( strcmp( argv[1], "mmxext" ) == 0 ) {
+ } else if ( strcmp( cpu, "x86-mmxext" ) == 0 ) {
level = 0x80000001;
mask = 1 << 22;
- } else if ( strcmp( argv[1], "sse" ) == 0 ) {
+ } else if ( strcmp( cpu, "x86-sse" ) == 0 ) {
level = 1;
mask = 1 << 25;
- } else if ( strcmp( argv[1], "sse2" ) == 0 ) {
+ } else if ( strcmp( cpu, "x86-sse2" ) == 0 ) {
level = 1;
mask = 1 << 26;
- }
- }
-
- if ( level == 0 || mask == 0 ) {
- fprintf( stderr, "usage: cputest [cmov|mmx|mmxext|sse|sse2]\n" );
- exit( 1 );
+ } else {
+ return 1;
}
@@ -55,7 +51,28 @@ int main(int argc, char **argv)
cpuid( level, &a, &b, &c, &d );
- if ( ( d & mask ) != 0 ) exit( 0 );
+ if ( ( d & mask ) != 0 ) return 0;
}
+ return 1;
+}
+#endif // __x86__
+
+#ifdef __ppc__
+static int go(char* cpu)
+{
+ if ( strcmp( cpu, "ppc" ) == 0 )
+ return 0;
+ else
+ return 1;
+}
+#endif // __ppc__
+
+
+int main(int argc, char **argv)
+{
+ if ( argc != 2 ) {
+ fprintf( stderr, "usage: cputest <cpu-type>\n" );
exit( 1 );
+ }
+ return go( argv[1] );
}
|