MOVQ $0, mem encodes two bytes longer than MOVQ X15, mem, and MOVL $0, mem encodes one byte longer than MOVL X15, mem. In ABIInternal functions on amd64, X15 is maintained as zero except on Plan 9. Use the XMM forms of MOVQ and MOVL when emitting plain and indexed zero stores. Selecting the encoding during emission leaves the existing SSA operations available to store-combining rules. Retain immediate stores for ABI0 and Plan 9, where X15 is not known to contain zero. This replaces 5,598 stores when compiling the standard library, reducing text by 11,004 bytes with no change in instruction count. Change-Id: Ibccdce5fd17f81be8c2cf505c8144fa612e71101 Reviewed-on: https://go-review.googlesource.com/c/go/+/810120 Reviewed-by: Jorropo <jorropo.pgm@gmail.com> Auto-Submit: Jorropo <jorropo.pgm@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com>
49 lines
915 B
Go
49 lines
915 B
Go
// asmcheck
|
|
|
|
//go:build !goexperiment.cgocheck2
|
|
|
|
// Copyright 2018 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package codegen
|
|
|
|
// This file contains code generation tests related to the handling of
|
|
// struct types.
|
|
|
|
// ------------- //
|
|
// Zeroing //
|
|
// ------------- //
|
|
|
|
type Z1 struct {
|
|
a, b, c int
|
|
}
|
|
|
|
func Zero1(t *Z1) { // Issue #18370
|
|
// amd64:`MOVUPS X[0-9]+, \(.*\)` `MOVQ X15, 16\(.*\)`
|
|
*t = Z1{}
|
|
}
|
|
|
|
type Z2 struct {
|
|
a, b, c *int
|
|
}
|
|
|
|
func Zero2(t *Z2) {
|
|
// amd64:`MOVUPS X[0-9]+, \(.*\)` `MOVQ X15, 16\(.*\)`
|
|
// amd64:`.*runtime[.]gcWriteBarrier.*\(SB\)`
|
|
*t = Z2{}
|
|
}
|
|
|
|
// ------------------ //
|
|
// Initializing //
|
|
// ------------------ //
|
|
|
|
type I1 struct {
|
|
a, b, c, d int
|
|
}
|
|
|
|
func Init1(p *I1) { // Issue #18872
|
|
// amd64:`MOVQ [$]1` `MOVQ [$]2` `MOVQ [$]3` `MOVQ [$]4`
|
|
*p = I1{1, 2, 3, 4}
|
|
}
|