aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWayne Zuo <wdvxdr@golangcn.org>2023-02-06 21:27:37 +0800
committerWayne Zuo <wdvxdr@golangcn.org>2023-02-08 03:43:35 +0000
commit0602e2cdbc4b42e90c453e6ae365ad5f13f61c92 (patch)
treec88eb61d38e7bc5e90bdd7c25dd3b79708af0729
parentd7ac5d148039822159601ebbf3512431d81e204f (diff)
downloadgo-0602e2cdbc4b42e90c453e6ae365ad5f13f61c92.tar.xz
runtime/internal/sys: remove Bswap{32|64} assembly for 386
CL 465515 instrinsify these functions, so that we can remove them. Change-Id: I81c9eb62ecf56d5a292dc5aced542b36b53847dc Reviewed-on: https://go-review.googlesource.com/c/go/+/465516 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Wayne Zuo <wdvxdr@golangcn.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
-rw-r--r--src/runtime/internal/sys/intrinsics.go32
-rw-r--r--src/runtime/internal/sys/intrinsics_386.s15
-rw-r--r--src/runtime/internal/sys/intrinsics_common.go32
-rw-r--r--src/runtime/internal/sys/intrinsics_stubs.go2
4 files changed, 32 insertions, 49 deletions
diff --git a/src/runtime/internal/sys/intrinsics.go b/src/runtime/internal/sys/intrinsics.go
index 902d893178..b68b3cd93d 100644
--- a/src/runtime/internal/sys/intrinsics.go
+++ b/src/runtime/internal/sys/intrinsics.go
@@ -76,35 +76,3 @@ func TrailingZeros64(x uint64) int {
func TrailingZeros8(x uint8) int {
return int(ntz8tab[x])
}
-
-// Bswap64 returns its input with byte order reversed
-// 0x0102030405060708 -> 0x0807060504030201
-func Bswap64(x uint64) uint64 {
- c8 := uint64(0x00ff00ff00ff00ff)
- a := x >> 8 & c8
- b := (x & c8) << 8
- x = a | b
- c16 := uint64(0x0000ffff0000ffff)
- a = x >> 16 & c16
- b = (x & c16) << 16
- x = a | b
- c32 := uint64(0x00000000ffffffff)
- a = x >> 32 & c32
- b = (x & c32) << 32
- x = a | b
- return x
-}
-
-// Bswap32 returns its input with byte order reversed
-// 0x01020304 -> 0x04030201
-func Bswap32(x uint32) uint32 {
- c8 := uint32(0x00ff00ff)
- a := x >> 8 & c8
- b := (x & c8) << 8
- x = a | b
- c16 := uint32(0x0000ffff)
- a = x >> 16 & c16
- b = (x & c16) << 16
- x = a | b
- return x
-}
diff --git a/src/runtime/internal/sys/intrinsics_386.s b/src/runtime/internal/sys/intrinsics_386.s
index f33ade0a3a..fe4c561b99 100644
--- a/src/runtime/internal/sys/intrinsics_386.s
+++ b/src/runtime/internal/sys/intrinsics_386.s
@@ -41,18 +41,3 @@ TEXT runtime∕internal∕sys·TrailingZeros8(SB), NOSPLIT, $0-8
MOVL $8, AX
MOVL AX, ret+4(FP)
RET
-
-TEXT runtime∕internal∕sys·Bswap64(SB), NOSPLIT, $0-16
- MOVL x_lo+0(FP), AX
- MOVL x_hi+4(FP), BX
- BSWAPL AX
- BSWAPL BX
- MOVL BX, ret_lo+8(FP)
- MOVL AX, ret_hi+12(FP)
- RET
-
-TEXT runtime∕internal∕sys·Bswap32(SB), NOSPLIT, $0-8
- MOVL x+0(FP), AX
- BSWAPL AX
- MOVL AX, ret+4(FP)
- RET
diff --git a/src/runtime/internal/sys/intrinsics_common.go b/src/runtime/internal/sys/intrinsics_common.go
index 1461551dda..78ba44485b 100644
--- a/src/runtime/internal/sys/intrinsics_common.go
+++ b/src/runtime/internal/sys/intrinsics_common.go
@@ -93,6 +93,38 @@ func Len8(x uint8) int {
return int(len8tab[x])
}
+// Bswap64 returns its input with byte order reversed
+// 0x0102030405060708 -> 0x0807060504030201
+func Bswap64(x uint64) uint64 {
+ c8 := uint64(0x00ff00ff00ff00ff)
+ a := x >> 8 & c8
+ b := (x & c8) << 8
+ x = a | b
+ c16 := uint64(0x0000ffff0000ffff)
+ a = x >> 16 & c16
+ b = (x & c16) << 16
+ x = a | b
+ c32 := uint64(0x00000000ffffffff)
+ a = x >> 32 & c32
+ b = (x & c32) << 32
+ x = a | b
+ return x
+}
+
+// Bswap32 returns its input with byte order reversed
+// 0x01020304 -> 0x04030201
+func Bswap32(x uint32) uint32 {
+ c8 := uint32(0x00ff00ff)
+ a := x >> 8 & c8
+ b := (x & c8) << 8
+ x = a | b
+ c16 := uint32(0x0000ffff)
+ a = x >> 16 & c16
+ b = (x & c16) << 16
+ x = a | b
+ return x
+}
+
// Prefetch prefetches data from memory addr to cache
//
// AMD64: Produce PREFETCHT0 instruction
diff --git a/src/runtime/internal/sys/intrinsics_stubs.go b/src/runtime/internal/sys/intrinsics_stubs.go
index 66cfcded40..375aac190a 100644
--- a/src/runtime/internal/sys/intrinsics_stubs.go
+++ b/src/runtime/internal/sys/intrinsics_stubs.go
@@ -9,5 +9,3 @@ package sys
func TrailingZeros64(x uint64) int
func TrailingZeros32(x uint32) int
func TrailingZeros8(x uint8) int
-func Bswap64(x uint64) uint64
-func Bswap32(x uint32) uint32