]> Cypherpunks repositories - gostls13.git/commit
cmd/compile, cmd/internal: fine-grained fiddling with loop alignment
authorDavid Chase <drchase@google.com>
Tue, 2 Apr 2024 15:12:44 +0000 (11:12 -0400)
committerDavid Chase <drchase@google.com>
Wed, 15 May 2024 15:44:14 +0000 (15:44 +0000)
commit18d0e6a14f0de7fe1a32799f3d0982c274b3c091
treeef0772e1c1cb0d1ebfad1d05c2c9ce9da5d710a1
parent31c81500828993d99af3392742abde64194da858
cmd/compile, cmd/internal: fine-grained fiddling with loop alignment

This appears to be useful only on amd64, and was specifically
benchmarked on Apple Silicon and did not produce any benefit there.
This CL adds the assembly instruction `PCALIGNMAX align,amount`
which aligns to `align` if that can be achieved with `amount`
or fewer bytes of padding. (0 means never, but will align the
enclosing function.)

Specifically, if low-order-address-bits + amount are
greater than or equal to align; thus, `PCALIGNMAX 64,63` is
the same as `PCALIGN 64` and `PCALIGNMAX 64,0` will never
emit any alignment, but will still cause the function itself
to be aligned to (at least) 64 bytes.

Change-Id: Id51a056f1672f8095e8f755e01f72836c9686aa3
Reviewed-on: https://go-review.googlesource.com/c/go/+/577935
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
14 files changed:
src/cmd/compile/internal/base/debug.go
src/cmd/compile/internal/base/flag.go
src/cmd/compile/internal/gc/compile.go
src/cmd/compile/internal/gc/main.go
src/cmd/compile/internal/inline/inl.go
src/cmd/compile/internal/ssa/block.go
src/cmd/compile/internal/ssa/func.go
src/cmd/compile/internal/ssa/looprotate.go
src/cmd/compile/internal/ssagen/pgen.go
src/cmd/compile/internal/ssagen/ssa.go
src/cmd/internal/obj/arm64/asm7.go
src/cmd/internal/obj/link.go
src/cmd/internal/obj/util.go
src/cmd/internal/obj/x86/asm6.go