mirror of
https://github.com/golang/go
synced 2024-11-24 21:10:04 -07:00
runtime: update arm softfloat - no more R12
R=ken2 CC=golang-dev https://golang.org/cl/2555041
This commit is contained in:
parent
18ccbda50c
commit
6ac08ba638
@ -370,7 +370,8 @@ ret:
|
|||||||
|
|
||||||
// cmf, compare floating point
|
// cmf, compare floating point
|
||||||
static void
|
static void
|
||||||
compare(uint32 *pc, uint32 *regs) {
|
compare(uint32 *pc, uint32 *regs)
|
||||||
|
{
|
||||||
uint32 i, flags, lhs, rhs, sign0, sign1;
|
uint32 i, flags, lhs, rhs, sign0, sign1;
|
||||||
uint64 f0, f1, mant0, mant1;
|
uint64 f0, f1, mant0, mant1;
|
||||||
int32 exp0, exp1;
|
int32 exp0, exp1;
|
||||||
@ -502,16 +503,14 @@ loadconst(uint32 *pc, uint32 *regs)
|
|||||||
uint32 offset;
|
uint32 offset;
|
||||||
uint32 *addr;
|
uint32 *addr;
|
||||||
|
|
||||||
if (*pc & 0xfffff000 != 0xe59fb838 ||
|
if ((*pc & 0xfffff000) != 0xe59fb000 || (*(pc+1) & 0xffff8fff) != 0xed9b0100)
|
||||||
*(pc+1) != 0xe08bb00c ||
|
|
||||||
*(pc+2) & 0xffff8fff != 0xed9b0100)
|
|
||||||
goto undef;
|
goto undef;
|
||||||
|
|
||||||
offset = *pc & 0xfff;
|
offset = *pc & 0xfff;
|
||||||
addr = (uint32*)((uint8*)pc + offset + 8);
|
addr = (uint32*)((uint8*)pc + offset + 8);
|
||||||
//printf("DEBUG: addr %p *addr %x final %p\n", addr, *addr, *addr + regs[12]);
|
//printf("DEBUG: addr %p *addr %x final %p\n", addr, *addr, *addr + regs[12]);
|
||||||
regs[11] = *addr + regs[12];
|
regs[11] = *addr;
|
||||||
loadstore(pc + 2, regs);
|
loadstore(pc + 1, regs);
|
||||||
goto ret;
|
goto ret;
|
||||||
|
|
||||||
undef:
|
undef:
|
||||||
@ -587,6 +586,8 @@ stepflt(uint32 *pc, uint32 *regs)
|
|||||||
{
|
{
|
||||||
uint32 i, c;
|
uint32 i, c;
|
||||||
|
|
||||||
|
//printf("stepflt %p %p\n", pc, *pc);
|
||||||
|
|
||||||
i = *pc;
|
i = *pc;
|
||||||
|
|
||||||
// unconditional forward branches.
|
// unconditional forward branches.
|
||||||
@ -622,12 +623,11 @@ stepflt(uint32 *pc, uint32 *regs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// lookahead for virtual instructions that span multiple arm instructions
|
// lookahead for virtual instructions that span multiple arm instructions
|
||||||
c = ((*pc & 0x0f000000) >> 16) |
|
c = ((*pc & 0x0f000000) >> 20) |
|
||||||
((*(pc + 1) & 0x0f000000) >> 20) |
|
((*(pc + 1) & 0x0f000000) >> 24);
|
||||||
((*(pc + 2) & 0x0f000000) >> 24);
|
if(c == 0x5d) { // 0101 1101
|
||||||
if(c == 0x50d) { // 0101 0000 1101
|
|
||||||
loadconst(pc, regs);
|
loadconst(pc, regs);
|
||||||
return 3;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user