Commit c81d248e authored by Russ Cox's avatar Russ Cox

[dev.cc] runtime: convert softfloat_arm.c to Go + build fixes

Also include onM_signalok fix from issue 8995.

Fixes linux/arm build.
Fixes #8995.

LGTM=r
R=r, dave
CC=golang-codereviews
https://golang.org/cl/168580043
parent 8420df62
...@@ -55,7 +55,7 @@ TEXT runtime·rt0_go(SB),NOSPLIT,$-4 ...@@ -55,7 +55,7 @@ TEXT runtime·rt0_go(SB),NOSPLIT,$-4
nocgo: nocgo:
// update stackguard after _cgo_init // update stackguard after _cgo_init
MOVW (g_stack+stack_lo)(g), R0 MOVW (g_stack+stack_lo)(g), R0
ADD $const_StackGuard, R0 ADD $const__StackGuard, R0
MOVW R0, g_stackguard0(g) MOVW R0, g_stackguard0(g)
MOVW R0, g_stackguard1(g) MOVW R0, g_stackguard1(g)
...@@ -202,15 +202,17 @@ TEXT runtime·switchtoM(SB),NOSPLIT,$0-0 ...@@ -202,15 +202,17 @@ TEXT runtime·switchtoM(SB),NOSPLIT,$0-0
RET RET
// func onM_signalok(fn func()) // func onM_signalok(fn func())
TEXT runtime·onM_signalok(SB), NOSPLIT, $-4-4 TEXT runtime·onM_signalok(SB), NOSPLIT, $4-4
MOVW g_m(g), R1 MOVW g_m(g), R1
MOVW m_gsignal(R1), R2 MOVW m_gsignal(R1), R2
MOVW fn+0(FP), R0
CMP g, R2 CMP g, R2
B.EQ ongsignal B.EQ ongsignal
B runtime·onM(SB) MOVW R0, 4(R13)
BL runtime·onM(SB)
RET
ongsignal: ongsignal:
MOVW fn+0(FP), R0
MOVW R0, R7 MOVW R0, R7
MOVW 0(R0), R0 MOVW 0(R0), R0
BL (R0) BL (R0)
......
...@@ -340,7 +340,7 @@ func f32to64(f uint32) uint64 { ...@@ -340,7 +340,7 @@ func f32to64(f uint32) uint64 {
return fpack64(fs64, uint64(fm)<<d, fe, 0) return fpack64(fs64, uint64(fm)<<d, fe, 0)
} }
func fcmp64(f, g uint64) (cmp int, isnan bool) { func fcmp64(f, g uint64) (cmp int32, isnan bool) {
fs, fm, _, fi, fn := funpack64(f) fs, fm, _, fi, fn := funpack64(f)
gs, gm, _, gi, gn := funpack64(g) gs, gm, _, gi, gn := funpack64(g)
...@@ -486,13 +486,13 @@ again2: ...@@ -486,13 +486,13 @@ again2:
// callable from C // callable from C
func fadd64c(f, g uint64, ret *uint64) { *ret = fadd64(f, g) } func fadd64c(f, g uint64, ret *uint64) { *ret = fadd64(f, g) }
func fsub64c(f, g uint64, ret *uint64) { *ret = fsub64(f, g) } func fsub64c(f, g uint64, ret *uint64) { *ret = fsub64(f, g) }
func fmul64c(f, g uint64, ret *uint64) { *ret = fmul64(f, g) } func fmul64c(f, g uint64, ret *uint64) { *ret = fmul64(f, g) }
func fdiv64c(f, g uint64, ret *uint64) { *ret = fdiv64(f, g) } func fdiv64c(f, g uint64, ret *uint64) { *ret = fdiv64(f, g) }
func fneg64c(f uint64, ret *uint64) { *ret = fneg64(f) } func fneg64c(f uint64, ret *uint64) { *ret = fneg64(f) }
func f32to64c(f uint32, ret *uint64) { *ret = f32to64(f) } func f32to64c(f uint32, ret *uint64) { *ret = f32to64(f) }
func f64to32c(f uint64, ret *uint32) { *ret = f64to32(f) } func f64to32c(f uint64, ret *uint32) { *ret = f64to32(f) }
func fcmp64c(f, g uint64, ret *int, retnan *bool) { *ret, *retnan = fcmp64(f, g) } func fcmp64c(f, g uint64, ret *int32, retnan *bool) { *ret, *retnan = fcmp64(f, g) }
func fintto64c(val int64, ret *uint64) { *ret = fintto64(val) } func fintto64c(val int64, ret *uint64) { *ret = fintto64(val) }
func f64tointc(f uint64, ret *int64, retok *bool) { *ret, *retok = f64toint(f) } func f64tointc(f uint64, ret *int64, retok *bool) { *ret, *retok = f64toint(f) }
...@@ -182,7 +182,7 @@ func hwcmp(f, g float64) (cmp int, isnan bool) { ...@@ -182,7 +182,7 @@ func hwcmp(f, g float64) (cmp int, isnan bool) {
func testcmp(t *testing.T, f, g float64) { func testcmp(t *testing.T, f, g float64) {
hcmp, hisnan := hwcmp(f, g) hcmp, hisnan := hwcmp(f, g)
scmp, sisnan := Fcmp64(math.Float64bits(f), math.Float64bits(g)) scmp, sisnan := Fcmp64(math.Float64bits(f), math.Float64bits(g))
if hcmp != scmp || hisnan != sisnan { if int32(hcmp) != scmp || hisnan != sisnan {
err(t, "cmp(%g, %g) = sw %v, %v, hw %v, %v\n", f, g, scmp, sisnan, hcmp, hisnan) err(t, "cmp(%g, %g) = sw %v, %v, hw %v, %v\n", f, g, scmp, sisnan, hcmp, hisnan)
} }
} }
......
This diff is collapsed.
This diff is collapsed.
...@@ -141,7 +141,3 @@ func sqrt(x float64) float64 { ...@@ -141,7 +141,3 @@ func sqrt(x float64) float64 {
ix = q>>1 + uint64(exp-1+bias)<<shift // significand + biased exponent ix = q>>1 + uint64(exp-1+bias)<<shift // significand + biased exponent
return float64frombits(ix) return float64frombits(ix)
} }
func sqrtC(f float64, r *float64) {
*r = sqrt(f)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment