Commit 888d44d3 authored by Dave Cheney's avatar Dave Cheney

cmd/internal/gc, cmd/7g: use zero register in Componentgen

Fixes #9855

Use an architectural zero register as the source for zeroing, if available.

Change-Id: Ie5b4ba4e3d356c6f892bfd1cebd14d5152bdeeb0
Reviewed-on: https://go-review.googlesource.com/8722Reviewed-by: 's avatarKeith Randall <khr@golang.org>
parent 47515e01
...@@ -49,6 +49,7 @@ func main() { ...@@ -49,6 +49,7 @@ func main() {
gc.Thearch.REGRETURN = arm64.REG_R0 gc.Thearch.REGRETURN = arm64.REG_R0
gc.Thearch.REGMIN = arm64.REG_R0 gc.Thearch.REGMIN = arm64.REG_R0
gc.Thearch.REGMAX = arm64.REG_R31 gc.Thearch.REGMAX = arm64.REG_R31
gc.Thearch.REGZERO = arm64.REGZERO
gc.Thearch.FREGMIN = arm64.REG_F0 gc.Thearch.FREGMIN = arm64.REG_F0
gc.Thearch.FREGMAX = arm64.REG_F31 gc.Thearch.FREGMAX = arm64.REG_F31
gc.Thearch.MAXWIDTH = MAXWIDTH gc.Thearch.MAXWIDTH = MAXWIDTH
......
...@@ -1183,12 +1183,18 @@ func Componentgen(nr *Node, nl *Node) bool { ...@@ -1183,12 +1183,18 @@ func Componentgen(nr *Node, nl *Node) bool {
} }
} else { } else {
// When zeroing, prepare a register containing zero. // When zeroing, prepare a register containing zero.
var tmp Node if Thearch.REGZERO != 0 {
Nodconst(&tmp, nl.Type, 0) // cpu has a dedicated zero register
Nodreg(&nodr, Types[TUINT], Thearch.REGZERO)
} else {
// no dedicated zero register
var tmp Node
Nodconst(&tmp, nl.Type, 0)
Regalloc(&nodr, Types[TUINT], nil) Regalloc(&nodr, Types[TUINT], nil)
Thearch.Gmove(&tmp, &nodr) Thearch.Gmove(&tmp, &nodr)
defer Regfree(&nodr) defer Regfree(&nodr)
}
} }
// nl and nr are 'cadable' which basically means they are names (variables) now. // nl and nr are 'cadable' which basically means they are names (variables) now.
......
...@@ -769,6 +769,7 @@ type Arch struct { ...@@ -769,6 +769,7 @@ type Arch struct {
REGRETURN int // AX REGRETURN int // AX
REGMIN int REGMIN int
REGMAX int REGMAX int
REGZERO int // architectural zero register, if available
FREGMIN int FREGMIN int
FREGMAX int FREGMAX int
MAXWIDTH int64 MAXWIDTH int64
......
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