mirror of
https://github.com/golang/go
synced 2024-11-24 10:40:10 -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
@ -185,6 +185,7 @@ var allAsmTests = []*asmTests{
|
|||||||
{
|
{
|
||||||
arch: "arm64",
|
arch: "arm64",
|
||||||
os: "linux",
|
os: "linux",
|
||||||
|
imports: []string{"math/bits"},
|
||||||
tests: linuxARM64Tests,
|
tests: linuxARM64Tests,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -576,6 +577,30 @@ var linuxAMD64Tests = []*asmTest{
|
|||||||
`,
|
`,
|
||||||
[]string{"\tBSFQ\t", "\tORQ\t\\$256,"},
|
[]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{
|
var linux386Tests = []*asmTest{
|
||||||
@ -776,6 +801,23 @@ var linuxS390XTests = []*asmTest{
|
|||||||
`,
|
`,
|
||||||
[]string{"\tFLOGR\t", "\tOR\t\\$256,"},
|
[]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{
|
var linuxARMTests = []*asmTest{
|
||||||
@ -854,6 +896,22 @@ var linuxARM64Tests = []*asmTest{
|
|||||||
`,
|
`,
|
||||||
[]string{"\tRORW\t[$]25,"},
|
[]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
|
// 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)
|
return s.newValue1(ssa.OpCtz64, Types[TINT], y)
|
||||||
},
|
},
|
||||||
sys.AMD64, sys.ARM64, sys.S390X)
|
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 ********/
|
/******** sync/atomic ********/
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user