mirror of
https://github.com/golang/go
synced 2024-11-24 05:10:19 -07:00
cmd/compile: intrinsify math/bits.ReverseBytes
Update #18616 Change-Id: I0c2d643cbbeb131b4c9b12194697afa4af48e1d2 Reviewed-on: https://go-review.googlesource.com/38166 Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
793e4ec3dd
commit
dd9892e31b
@ -183,9 +183,10 @@ var allAsmTests = []*asmTests{
|
||||
tests: linuxARMTests,
|
||||
},
|
||||
{
|
||||
arch: "arm64",
|
||||
os: "linux",
|
||||
tests: linuxARM64Tests,
|
||||
arch: "arm64",
|
||||
os: "linux",
|
||||
imports: []string{"math/bits"},
|
||||
tests: linuxARM64Tests,
|
||||
},
|
||||
}
|
||||
|
||||
@ -576,6 +577,30 @@ var linuxAMD64Tests = []*asmTest{
|
||||
`,
|
||||
[]string{"\tBSFQ\t", "\tORQ\t\\$256,"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f45(a uint64) uint64 {
|
||||
return bits.ReverseBytes64(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tBSWAPQ\t"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f46(a uint32) uint32 {
|
||||
return bits.ReverseBytes32(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tBSWAPL\t"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f47(a uint16) uint16 {
|
||||
return bits.ReverseBytes16(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tROLW\t\\$8,"},
|
||||
},
|
||||
}
|
||||
|
||||
var linux386Tests = []*asmTest{
|
||||
@ -776,6 +801,23 @@ var linuxS390XTests = []*asmTest{
|
||||
`,
|
||||
[]string{"\tFLOGR\t", "\tOR\t\\$256,"},
|
||||
},
|
||||
// Intrinsic tests for math/bits
|
||||
{
|
||||
`
|
||||
func f22(a uint64) uint64 {
|
||||
return bits.ReverseBytes64(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tMOVDBR\t"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f23(a uint32) uint32 {
|
||||
return bits.ReverseBytes32(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tMOVWBR\t"},
|
||||
},
|
||||
}
|
||||
|
||||
var linuxARMTests = []*asmTest{
|
||||
@ -854,6 +896,22 @@ var linuxARM64Tests = []*asmTest{
|
||||
`,
|
||||
[]string{"\tRORW\t[$]25,"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f22(a uint64) uint64 {
|
||||
return bits.ReverseBytes64(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tREV\t"},
|
||||
},
|
||||
{
|
||||
`
|
||||
func f23(a uint32) uint32 {
|
||||
return bits.ReverseBytes32(a)
|
||||
}
|
||||
`,
|
||||
[]string{"\tREVW\t"},
|
||||
},
|
||||
}
|
||||
|
||||
// TestLineNumber checks to make sure the generated assembly has line numbers
|
||||
|
@ -2702,6 +2702,10 @@ func init() {
|
||||
return s.newValue1(ssa.OpCtz64, Types[TINT], y)
|
||||
},
|
||||
sys.AMD64, sys.ARM64, sys.S390X)
|
||||
alias("math/bits", "ReverseBytes64", "runtime/internal/sys", "Bswap64", all...)
|
||||
alias("math/bits", "ReverseBytes32", "runtime/internal/sys", "Bswap32", all...)
|
||||
// ReverseBytes inlines correctly, no need to intrinsify it.
|
||||
// ReverseBytes16 lowers to a rotate, no need for anything special here.
|
||||
|
||||
/******** sync/atomic ********/
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user