Browse Source
Merge pull request #3695 from martin-frbg/ppc6nrm2
PPC6: Fix DNRM2 returning INF instead of zero due to intermediate overflow
tags/v0.3.21
Martin Kroeker
GitHub
3 years ago
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
29 additions and
4 deletions
-
kernel/power/nrm2.S
|
|
|
@@ -50,8 +50,8 @@ |
|
|
|
#define FZERO 144(SP) |
|
|
|
#define FONE 148(SP) |
|
|
|
#define FMAX 152(SP) |
|
|
|
|
|
|
|
#define STACKSIZE 160 |
|
|
|
#define FINF 160(SP) |
|
|
|
#define STACKSIZE 168 |
|
|
|
|
|
|
|
PROLOGUE |
|
|
|
PROFCODE |
|
|
|
@@ -87,6 +87,16 @@ |
|
|
|
stw r10, FZERO |
|
|
|
stw r11, FONE |
|
|
|
stw r12, FMAX |
|
|
|
|
|
|
|
#ifdef DOUBLE |
|
|
|
lis r12, 0x7ff0 |
|
|
|
ori r12, r12, 0x0 |
|
|
|
sldi r12, r12, 32 |
|
|
|
oris r12, r12,0x0 |
|
|
|
ori r12, r12, 0x0 |
|
|
|
std r12, FINF |
|
|
|
#endif |
|
|
|
|
|
|
|
stw r10, 4 + FMAX |
|
|
|
|
|
|
|
lfs f1, FZERO |
|
|
|
@@ -334,10 +344,17 @@ LL(100): |
|
|
|
lfs f0, FONE |
|
|
|
|
|
|
|
fcmpu cr0, f1, f31 |
|
|
|
nop |
|
|
|
beq- cr0, LL(9999) |
|
|
|
|
|
|
|
fdiv f30, f0, f31 |
|
|
|
|
|
|
|
#ifdef DOUBLE |
|
|
|
lfd f1, FINF |
|
|
|
fcmpu cr0, f1, f30 |
|
|
|
lfs f1, FZERO |
|
|
|
beq- cr0, LL(9999) |
|
|
|
#endif |
|
|
|
|
|
|
|
fmr f0, f1 |
|
|
|
fmr f2, f1 |
|
|
|
fmr f3, f1 |
|
|
|
@@ -712,9 +729,16 @@ LL(1999): |
|
|
|
|
|
|
|
fcmpu cr0, f1, f31 |
|
|
|
beq- cr0, LL(9999) |
|
|
|
|
|
|
|
|
|
|
|
fdiv f30, f0, f31 |
|
|
|
|
|
|
|
#ifdef DOUBLE |
|
|
|
lfd f1, FINF |
|
|
|
fcmpu cr0, f1, f30 |
|
|
|
lfs f1, FZERO |
|
|
|
beq- cr0, LL(9999) |
|
|
|
#endif |
|
|
|
|
|
|
|
fmr f0, f1 |
|
|
|
fmr f2, f1 |
|
|
|
fmr f3, f1 |
|
|
|
@@ -875,6 +899,7 @@ LL(2170): |
|
|
|
fadd f0, f0, f4 |
|
|
|
|
|
|
|
fsqrt f0, f0 |
|
|
|
|
|
|
|
fmul f1, f31, f0 |
|
|
|
.align 4 |
|
|
|
|
|
|
|
|