aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorMateusz Poliwczak <mpoliwczak34@gmail.com>2024-05-10 06:06:47 +0000
committerGopher Robot <gobot@golang.org>2024-05-10 20:31:29 +0000
commitf3a743981d0af6ead0c4f64ef4c299c342bba4de (patch)
tree719e765d1fe5f5ec13477dcc93a92cc36a492730 /src/cmd
parentf6c3a3e3c8c532e73e9dff7acdf04e2b4d5d9537 (diff)
downloadgo-f3a743981d0af6ead0c4f64ef4c299c342bba4de.tar.gz
go-f3a743981d0af6ead0c4f64ef4c299c342bba4de.zip
internal/byteorder: new package
Currently in a lot of packages we define functions for appending/decoding mostly BigEndian data (see internal/chacha8rand, net/netip, internal/boring/sha, hash/crc64, and probably more), because we don't want to depend on encoding/binary, because of #54097. This change introduces a new package internal/byteorder, that will allow us to remove all of the functions and replace them with internal/byteorder. Updates #54097 Change-Id: I03e5ea1eb721dd98bdabdb25786f889cc5de54c5 GitHub-Last-Rev: 3f07d3dfb453a9e679395711f9b93e25f9340a3b GitHub-Pull-Request: golang/go#67183 Reviewed-on: https://go-review.googlesource.com/c/go/+/583298 Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Commit-Queue: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/inline/inl.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go
index 3f65b2bbc9..931f79552a 100644
--- a/src/cmd/compile/internal/inline/inl.go
+++ b/src/cmd/compile/internal/inline/inl.go
@@ -545,6 +545,28 @@ opSwitch:
}
}
}
+
+ if n.Fun.Op() == ir.ONAME {
+ name := n.Fun.(*ir.Name)
+ if name.Class == ir.PFUNC {
+ // Special case: on architectures that can do unaligned loads,
+ // explicitly mark internal/byteorder methods as cheap,
+ // because in practice they are, even though our inlining
+ // budgeting system does not see that. See issue 42958.
+ if base.Ctxt.Arch.CanMergeLoads && name.Sym().Pkg.Path == "internal/byteorder" {
+ switch name.Sym().Name {
+ case "LeUint64", "LeUint32", "LeUint16",
+ "BeUint64", "BeUint32", "BeUint16",
+ "LePutUint64", "LePutUint32", "LePutUint16",
+ "BePutUint64", "BePutUint32", "BePutUint16",
+ "LeAppendUint64", "LeAppendUint32", "LeAppendUint16",
+ "BeAppendUint64", "BeAppendUint32", "BeAppendUint16":
+ cheap = true
+ }
+ }
+ }
+ }
+
if cheap {
break // treat like any other node, that is, cost of 1
}