Commit 15ea6114 authored by Keith Randall's avatar Keith Randall

runtime: use unaligned loads on ppc64

benchmark                      old ns/op     new ns/op     delta
BenchmarkAlignedLoad-160       8.67          7.42          -14.42%
BenchmarkUnalignedLoad-160     8.63          7.37          -14.60%

Change-Id: Id4609d7b4038c4d2ec332efc4fe6f1adfb61b82b
Reviewed-on: https://go-review.googlesource.com/20812Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 98232276
...@@ -193,3 +193,6 @@ func SetTracebackEnv(level string) { ...@@ -193,3 +193,6 @@ func SetTracebackEnv(level string) {
setTraceback(level) setTraceback(level)
traceback_env = traceback_cache traceback_env = traceback_cache
} }
var ReadUnaligned32 = readUnaligned32
var ReadUnaligned64 = readUnaligned64
...@@ -11,6 +11,7 @@ import ( ...@@ -11,6 +11,7 @@ import (
. "runtime" . "runtime"
"strings" "strings"
"testing" "testing"
"unsafe"
) )
// Smhasher is a torture test for hash functions. // Smhasher is a torture test for hash functions.
...@@ -658,3 +659,24 @@ func TestStructHash(t *testing.T) { ...@@ -658,3 +659,24 @@ func TestStructHash(t *testing.T) {
t.Errorf("too many allocs %f - hash not balanced", n) t.Errorf("too many allocs %f - hash not balanced", n)
} }
} }
var sink uint64
func BenchmarkAlignedLoad(b *testing.B) {
var buf [16]byte
p := unsafe.Pointer(&buf[0])
var s uint64
for i := 0; i < b.N; i++ {
s += ReadUnaligned64(p)
}
sink = s
}
func BenchmarkUnalignedLoad(b *testing.B) {
var buf [16]byte
p := unsafe.Pointer(&buf[1])
var s uint64
for i := 0; i < b.N; i++ {
s += ReadUnaligned64(p)
}
sink = s
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build 386 amd64 amd64p32 arm64 // +build 386 amd64 amd64p32 arm64 ppc64 ppc64le
package runtime package runtime
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// +build arm ppc64 ppc64le mips64 mips64le // +build arm mips64 mips64le
package runtime package runtime
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment