diff --git a/kernel/power/zscal.S b/kernel/power/zscal.S index ae68ee6722..5b28616512 100644 --- a/kernel/power/zscal.S +++ b/kernel/power/zscal.S @@ -51,6 +51,7 @@ #define X r8 #define INCX r9 #endif +#define FLAG r11 #endif #if defined(_AIX) || defined(__APPLE__) @@ -61,6 +62,7 @@ #define X r8 #define INCX r9 #endif +#define FLAG r11 #endif #define FZERO f0 @@ -94,6 +96,10 @@ fcmpu cr0, FZERO, ALPHA_I bne- cr0, LL(A1I1) + LDLONG FLAG, 104(SP) + cmpwi cr0, FLAG, 1 + beq- cr0, LL(A1I1) + cmpwi cr0, INCX, 2 * SIZE bne- cr0, LL(A0IN) diff --git a/kernel/power/zscal.c b/kernel/power/zscal.c index 6b7392d0ca..671dc96126 100644 --- a/kernel/power/zscal.c +++ b/kernel/power/zscal.c @@ -136,7 +136,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F if ( inc_x <= 0 ) return(0); - if (da_r == ZERO && da_i == ZERO) { + if (da_r == ZERO && da_i == ZERO && dummy2 == 0) { //clear the vector and return if (inc_x == 1) { memset(x, 0, n*COMPSIZE*SIZE); diff --git a/kernel/power/zscal_ppc440.S b/kernel/power/zscal_ppc440.S index 55dd1b87b8..c75bb4ae29 100644 --- a/kernel/power/zscal_ppc440.S +++ b/kernel/power/zscal_ppc440.S @@ -64,6 +64,7 @@ #endif #define INC1 r11 +#define FLAG r12 #define FZERO f0 #define ALPHA_R f1 @@ -97,6 +98,10 @@ fcmpu cr0, FZERO, ALPHA_I bne- cr0, LL(A1I1) + lwz FLAG, FRAMESLOT(0)(SP) + cmpwi cr0, FLAG, 1 + beq- cr0, LL(A1I1) + LL(A0IN): srawi. r0, N, 3 mtspr CTR, r0