]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: CALLudiv on nacl/arm doesn't clobber R12
authorCherry Zhang <cherryyz@google.com>
Fri, 9 Feb 2018 17:47:33 +0000 (12:47 -0500)
committerCherry Zhang <cherryyz@google.com>
Wed, 14 Feb 2018 17:09:15 +0000 (17:09 +0000)
On nacl/arm, R12 is clobbered by the RET instruction in function
that has a frame. runtime.udiv doesn't have a frame, so it does
not clobber R12.

Change-Id: I0de448749f615908f6659e92d201ba3eb2f8266d
Reviewed-on: https://go-review.googlesource.com/93116
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/cmd/compile/internal/ssa/config.go
src/runtime/vlop_arm.s

index 13e5c50da13b3601a340a66319b89254cfa77b49..b4fee75b745ab525c889203f1ceace966427b670 100644 (file)
@@ -291,9 +291,6 @@ func NewConfig(arch string, types Types, ctxt *obj.Link, optimize bool) *Config
        if c.nacl {
                c.noDuffDevice = true // Don't use Duff's device on NaCl
 
-               // runtime call clobber R12 on nacl
-               opcodeTable[OpARMCALLudiv].reg.clobbers |= 1 << 12 // R12
-
                // Returns clobber BP on nacl/386, so the write
                // barrier does.
                opcodeTable[Op386LoweredWB].reg.clobbers |= 1 << 5 // BP
index e7e8ed2e05b5ef77da546c05d985d604017412de..52143b86e743ca1a17a3504f8d97b59965abbc45 100644 (file)
@@ -102,6 +102,9 @@ TEXT runtime·_sfloatpanic(SB),NOSPLIT|NOFRAME,$0
 #define Ra     R11
 
 // Be careful: Ra == R11 will be used by the linker for synthesized instructions.
+// Note: this function does not have a frame. If it ever needs a frame,
+// the RET instruction will clobber R12 on nacl, and the compiler's register
+// allocator needs to know.
 TEXT runtime·udiv(SB),NOSPLIT|NOFRAME,$0
        MOVBU   runtime·hardDiv(SB), Ra
        CMP     $0, Ra