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>
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
#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