|  | // Copyright 2016 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 sys | 
|  |  | 
|  | //extern __builtin_ctz | 
|  | func builtinCtz32(uint32) int32 | 
|  |  | 
|  | //extern __builtin_ctzll | 
|  | func builtinCtz64(uint64) int32 | 
|  |  | 
|  | //go:nosplit | 
|  |  | 
|  | // Ctz64 counts trailing (low-order) zeroes, | 
|  | // and if all are zero, then 64. | 
|  | func Ctz64(x uint64) int { | 
|  | if x == 0 { | 
|  | return 64 | 
|  | } | 
|  | return int(builtinCtz64(x)) | 
|  | } | 
|  |  | 
|  | //go:nosplit | 
|  |  | 
|  | // Ctz32 counts trailing (low-order) zeroes, | 
|  | // and if all are zero, then 32. | 
|  | func Ctz32(x uint32) int { | 
|  | if x == 0 { | 
|  | return 32 | 
|  | } | 
|  | return int(builtinCtz32(x)) | 
|  | } | 
|  |  | 
|  | // Ctz8 returns the number of trailing zero bits in x; the result is 8 for x == 0. | 
|  | func Ctz8(x uint8) int { | 
|  | return int(ntz8tab[x]) | 
|  | } | 
|  |  | 
|  | //extern __builtin_bswap64 | 
|  | func bswap64(uint64) uint64 | 
|  |  | 
|  | //go:nosplit | 
|  |  | 
|  | // Bswap64 returns its input with byte order reversed | 
|  | // 0x0102030405060708 -> 0x0807060504030201 | 
|  | func Bswap64(x uint64) uint64 { | 
|  | return bswap64(x) | 
|  | } | 
|  |  | 
|  | //extern __builtin_bswap32 | 
|  | func bswap32(uint32) uint32 | 
|  |  | 
|  | //go:nosplit | 
|  |  | 
|  | // Bswap32 returns its input with byte order reversed | 
|  | // 0x01020304 -> 0x04030201 | 
|  | func Bswap32(x uint32) uint32 { | 
|  | return bswap32(x) | 
|  | } |