diff --git a/common.h b/common.h index b4acada32..c9cc2f0f2 100644 --- a/common.h +++ b/common.h @@ -556,8 +556,13 @@ static void __inline blas_lock(volatile BLASULONG *address){ #endif #if defined(C_PGI) || defined(C_SUN) -#define CREAL(X) (*((FLOAT *)&X + 0)) -#define CIMAG(X) (*((FLOAT *)&X + 1)) + #if defined(__STDC_IEC_559_COMPLEX__) + #define CREAL(X) creal(X) + #define CIMAG(X) cimag(X) + #else + #define CREAL(X) (*((FLOAT *)&X + 0)) + #define CIMAG(X) (*((FLOAT *)&X + 1)) + #endif #else #ifdef OPENBLAS_COMPLEX_STRUCT #define CREAL(Z) ((Z).real) diff --git a/interface/zdot.c b/interface/zdot.c index d4d0fab92..cd956b075 100644 --- a/interface/zdot.c +++ b/interface/zdot.c @@ -160,9 +160,10 @@ OPENBLAS_COMPLEX_FLOAT CNAME(blasint n, FLOAT *x, blasint incx, FLOAT *y, blasin if (n <= 0) { #ifdef FORCE_USE_STACK - //*result = OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); - CREAL(*result) = 0.0; - CIMAG(*result) = 0.0; + OPENBLAS_COMPLEX_FLOAT zero=OPENBLAS_MAKE_COMPLEX_FLOAT(0.0, 0.0); + *result = zero; +// CREAL(*result) = 0.0; +// CIMAG(*result) = 0.0; return; #else return zero; diff --git a/kernel/x86_64/cdot.c b/kernel/x86_64/cdot.c index 9bba72ba2..4d33b6f5c 100644 --- a/kernel/x86_64/cdot.c +++ b/kernel/x86_64/cdot.c @@ -100,8 +100,7 @@ FLOAT _Complex CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG in if ( n <= 0 ) { - __real__ result = 0.0 ; - __imag__ result = 0.0 ; + result = OPENBLAS_MAKE_COMPLEX_FLOAT (0.0, 0.0) ; return(result); } @@ -161,11 +160,13 @@ FLOAT _Complex CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG in } #if !defined(CONJ) - __real__ result = dot[0] - dot[1]; - __imag__ result = dot[4] + dot[5]; + result = OPENBLAS_MAKE_COMPLEX_FLOAT (dot[0]-dot[1], dot[4]+dot[5]) ; +// CREAL(result) = dot[0] - dot[1]; +// CIMAG(result) = dot[4] + dot[5]; #else - __real__ result = dot[0] + dot[1]; - __imag__ result = dot[4] - dot[5]; + result = OPENBLAS_MAKE_COMPLEX_FLOAT (dot[0]+dot[1], dot[4]-dot[5]) ; +// CREAL(result) = dot[0] + dot[1]; +// CIMAG(result) = dot[4] - dot[5]; #endif diff --git a/kernel/x86_64/zdot.c b/kernel/x86_64/zdot.c index ff3a8654d..c1399be37 100644 --- a/kernel/x86_64/zdot.c +++ b/kernel/x86_64/zdot.c @@ -95,8 +95,9 @@ FLOAT _Complex CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG in if ( n <= 0 ) { - __real__ result = 0.0 ; - __imag__ result = 0.0 ; +// CREAL(result) = 0.0 ; +// CIMAG(result) = 0.0 ; + result=OPENBLAS_MAKE_COMPLEX_FLOAT(0.0,0.0); return(result); } @@ -150,11 +151,13 @@ FLOAT _Complex CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG in } #if !defined(CONJ) - __real__ result = dot[0] - dot[1]; - __imag__ result = dot[2] + dot[3]; + result=OPENBLAS_MAKE_COMPLEX_FLOAT(dot[0]-dot[1],dot[2]+dot[3]); +// CREAL(result) = dot[0] - dot[1]; +// CIMAG(result) = dot[2] + dot[3]; #else - __real__ result = dot[0] + dot[1]; - __imag__ result = dot[2] - dot[3]; + result=OPENBLAS_MAKE_COMPLEX_FLOAT(dot[0]+dot[1],dot[2]-dot[3]); +// CREAL(result) = dot[0] + dot[1]; +// CIMAG(result) = dot[2] - dot[3]; #endif