mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Many files were missing in previous changeset.
This commit is contained in:
@@ -9,8 +9,8 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#if EIGEN_ALIGN
|
||||
#define ALIGNMENT EIGEN_ALIGN_BYTES
|
||||
#if EIGEN_MAX_ALIGN_BYTES>0
|
||||
#define ALIGNMENT EIGEN_MAX_ALIGN_BYTES
|
||||
#else
|
||||
#define ALIGNMENT 1
|
||||
#endif
|
||||
@@ -106,7 +106,7 @@ template<typename T> void check_custom_new_delete()
|
||||
delete[] t;
|
||||
}
|
||||
|
||||
#ifdef EIGEN_ALIGN
|
||||
#if EIGEN_MAX_ALIGN_BYTES>0
|
||||
{
|
||||
T* t = static_cast<T *>((T::operator new)(sizeof(T)));
|
||||
(T::operator delete)(t, sizeof(T));
|
||||
@@ -143,7 +143,7 @@ void test_dynalloc()
|
||||
}
|
||||
|
||||
// check static allocation, who knows ?
|
||||
#if EIGEN_ALIGN_STATICALLY
|
||||
#if EIGEN_MAX_STATIC_ALIGN_BYTES
|
||||
{
|
||||
MyStruct foo0; VERIFY(size_t(foo0.avec.data())%ALIGNMENT==0);
|
||||
MyClassA fooA; VERIFY(size_t(fooA.avec.data())%ALIGNMENT==0);
|
||||
|
||||
@@ -155,9 +155,9 @@ template<typename Scalar> void hyperplane_alignment()
|
||||
typedef Hyperplane<Scalar,3,AutoAlign> Plane3a;
|
||||
typedef Hyperplane<Scalar,3,DontAlign> Plane3u;
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[4+1];
|
||||
EIGEN_ALIGN_MAX Scalar array1[4];
|
||||
EIGEN_ALIGN_MAX Scalar array2[4];
|
||||
EIGEN_ALIGN_MAX Scalar array3[4+1];
|
||||
Scalar* array3u = array3+1;
|
||||
|
||||
Plane3a *p1 = ::new(reinterpret_cast<void*>(array1)) Plane3a;
|
||||
@@ -171,7 +171,7 @@ template<typename Scalar> void hyperplane_alignment()
|
||||
VERIFY_IS_APPROX(p1->coeffs(), p2->coeffs());
|
||||
VERIFY_IS_APPROX(p1->coeffs(), p3->coeffs());
|
||||
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_ALIGN_STATICALLY
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_MAX_STATIC_ALIGN_BYTES > 0
|
||||
if(internal::packet_traits<Scalar>::Vectorizable && internal::packet_traits<Scalar>::size<=4)
|
||||
VERIFY_RAISES_ASSERT((::new(reinterpret_cast<void*>(array3u)) Plane3a));
|
||||
#endif
|
||||
|
||||
@@ -66,9 +66,9 @@ template<typename Scalar> void parametrizedline_alignment()
|
||||
typedef ParametrizedLine<Scalar,4,AutoAlign> Line4a;
|
||||
typedef ParametrizedLine<Scalar,4,DontAlign> Line4u;
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[16];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[16];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[16+1];
|
||||
EIGEN_ALIGN_MAX Scalar array1[16];
|
||||
EIGEN_ALIGN_MAX Scalar array2[16];
|
||||
EIGEN_ALIGN_MAX Scalar array3[16+1];
|
||||
Scalar* array3u = array3+1;
|
||||
|
||||
Line4a *p1 = ::new(reinterpret_cast<void*>(array1)) Line4a;
|
||||
@@ -85,7 +85,7 @@ template<typename Scalar> void parametrizedline_alignment()
|
||||
VERIFY_IS_APPROX(p1->direction(), p2->direction());
|
||||
VERIFY_IS_APPROX(p1->direction(), p3->direction());
|
||||
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_ALIGN_STATICALLY
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_MAX_STATIC_ALIGN_BYTES>0
|
||||
if(internal::packet_traits<Scalar>::Vectorizable && internal::packet_traits<Scalar>::size<=4)
|
||||
VERIFY_RAISES_ASSERT((::new(reinterpret_cast<void*>(array3u)) Line4a));
|
||||
#endif
|
||||
|
||||
@@ -181,9 +181,9 @@ template<typename Scalar> void mapQuaternion(void){
|
||||
v1 = Vector3::Random();
|
||||
Scalar a = internal::random<Scalar>(-Scalar(EIGEN_PI), Scalar(EIGEN_PI));
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[4+1];
|
||||
EIGEN_ALIGN_MAX Scalar array1[4];
|
||||
EIGEN_ALIGN_MAX Scalar array2[4];
|
||||
EIGEN_ALIGN_MAX Scalar array3[4+1];
|
||||
Scalar* array3unaligned = array3+1;
|
||||
|
||||
MQuaternionA mq1(array1);
|
||||
@@ -232,9 +232,9 @@ template<typename Scalar> void quaternionAlignment(void){
|
||||
typedef Quaternion<Scalar,AutoAlign> QuaternionA;
|
||||
typedef Quaternion<Scalar,DontAlign> QuaternionUA;
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[4+1];
|
||||
EIGEN_ALIGN_MAX Scalar array1[4];
|
||||
EIGEN_ALIGN_MAX Scalar array2[4];
|
||||
EIGEN_ALIGN_MAX Scalar array3[4+1];
|
||||
Scalar* arrayunaligned = array3+1;
|
||||
|
||||
QuaternionA *q1 = ::new(reinterpret_cast<void*>(array1)) QuaternionA;
|
||||
@@ -247,7 +247,7 @@ template<typename Scalar> void quaternionAlignment(void){
|
||||
|
||||
VERIFY_IS_APPROX(q1->coeffs(), q2->coeffs());
|
||||
VERIFY_IS_APPROX(q1->coeffs(), q3->coeffs());
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_ALIGN_STATICALLY
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_MAX_STATIC_ALIGN_BYTES>0
|
||||
if(internal::packet_traits<Scalar>::Vectorizable && internal::packet_traits<Scalar>::size<=4)
|
||||
VERIFY_RAISES_ASSERT((::new(reinterpret_cast<void*>(arrayunaligned)) QuaternionA));
|
||||
#endif
|
||||
|
||||
@@ -470,9 +470,9 @@ template<typename Scalar> void transform_alignment()
|
||||
typedef Transform<Scalar,3,Projective,AutoAlign> Projective3a;
|
||||
typedef Transform<Scalar,3,Projective,DontAlign> Projective3u;
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar array1[16];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array2[16];
|
||||
EIGEN_ALIGN_DEFAULT Scalar array3[16+1];
|
||||
EIGEN_ALIGN_MAX Scalar array1[16];
|
||||
EIGEN_ALIGN_MAX Scalar array2[16];
|
||||
EIGEN_ALIGN_MAX Scalar array3[16+1];
|
||||
Scalar* array3u = array3+1;
|
||||
|
||||
Projective3a *p1 = ::new(reinterpret_cast<void*>(array1)) Projective3a;
|
||||
@@ -488,7 +488,7 @@ template<typename Scalar> void transform_alignment()
|
||||
|
||||
VERIFY_IS_APPROX( (*p1) * (*p1), (*p2)*(*p3));
|
||||
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_ALIGN_STATICALLY
|
||||
#if defined(EIGEN_VECTORIZE) && EIGEN_MAX_STATIC_ALIGN_BYTES>0
|
||||
if(internal::packet_traits<Scalar>::Vectorizable)
|
||||
VERIFY_RAISES_ASSERT((::new(reinterpret_cast<void*>(array3u)) Projective3a));
|
||||
#endif
|
||||
|
||||
@@ -25,7 +25,7 @@ template<typename VectorType> void map_class_vector(const VectorType& m)
|
||||
Scalar* array1 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array2 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_MAX_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar array4[EIGEN_TESTMAP_MAX_SIZE];
|
||||
|
||||
Map<VectorType, Aligned>(array1, size) = VectorType::Random(size);
|
||||
@@ -65,7 +65,7 @@ template<typename MatrixType> void map_class_matrix(const MatrixType& m)
|
||||
// array3unaligned -> unaligned pointer to heap
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
for(int i = 0; i < size+1; i++) array3[i] = Scalar(1);
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_MAX_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar array4[256];
|
||||
if(size<=256)
|
||||
for(int i = 0; i < size; i++) array4[i] = Scalar(1);
|
||||
@@ -129,7 +129,7 @@ template<typename VectorType> void map_static_methods(const VectorType& m)
|
||||
Scalar* array1 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array2 = internal::aligned_new<Scalar>(size);
|
||||
Scalar* array3 = new Scalar[size+1];
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
Scalar* array3unaligned = size_t(array3)%EIGEN_MAX_ALIGN_BYTES == 0 ? array3+1 : array3;
|
||||
|
||||
VectorType::MapAligned(array1, size) = VectorType::Random(size);
|
||||
VectorType::Map(array2, size) = VectorType::Map(array1, size);
|
||||
|
||||
@@ -70,7 +70,7 @@ template<int Alignment,typename MatrixType> void map_class_matrix(const MatrixTy
|
||||
if(Alignment!=Aligned)
|
||||
array2 = (Scalar*)(std::ptrdiff_t(a_array2) + (internal::packet_traits<Scalar>::AlignedOnScalar?sizeof(Scalar):sizeof(typename NumTraits<Scalar>::Real)));
|
||||
else
|
||||
array2 = (Scalar*)(((std::size_t(a_array2)+EIGEN_ALIGN_BYTES-1)/EIGEN_ALIGN_BYTES)*EIGEN_ALIGN_BYTES);
|
||||
array2 = (Scalar*)(((std::size_t(a_array2)+EIGEN_MAX_ALIGN_BYTES-1)/EIGEN_MAX_ALIGN_BYTES)*EIGEN_MAX_ALIGN_BYTES);
|
||||
Index maxsize2 = a_array2 - array2 + 256;
|
||||
|
||||
// test no inner stride and some dynamic outer stride
|
||||
|
||||
@@ -106,10 +106,10 @@ template<typename Scalar> void packetmath()
|
||||
|
||||
const int max_size = PacketSize > 4 ? PacketSize : 4;
|
||||
const int size = PacketSize*max_size;
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[size];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[size];
|
||||
EIGEN_ALIGN_DEFAULT Packet packets[PacketSize*2];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[size];
|
||||
EIGEN_ALIGN_MAX Scalar data1[size];
|
||||
EIGEN_ALIGN_MAX Scalar data2[size];
|
||||
EIGEN_ALIGN_MAX Packet packets[PacketSize*2];
|
||||
EIGEN_ALIGN_MAX Scalar ref[size];
|
||||
RealScalar refvalue = 0;
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
@@ -265,13 +265,13 @@ template<typename Scalar> void packetmath()
|
||||
if (internal::packet_traits<Scalar>::HasBlend) {
|
||||
Packet thenPacket = internal::pload<Packet>(data1);
|
||||
Packet elsePacket = internal::pload<Packet>(data2);
|
||||
EIGEN_ALIGN_DEFAULT internal::Selector<PacketSize> selector;
|
||||
EIGEN_ALIGN_MAX internal::Selector<PacketSize> selector;
|
||||
for (int i = 0; i < PacketSize; ++i) {
|
||||
selector.select[i] = i;
|
||||
}
|
||||
|
||||
Packet blend = internal::pblend(selector, thenPacket, elsePacket);
|
||||
EIGEN_ALIGN_DEFAULT Scalar result[size];
|
||||
EIGEN_ALIGN_MAX Scalar result[size];
|
||||
internal::pstore(result, blend);
|
||||
for (int i = 0; i < PacketSize; ++i) {
|
||||
VERIFY(isApproxAbs(result[i], (selector.select[i] ? data1[i] : data2[i]), refvalue));
|
||||
@@ -286,9 +286,9 @@ template<typename Scalar> void packetmath_real()
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
const int size = PacketSize*4;
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
@@ -392,9 +392,9 @@ template<typename Scalar> void packetmath_notcomplex()
|
||||
typedef typename internal::packet_traits<Scalar>::type Packet;
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar data1[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar data2[internal::packet_traits<Scalar>::size*4];
|
||||
EIGEN_ALIGN_MAX Scalar ref[internal::packet_traits<Scalar>::size*4];
|
||||
|
||||
Array<Scalar,Dynamic,1>::Map(data1, internal::packet_traits<Scalar>::size*4).setRandom();
|
||||
|
||||
@@ -452,10 +452,10 @@ template<typename Scalar> void packetmath_complex()
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
|
||||
const int size = PacketSize*4;
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar data2[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar ref[PacketSize*4];
|
||||
EIGEN_ALIGN_DEFAULT Scalar pval[PacketSize*4];
|
||||
EIGEN_ALIGN_MAX Scalar data1[PacketSize*4];
|
||||
EIGEN_ALIGN_MAX Scalar data2[PacketSize*4];
|
||||
EIGEN_ALIGN_MAX Scalar ref[PacketSize*4];
|
||||
EIGEN_ALIGN_MAX Scalar pval[PacketSize*4];
|
||||
|
||||
for (int i=0; i<size; ++i)
|
||||
{
|
||||
@@ -480,7 +480,7 @@ template<typename Scalar> void packetmath_scatter_gather() {
|
||||
typedef typename internal::packet_traits<Scalar>::type Packet;
|
||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||
const int PacketSize = internal::packet_traits<Scalar>::size;
|
||||
EIGEN_ALIGN_DEFAULT Scalar data1[PacketSize];
|
||||
EIGEN_ALIGN_MAX Scalar data1[PacketSize];
|
||||
RealScalar refvalue = 0;
|
||||
for (int i=0; i<PacketSize; ++i) {
|
||||
data1[i] = internal::random<Scalar>()/RealScalar(PacketSize);
|
||||
@@ -488,7 +488,7 @@ template<typename Scalar> void packetmath_scatter_gather() {
|
||||
|
||||
int stride = internal::random<int>(1,20);
|
||||
|
||||
EIGEN_ALIGN_DEFAULT Scalar buffer[PacketSize*20];
|
||||
EIGEN_ALIGN_MAX Scalar buffer[PacketSize*20];
|
||||
memset(buffer, 0, 20*sizeof(Packet));
|
||||
Packet packet = internal::pload<Packet>(data1);
|
||||
internal::pscatter<Scalar, Packet>(buffer, packet, stride);
|
||||
|
||||
Reference in New Issue
Block a user