]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: simplify readUnaligned
authorIlya Tocar <ilya.tocar@intel.com>
Wed, 13 Jun 2018 19:20:19 +0000 (14:20 -0500)
committerIlya Tocar <ilya.tocar@intel.com>
Wed, 13 Mar 2019 17:50:18 +0000 (17:50 +0000)
We already have a pure go code sequence that is compiled into single load.
Just use it everywhere, instead of pointer hackery.
Passes toolstash-check.

Change-Id: I0c42b5532fa9a5665da3385913609c6d42aaff27
Reviewed-on: https://go-review.googlesource.com/c/go/+/118568
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/alg.go
src/runtime/unaligned1.go [deleted file]
src/runtime/unaligned2.go [deleted file]

index 1c6795a1faffde8ee20bbeed3b51f8f811547eb9..732d32bf41e5d282e2bc822efb3f19bbd0f44cb2 100644 (file)
@@ -316,3 +316,21 @@ func initAlgAES() {
        // Initialize with random data so hash collisions will be hard to engineer.
        getRandomData(aeskeysched[:])
 }
+
+// Note: These routines perform the read with an native endianness.
+func readUnaligned32(p unsafe.Pointer) uint32 {
+       q := (*[4]byte)(p)
+       if sys.BigEndian {
+               return uint32(q[3]) | uint32(q[2])<<8 | uint32(q[1])<<16 | uint32(q[0])<<24
+       }
+       return uint32(q[0]) | uint32(q[1])<<8 | uint32(q[2])<<16 | uint32(q[3])<<24
+}
+
+func readUnaligned64(p unsafe.Pointer) uint64 {
+       q := (*[8]byte)(p)
+       if sys.BigEndian {
+               return uint64(q[7]) | uint64(q[6])<<8 | uint64(q[5])<<16 | uint64(q[4])<<24 |
+                       uint64(q[3])<<32 | uint64(q[2])<<40 | uint64(q[1])<<48 | uint64(q[0])<<56
+       }
+       return uint64(q[0]) | uint64(q[1])<<8 | uint64(q[2])<<16 | uint64(q[3])<<24 | uint64(q[4])<<32 | uint64(q[5])<<40 | uint64(q[6])<<48 | uint64(q[7])<<56
+}
diff --git a/src/runtime/unaligned1.go b/src/runtime/unaligned1.go
deleted file mode 100644 (file)
index 1d90bdf..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build 386 amd64 amd64p32 arm64 ppc64 ppc64le s390x wasm
-
-package runtime
-
-import "unsafe"
-
-func readUnaligned32(p unsafe.Pointer) uint32 {
-       return *(*uint32)(p)
-}
-
-func readUnaligned64(p unsafe.Pointer) uint64 {
-       return *(*uint64)(p)
-}
diff --git a/src/runtime/unaligned2.go b/src/runtime/unaligned2.go
deleted file mode 100644 (file)
index 28b6119..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2014 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build arm mips mipsle mips64 mips64le
-
-package runtime
-
-import "unsafe"
-
-// Note: These routines perform the read with an unspecified endianness.
-func readUnaligned32(p unsafe.Pointer) uint32 {
-       q := (*[4]byte)(p)
-       return uint32(q[0]) + uint32(q[1])<<8 + uint32(q[2])<<16 + uint32(q[3])<<24
-}
-
-func readUnaligned64(p unsafe.Pointer) uint64 {
-       q := (*[8]byte)(p)
-       return uint64(q[0]) + uint64(q[1])<<8 + uint64(q[2])<<16 + uint64(q[3])<<24 + uint64(q[4])<<32 + uint64(q[5])<<40 + uint64(q[6])<<48 + uint64(q[7])<<56
-}