github.com/guyezi/gofrontend@v0.0.0-20200228202240-7a62a49e62c0/libgo/go/runtime/internal/sys/intrinsics.go (about) 1 // Copyright 2016 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 sys 6 7 //extern __builtin_ctz 8 func builtinCtz32(uint32) int32 9 10 //extern __builtin_ctzll 11 func builtinCtz64(uint64) int32 12 13 //go:nosplit 14 15 // Ctz64 counts trailing (low-order) zeroes, 16 // and if all are zero, then 64. 17 func Ctz64(x uint64) int { 18 if x == 0 { 19 return 64 20 } 21 return int(builtinCtz64(x)) 22 } 23 24 //go:nosplit 25 26 // Ctz32 counts trailing (low-order) zeroes, 27 // and if all are zero, then 32. 28 func Ctz32(x uint32) int { 29 if x == 0 { 30 return 32 31 } 32 return int(builtinCtz32(x)) 33 } 34 35 // Ctz8 returns the number of trailing zero bits in x; the result is 8 for x == 0. 36 func Ctz8(x uint8) int { 37 return int(ntz8tab[x]) 38 } 39 40 //extern __builtin_bswap64 41 func bswap64(uint64) uint64 42 43 //go:nosplit 44 45 // Bswap64 returns its input with byte order reversed 46 // 0x0102030405060708 -> 0x0807060504030201 47 func Bswap64(x uint64) uint64 { 48 return bswap64(x) 49 } 50 51 //extern __builtin_bswap32 52 func bswap32(uint32) uint32 53 54 //go:nosplit 55 56 // Bswap32 returns its input with byte order reversed 57 // 0x01020304 -> 0x04030201 58 func Bswap32(x uint32) uint32 { 59 return bswap32(x) 60 }