github.com/cockroachdb/cockroachdb-parser@v0.23.3-0.20240213214944-911057d40c9a/pkg/util/encoding/complement_fast.go (about) 1 // Copyright 2015 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 //go:build 386 || amd64 12 // +build 386 amd64 13 14 package encoding 15 16 import "unsafe" 17 18 // The idea for the fast ones complement is borrowed from fastXORBytes 19 // in the crypto standard library. 20 const wordSize = int(unsafe.Sizeof(uintptr(0))) 21 22 func onesComplement(b []byte) { 23 n := len(b) 24 w := n / wordSize 25 if w > 0 { 26 bw := *(*[]uintptr)(unsafe.Pointer(&b)) 27 for i := 0; i < w; i++ { 28 bw[i] = ^bw[i] 29 } 30 } 31 32 for i := w * wordSize; i < n; i++ { 33 b[i] = ^b[i] 34 } 35 }