Fixes Immediate crash with 4.0.11.52 on WXP32, Issue 1982

This commit is contained in:
Ingo
2013-09-19 13:51:13 +02:00
parent 537a018692
commit ed3b29eee8
2 changed files with 11 additions and 11 deletions

View File

@@ -81,7 +81,7 @@ private:
unsigned int maxs; unsigned int maxs;
T * data; T * data;
unsigned int clip, size, owner; unsigned int clip, size, owner;
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
__m128 maxsv __attribute__ ((aligned (16))); __m128 maxsv __attribute__ ((aligned (16)));
__m128 sizev __attribute__ ((aligned (16))); __m128 sizev __attribute__ ((aligned (16)));
__m128i maxsiv __attribute__ ((aligned (16))); __m128i maxsiv __attribute__ ((aligned (16)));
@@ -94,7 +94,7 @@ public:
owner = 1; owner = 1;
size = s; size = s;
maxs=size-2; maxs=size-2;
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
maxsv = _mm_set1_ps( maxs ); maxsv = _mm_set1_ps( maxs );
maxsiv = _mm_cvttps_epi32( maxsv ); maxsiv = _mm_cvttps_epi32( maxsv );
sizeiv = _mm_set1_epi32( (int)(size-1) ); sizeiv = _mm_set1_epi32( (int)(size-1) );
@@ -109,7 +109,7 @@ public:
owner = 1; owner = 1;
size = s; size = s;
maxs=size-2; maxs=size-2;
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
maxsv = _mm_set1_ps( maxs ); maxsv = _mm_set1_ps( maxs );
maxsiv = _mm_cvttps_epi32( maxsv ); maxsiv = _mm_cvttps_epi32( maxsv );
sizeiv = _mm_set1_epi32( (int)(size-1) ); sizeiv = _mm_set1_epi32( (int)(size-1) );
@@ -123,7 +123,7 @@ public:
owner = 1; owner = 1;
size = s; size = s;
maxs=size-2; maxs=size-2;
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
maxsv = _mm_set1_ps( size - 2); maxsv = _mm_set1_ps( size - 2);
maxsiv = _mm_cvttps_epi32( maxsv ); maxsiv = _mm_cvttps_epi32( maxsv );
sizeiv = _mm_set1_epi32( (int)(size-1) ); sizeiv = _mm_set1_epi32( (int)(size-1) );
@@ -161,7 +161,7 @@ public:
memcpy(this->data,rhs.data,rhs.size*sizeof(T)); memcpy(this->data,rhs.data,rhs.size*sizeof(T));
this->size=rhs.size; this->size=rhs.size;
this->maxs=this->size-2; this->maxs=this->size-2;
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
this->maxsv = _mm_set1_ps( this->size - 2); this->maxsv = _mm_set1_ps( this->size - 2);
this->maxsiv = _mm_cvttps_epi32( this->maxsv ); this->maxsiv = _mm_cvttps_epi32( this->maxsv );
this->sizeiv = _mm_set1_epi32( (int)(this->size-1) ); this->sizeiv = _mm_set1_epi32( (int)(this->size-1) );
@@ -184,7 +184,7 @@ public:
} }
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
__m128 operator[](__m128 indexv ) const { __m128 operator[](__m128 indexv ) const {
printf("don't use this operator. It's not ready for production"); printf("don't use this operator. It's not ready for production");
return _mm_setzero_ps(); return _mm_setzero_ps();
@@ -249,7 +249,7 @@ public:
return resultv ; return resultv ;
} }
#if defined( __SSE2__ ) && defined( WIN32 ) #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
__attribute__((force_align_arg_pointer)) __m128 operator[](__m128i idxv ) const __attribute__((force_align_arg_pointer)) __m128 operator[](__m128i idxv ) const
#else #else
__m128 operator[](__m128i idxv ) const __m128 operator[](__m128i idxv ) const

View File

@@ -192,7 +192,7 @@ void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, int width, in
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
__m128 dirwtv, valv, normv; __m128 dirwtv, valv, normv;
#endif // __SSE2__ #endif // __SSE2__
int j; int j;
@@ -215,7 +215,7 @@ void SHMap::dirpyr_shmap(float ** data_fine, float ** data_coarse, int width, in
} }
data_coarse[i][j] = val/norm; // low pass filter data_coarse[i][j] = val/norm; // low pass filter
} }
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
for(; j < (width-scalewin)-3; j+=4) for(; j < (width-scalewin)-3; j+=4)
{ {
valv= _mm_setzero_ps(); valv= _mm_setzero_ps();
@@ -288,7 +288,7 @@ else {
#pragma omp parallel #pragma omp parallel
#endif #endif
{ {
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
__m128 dirwtv, valv, normv; __m128 dirwtv, valv, normv;
float domkerv[5][5][4] __attribute__ ((aligned (16))) = {{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}}; float domkerv[5][5][4] __attribute__ ((aligned (16))) = {{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{2,2,2,2},{2,2,2,2},{2,2,2,2},{1,1,1,1}},{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}};
@@ -313,7 +313,7 @@ else {
} }
data_coarse[i][j] = val/norm; // low pass filter data_coarse[i][j] = val/norm; // low pass filter
} }
#ifdef __SSE2__ #if defined( __SSE2__ ) && ((defined( WIN32 ) && defined( __x86_64__ )) || !defined( WIN32 ))
for(; j < width-scalewin-3; j+=4) for(; j < width-scalewin-3; j+=4)
{ {
valv = _mm_setzero_ps(); valv = _mm_setzero_ps();