| // Copyright 2020 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. | |
| package test | |
| import "testing" | |
| var globl int64 | |
| var globl32 int32 | |
| func BenchmarkLoadAdd(b *testing.B) { | |
| x := make([]int64, 1024) | |
| y := make([]int64, 1024) | |
| for i := 0; i < b.N; i++ { | |
| var s int64 | |
| for i := range x { | |
| s ^= x[i] + y[i] | |
| } | |
| globl = s | |
| } | |
| } | |
| // Added for ppc64 extswsli on power9 | |
| func BenchmarkExtShift(b *testing.B) { | |
| x := make([]int32, 1024) | |
| for i := 0; i < b.N; i++ { | |
| var s int64 | |
| for i := range x { | |
| s ^= int64(x[i]+32) * 8 | |
| } | |
| globl = s | |
| } | |
| } | |
| func BenchmarkModify(b *testing.B) { | |
| a := make([]int64, 1024) | |
| v := globl | |
| for i := 0; i < b.N; i++ { | |
| for j := range a { | |
| a[j] += v | |
| } | |
| } | |
| } | |
| func BenchmarkMullImm(b *testing.B) { | |
| x := make([]int32, 1024) | |
| for i := 0; i < b.N; i++ { | |
| var s int32 | |
| for i := range x { | |
| s += x[i] * 100 | |
| } | |
| globl32 = s | |
| } | |
| } | |
| func BenchmarkConstModify(b *testing.B) { | |
| a := make([]int64, 1024) | |
| for i := 0; i < b.N; i++ { | |
| for j := range a { | |
| a[j] += 3 | |
| } | |
| } | |
| } | |
| func BenchmarkBitSet(b *testing.B) { | |
| const N = 64 * 8 | |
| a := make([]uint64, N/64) | |
| for i := 0; i < b.N; i++ { | |
| for j := uint64(0); j < N; j++ { | |
| a[j/64] |= 1 << (j % 64) | |
| } | |
| } | |
| } | |
| func BenchmarkBitClear(b *testing.B) { | |
| const N = 64 * 8 | |
| a := make([]uint64, N/64) | |
| for i := 0; i < b.N; i++ { | |
| for j := uint64(0); j < N; j++ { | |
| a[j/64] &^= 1 << (j % 64) | |
| } | |
| } | |
| } | |
| func BenchmarkBitToggle(b *testing.B) { | |
| const N = 64 * 8 | |
| a := make([]uint64, N/64) | |
| for i := 0; i < b.N; i++ { | |
| for j := uint64(0); j < N; j++ { | |
| a[j/64] ^= 1 << (j % 64) | |
| } | |
| } | |
| } | |
| func BenchmarkBitSetConst(b *testing.B) { | |
| const N = 64 | |
| a := make([]uint64, N) | |
| for i := 0; i < b.N; i++ { | |
| for j := range a { | |
| a[j] |= 1 << 37 | |
| } | |
| } | |
| } | |
| func BenchmarkBitClearConst(b *testing.B) { | |
| const N = 64 | |
| a := make([]uint64, N) | |
| for i := 0; i < b.N; i++ { | |
| for j := range a { | |
| a[j] &^= 1 << 37 | |
| } | |
| } | |
| } | |
| func BenchmarkBitToggleConst(b *testing.B) { | |
| const N = 64 | |
| a := make([]uint64, N) | |
| for i := 0; i < b.N; i++ { | |
| for j := range a { | |
| a[j] ^= 1 << 37 | |
| } | |
| } | |
| } |