Increase test coverage on OS X, by re-enabling the none/tests/*/movbe regression tests with a handy memalign() shim.
n-i-bz
$ perl tests/vg_regtest none/tests/x86/movbe none/tests/amd64/movbe
movbe: valgrind -q ./movbe
movbe: valgrind -q ./movbe
== 2 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
On OS X 10.10
Before:
== 592 tests, 215 stderr failures, 9 stdout failures, 0 stderrB failures, 0 stdoutB failures, 30 post failures ==
After:
== 594 tests, 215 stderr failures, 9 stdout failures, 0 stderrB failures, 0 stdoutB failures, 30 post failures ==
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15549 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/none/tests/amd64/Makefile.am b/none/tests/amd64/Makefile.am
index 53acc50..e1fff6c 100644
--- a/none/tests/amd64/Makefile.am
+++ b/none/tests/amd64/Makefile.am
@@ -111,6 +111,9 @@
if BUILD_LZCNT_TESTS
check_PROGRAMS += lzcnt64
endif
+if BUILD_MOVBE_TESTS
+ check_PROGRAMS += movbe
+endif
if BUILD_SSE42_TESTS
check_PROGRAMS += \
pcmpstr64 pcmpxstrx64 sse4-64 crc32 aes \
@@ -144,9 +147,6 @@
if BUILD_LOOPNEL_TESTS
check_PROGRAMS += loopnel
endif
-if BUILD_MOVBE_TESTS
- check_PROGRAMS += movbe
-endif
if BUILD_AVX_TESTS
if BUILD_VPCLMULQDQ_TESTS
check_PROGRAMS += avx-1
diff --git a/none/tests/amd64/movbe.c b/none/tests/amd64/movbe.c
index 4b23696..603e140 100644
--- a/none/tests/amd64/movbe.c
+++ b/none/tests/amd64/movbe.c
@@ -2,7 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
typedef unsigned char UChar;
typedef unsigned int UInt;
@@ -43,7 +43,7 @@
\
__attribute__ ((noinline)) static void test_##_name ( void ) \
{ \
- Block* b = memalign(32, sizeof(Block)); \
+ Block* b = memalign32(sizeof(Block)); \
randBlock(b); \
printf("%s\n", #_name); \
showBlock("before", b); \
diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am
index b0d10ef..15d1e3e 100644
--- a/none/tests/x86/Makefile.am
+++ b/none/tests/x86/Makefile.am
@@ -119,10 +119,10 @@
if BUILD_LZCNT_TESTS
check_PROGRAMS += lzcnt32
endif
-if !VGCONF_OS_IS_DARWIN
if BUILD_MOVBE_TESTS
- check_PROGRAMS += movbe
+ check_PROGRAMS += movbe
endif
+if !VGCONF_OS_IS_DARWIN
if !SOLARIS_SUN_STUDIO_AS
# Sun Studio assembler fails to assemble the bound instruction
check_PROGRAMS += faultstatus
diff --git a/none/tests/x86/movbe.c b/none/tests/x86/movbe.c
index d4f4953..8821462 100644
--- a/none/tests/x86/movbe.c
+++ b/none/tests/x86/movbe.c
@@ -2,7 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
-#include <malloc.h>
+#include "tests/malloc.h"
typedef unsigned char UChar;
typedef unsigned int UInt;
@@ -43,7 +43,7 @@
\
__attribute__ ((noinline)) static void test_##_name ( void ) \
{ \
- Block* b = memalign(32, sizeof(Block)); \
+ Block* b = memalign32(sizeof(Block)); \
randBlock(b); \
printf("%s\n", #_name); \
showBlock("before", b); \
diff --git a/tests/malloc.h b/tests/malloc.h
index 0179b38..6a73dde 100644
--- a/tests/malloc.h
+++ b/tests/malloc.h
@@ -23,5 +23,21 @@
assert(x);
assert(0 == ((16-1) & (unsigned long)x));
return x;
-}
+}
+
+// Allocates a 32-aligned block. Asserts if the allocation fails.
+__attribute__((unused))
+static void* memalign32(size_t szB)
+{
+ void* x;
+#if defined(VGO_darwin)
+ // Darwin lacks memalign
+ posix_memalign((void **)&x, 32, szB);
+#else
+ x = memalign(32, szB);
+#endif
+ assert(x);
+ assert(0 == ((32-1) & (unsigned long)x));
+ return x;
+}