aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/softfloat_arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/softfloat_arm.c')
-rw-r--r--src/pkg/runtime/softfloat_arm.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/pkg/runtime/softfloat_arm.c b/src/pkg/runtime/softfloat_arm.c
index 29a52bd0e4..41ce8bd753 100644
--- a/src/pkg/runtime/softfloat_arm.c
+++ b/src/pkg/runtime/softfloat_arm.c
@@ -32,20 +32,20 @@ fabort(void)
static void
putf(uint32 reg, uint32 val)
{
- m->freglo[reg] = val;
+ g->m->freglo[reg] = val;
}
static void
putd(uint32 reg, uint64 val)
{
- m->freglo[reg] = (uint32)val;
- m->freghi[reg] = (uint32)(val>>32);
+ g->m->freglo[reg] = (uint32)val;
+ g->m->freghi[reg] = (uint32)(val>>32);
}
static uint64
getd(uint32 reg)
{
- return (uint64)m->freglo[reg] | ((uint64)m->freghi[reg]<<32);
+ return (uint64)g->m->freglo[reg] | ((uint64)g->m->freghi[reg]<<32);
}
static void
@@ -53,7 +53,7 @@ fprint(void)
{
uint32 i;
for (i = 0; i < 16; i++) {
- runtime·printf("\tf%d:\t%X %X\n", i, m->freghi[i], m->freglo[i]);
+ runtime·printf("\tf%d:\t%X %X\n", i, g->m->freghi[i], g->m->freglo[i]);
}
}
@@ -111,7 +111,11 @@ stepflt(uint32 *pc, uint32 *regs)
int64 sval;
bool nan, ok;
int32 cmp;
+ M *m;
+ // m is locked in vlop_arm.s, so g->m cannot change during this function call,
+ // so caching it in a local variable is safe.
+ m = g->m;
i = *pc;
if(trace)