From d7ac5d148039822159601ebbf3512431d81e204f Mon Sep 17 00:00:00 2001 From: Wayne Zuo Date: Mon, 6 Feb 2023 21:21:52 +0800 Subject: [PATCH] cmd/compile: intrinsify math/bits/ReverseBytes{32|64} for 386 The BSWAPL instruction is supported in i486 and newer. https://github.com/golang/go/wiki/MinimumRequirements#386 says we support "All Pentium MMX or later". The Pentium is also referred to as i586, so that we are safe with these instructions. Change-Id: I6dea1f9d864a45bb07c8f8f35a81cfe16cca216c Reviewed-on: https://go-review.googlesource.com/c/go/+/465515 Run-TryBot: Wayne Zuo Reviewed-by: Keith Randall TryBot-Result: Gopher Robot Reviewed-by: Matthew Dempsky Reviewed-by: Keith Randall --- src/cmd/compile/internal/ssagen/ssa.go | 6 +++--- test/codegen/mathbits.go | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index f31cf29925..2e2a6b411b 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -4000,10 +4000,10 @@ func InitTables() { }, sys.ARM64, sys.PPC64) - /* Use only on Power10 as the new byte reverse instructions that Power10 provide - make it worthwhile as an intrinsic */ - brev_arch := []sys.ArchFamily{sys.AMD64, sys.ARM64, sys.ARM, sys.S390X} + brev_arch := []sys.ArchFamily{sys.AMD64, sys.I386, sys.ARM64, sys.ARM, sys.S390X} if buildcfg.GOPPC64 >= 10 { + // Use only on Power10 as the new byte reverse instructions that Power10 provide + // make it worthwhile as an intrinsic brev_arch = append(brev_arch, sys.PPC64) } /******** runtime/internal/sys ********/ diff --git a/test/codegen/mathbits.go b/test/codegen/mathbits.go index 0eed27a619..86a44d7c93 100644 --- a/test/codegen/mathbits.go +++ b/test/codegen/mathbits.go @@ -189,6 +189,7 @@ func OnesCount8(n uint8) int { func ReverseBytes(n uint) uint { // amd64:"BSWAPQ" + // 386:"BSWAPL" // s390x:"MOVDBR" // arm64:"REV" return bits.ReverseBytes(n) @@ -196,6 +197,7 @@ func ReverseBytes(n uint) uint { func ReverseBytes64(n uint64) uint64 { // amd64:"BSWAPQ" + // 386:"BSWAPL" // s390x:"MOVDBR" // arm64:"REV" // ppc64x/power10: "BRD" @@ -204,6 +206,7 @@ func ReverseBytes64(n uint64) uint64 { func ReverseBytes32(n uint32) uint32 { // amd64:"BSWAPL" + // 386:"BSWAPL" // s390x:"MOVWBR" // arm64:"REVW" // ppc64x/power10: "BRW" -- 2.50.0