aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/dynalloc.cpp
diff options
context:
space:
mode:
authorGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-02-04 16:53:03 +0000
committerGravatar Benoit Jacob <jacob.benoit.1@gmail.com>2009-02-04 16:53:03 +0000
commit93a089adc8bd7d7cf541341c9a631bcb51f2e62d (patch)
tree01060086ad5358e7d341a9bbbb7406bc292cd30d /test/dynalloc.cpp
parentc26dc9ab1b29ee9e8d9165aec01d2fd3b584c667 (diff)
disable alignment altogether outside of the platforms which potentially have SSE or AltiVec
This should remove most portability issues to other platforms where data alignment issues (including overloading operator new and new[]) can be tricky, and where data alignment is not needed in the first place.
Diffstat (limited to 'test/dynalloc.cpp')
-rw-r--r--test/dynalloc.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/test/dynalloc.cpp b/test/dynalloc.cpp
index 899342d83..c0fcdde3d 100644
--- a/test/dynalloc.cpp
+++ b/test/dynalloc.cpp
@@ -24,12 +24,18 @@
#include "main.h"
+#if EIGEN_ARCH_WANTS_ALIGNMENT
+#define ALIGNMENT 16
+#else
+#define ALIGNMENT 1
+#endif
+
void check_handmade_aligned_malloc()
{
for(int i = 1; i < 1000; i++)
{
char *p = (char*)ei_handmade_aligned_malloc(i);
- VERIFY(size_t(p)%16==0);
+ VERIFY(size_t(p)%ALIGNMENT==0);
// if the buffer is wrongly allocated this will give a bad write --> check with valgrind
for(int j = 0; j < i; j++) p[j]=0;
ei_handmade_aligned_free(p);
@@ -41,7 +47,7 @@ void check_aligned_malloc()
for(int i = 1; i < 1000; i++)
{
char *p = (char*)ei_aligned_malloc(i);
- VERIFY(size_t(p)%16==0);
+ VERIFY(size_t(p)%ALIGNMENT==0);
// if the buffer is wrongly allocated this will give a bad write --> check with valgrind
for(int j = 0; j < i; j++) p[j]=0;
ei_aligned_free(p);
@@ -53,7 +59,7 @@ void check_aligned_new()
for(int i = 1; i < 1000; i++)
{
float *p = ei_aligned_new<float>(i);
- VERIFY(size_t(p)%16==0);
+ VERIFY(size_t(p)%ALIGNMENT==0);
// if the buffer is wrongly allocated this will give a bad write --> check with valgrind
for(int j = 0; j < i; j++) p[j]=0;
ei_aligned_delete(p,i);
@@ -65,7 +71,7 @@ void check_aligned_stack_alloc()
for(int i = 1; i < 1000; i++)
{
float *p = ei_aligned_stack_new(float,i);
- VERIFY(size_t(p)%16==0);
+ VERIFY(size_t(p)%ALIGNMENT==0);
// if the buffer is wrongly allocated this will give a bad write --> check with valgrind
for(int j = 0; j < i; j++) p[j]=0;
ei_aligned_stack_delete(float,p,i);
@@ -92,7 +98,7 @@ class MyClassA
template<typename T> void check_dynaligned()
{
T* obj = new T;
- VERIFY(size_t(obj)%16==0);
+ VERIFY(size_t(obj)%ALIGNMENT==0);
delete obj;
}
@@ -115,15 +121,15 @@ void test_dynalloc()
// check static allocation, who knows ?
{
- MyStruct foo0; VERIFY(size_t(foo0.avec.data())%16==0);
- MyClassA fooA; VERIFY(size_t(fooA.avec.data())%16==0);
+ MyStruct foo0; VERIFY(size_t(foo0.avec.data())%ALIGNMENT==0);
+ MyClassA fooA; VERIFY(size_t(fooA.avec.data())%ALIGNMENT==0);
}
// dynamic allocation, single object
for (int i=0; i<g_repeat*100; ++i)
{
- MyStruct *foo0 = new MyStruct(); VERIFY(size_t(foo0->avec.data())%16==0);
- MyClassA *fooA = new MyClassA(); VERIFY(size_t(fooA->avec.data())%16==0);
+ MyStruct *foo0 = new MyStruct(); VERIFY(size_t(foo0->avec.data())%ALIGNMENT==0);
+ MyClassA *fooA = new MyClassA(); VERIFY(size_t(fooA->avec.data())%ALIGNMENT==0);
delete foo0;
delete fooA;
}
@@ -132,8 +138,8 @@ void test_dynalloc()
const int N = 10;
for (int i=0; i<g_repeat*100; ++i)
{
- MyStruct *foo0 = new MyStruct[N]; VERIFY(size_t(foo0->avec.data())%16==0);
- MyClassA *fooA = new MyClassA[N]; VERIFY(size_t(fooA->avec.data())%16==0);
+ MyStruct *foo0 = new MyStruct[N]; VERIFY(size_t(foo0->avec.data())%ALIGNMENT==0);
+ MyClassA *fooA = new MyClassA[N]; VERIFY(size_t(fooA->avec.data())%ALIGNMENT==0);
delete[] foo0;
delete[] fooA;
}