mirror of
https://github.com/golang/go
synced 2024-11-25 07:57:56 -07:00
replace original float instruction with jump to make branches
to float instructions work correctly. R=rsc CC=golang-dev https://golang.org/cl/870044
This commit is contained in:
parent
b26a7a2b88
commit
29c6c09f71
@ -8,7 +8,7 @@
|
||||
void
|
||||
softfloat()
|
||||
{
|
||||
Prog *p, *prev, *psfloat;
|
||||
Prog *p, *next, *psfloat;
|
||||
Sym *symsfloat;
|
||||
int wasfloat;
|
||||
|
||||
@ -26,7 +26,6 @@ softfloat()
|
||||
|
||||
wasfloat = 0;
|
||||
p = firstp;
|
||||
prev = P;
|
||||
for(p = firstp; p != P; p = p->link) {
|
||||
switch(p->as) {
|
||||
case AMOVWD:
|
||||
@ -50,21 +49,23 @@ softfloat()
|
||||
if (psfloat == P)
|
||||
diag("floats used with _sfloat not defined");
|
||||
if (!wasfloat) {
|
||||
if (prev == P)
|
||||
diag("float instruction without predecessor TEXT");
|
||||
// BL _sfloat(SB)
|
||||
prev = appendp(prev);
|
||||
prev->as = ABL;
|
||||
prev->to.type = D_BRANCH;
|
||||
prev->to.sym = symsfloat;
|
||||
prev->cond = psfloat;
|
||||
next = prg();
|
||||
*next = *p;
|
||||
|
||||
// BL _sfloat(SB)
|
||||
*p = zprg;
|
||||
p->link = next;
|
||||
p->as = ABL;
|
||||
p->to.type = D_BRANCH;
|
||||
p->to.sym = symsfloat;
|
||||
p->cond = psfloat;
|
||||
|
||||
p = next;
|
||||
wasfloat = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
wasfloat = 0;
|
||||
}
|
||||
prev = p;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user