From 7b0b52ef2b2b86eef3b73859ceaa986c8c0e47f7 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Fri, 21 Apr 2017 06:50:02 -0400 Subject: [PATCH] cmd/compile: mark ARM's CALLudiv not safepoint ARM's udiv function is nosplit and it shouldn't be preemptied (passing args in registers). It is in some sense like DUFFCOPY, which we don't mark as safepoint. Change-Id: I49f7c4e69e787ac364d0b0def0661e79a0ea9e69 Reviewed-on: https://go-review.googlesource.com/41370 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Matthew Dempsky --- src/cmd/compile/internal/arm/ssa.go | 6 ++++-- src/cmd/compile/internal/gc/plive.go | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/arm/ssa.go b/src/cmd/compile/internal/arm/ssa.go index 8faaf0ffb8..ea9c3a9cc1 100644 --- a/src/cmd/compile/internal/arm/ssa.go +++ b/src/cmd/compile/internal/arm/ssa.go @@ -625,8 +625,10 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) { case ssa.OpARMCALLstatic, ssa.OpARMCALLclosure, ssa.OpARMCALLinter: s.Call(v) case ssa.OpARMCALLudiv: - v.Aux = gc.Udiv - s.Call(v) + p := s.Prog(obj.ACALL) + p.To.Type = obj.TYPE_MEM + p.To.Name = obj.NAME_EXTERN + p.To.Sym = gc.Udiv case ssa.OpARMDUFFZERO: p := s.Prog(obj.ADUFFZERO) p.To.Type = obj.TYPE_MEM diff --git a/src/cmd/compile/internal/gc/plive.go b/src/cmd/compile/internal/gc/plive.go index 4525426d4f..96fbb327f2 100644 --- a/src/cmd/compile/internal/gc/plive.go +++ b/src/cmd/compile/internal/gc/plive.go @@ -502,7 +502,7 @@ func onebitlivepointermap(lv *Liveness, liveout bvec, vars []*Node, args bvec, l // Returns true for instructions that are safe points that must be annotated // with liveness information. func issafepoint(v *ssa.Value) bool { - return v.Op.IsCall() || v.Op == ssa.OpARMCALLudiv + return v.Op.IsCall() } // Initializes the sets for solving the live variables. Visits all the -- 2.50.0