| // 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 | 
 | 		} | 
 | 	} | 
 | } |