github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/test/bench_test.go (about) 1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package test 6 7 import "testing" 8 9 var globl int64 10 var globl32 int32 11 12 func BenchmarkLoadAdd(b *testing.B) { 13 x := make([]int64, 1024) 14 y := make([]int64, 1024) 15 for i := 0; i < b.N; i++ { 16 var s int64 17 for i := range x { 18 s ^= x[i] + y[i] 19 } 20 globl = s 21 } 22 } 23 24 // Added for ppc64 extswsli on power9 25 func BenchmarkExtShift(b *testing.B) { 26 x := make([]int32, 1024) 27 for i := 0; i < b.N; i++ { 28 var s int64 29 for i := range x { 30 s ^= int64(x[i]+32) * 8 31 } 32 globl = s 33 } 34 } 35 36 func BenchmarkModify(b *testing.B) { 37 a := make([]int64, 1024) 38 v := globl 39 for i := 0; i < b.N; i++ { 40 for j := range a { 41 a[j] += v 42 } 43 } 44 } 45 46 func BenchmarkMullImm(b *testing.B) { 47 x := make([]int32, 1024) 48 for i := 0; i < b.N; i++ { 49 var s int32 50 for i := range x { 51 s += x[i] * 100 52 } 53 globl32 = s 54 } 55 } 56 57 func BenchmarkConstModify(b *testing.B) { 58 a := make([]int64, 1024) 59 for i := 0; i < b.N; i++ { 60 for j := range a { 61 a[j] += 3 62 } 63 } 64 } 65 66 func BenchmarkBitSet(b *testing.B) { 67 const N = 64 * 8 68 a := make([]uint64, N/64) 69 for i := 0; i < b.N; i++ { 70 for j := uint64(0); j < N; j++ { 71 a[j/64] |= 1 << (j % 64) 72 } 73 } 74 } 75 76 func BenchmarkBitClear(b *testing.B) { 77 const N = 64 * 8 78 a := make([]uint64, N/64) 79 for i := 0; i < b.N; i++ { 80 for j := uint64(0); j < N; j++ { 81 a[j/64] &^= 1 << (j % 64) 82 } 83 } 84 } 85 86 func BenchmarkBitToggle(b *testing.B) { 87 const N = 64 * 8 88 a := make([]uint64, N/64) 89 for i := 0; i < b.N; i++ { 90 for j := uint64(0); j < N; j++ { 91 a[j/64] ^= 1 << (j % 64) 92 } 93 } 94 } 95 96 func BenchmarkBitSetConst(b *testing.B) { 97 const N = 64 98 a := make([]uint64, N) 99 for i := 0; i < b.N; i++ { 100 for j := range a { 101 a[j] |= 1 << 37 102 } 103 } 104 } 105 106 func BenchmarkBitClearConst(b *testing.B) { 107 const N = 64 108 a := make([]uint64, N) 109 for i := 0; i < b.N; i++ { 110 for j := range a { 111 a[j] &^= 1 << 37 112 } 113 } 114 } 115 116 func BenchmarkBitToggleConst(b *testing.B) { 117 const N = 64 118 a := make([]uint64, N) 119 for i := 0; i < b.N; i++ { 120 for j := range a { 121 a[j] ^= 1 << 37 122 } 123 } 124 }