const uintSize … const UintSize … // LeadingZeros returns the number of leading zero bits in x; the result is [UintSize] for x == 0. func LeadingZeros(x uint) int { … } // LeadingZeros8 returns the number of leading zero bits in x; the result is 8 for x == 0. func LeadingZeros8(x uint8) int { … } // LeadingZeros16 returns the number of leading zero bits in x; the result is 16 for x == 0. func LeadingZeros16(x uint16) int { … } // LeadingZeros32 returns the number of leading zero bits in x; the result is 32 for x == 0. func LeadingZeros32(x uint32) int { … } // LeadingZeros64 returns the number of leading zero bits in x; the result is 64 for x == 0. func LeadingZeros64(x uint64) int { … } const deBruijn32 … var deBruijn32tab … const deBruijn64 … var deBruijn64tab … // TrailingZeros returns the number of trailing zero bits in x; the result is [UintSize] for x == 0. func TrailingZeros(x uint) int { … } // TrailingZeros8 returns the number of trailing zero bits in x; the result is 8 for x == 0. func TrailingZeros8(x uint8) int { … } // TrailingZeros16 returns the number of trailing zero bits in x; the result is 16 for x == 0. func TrailingZeros16(x uint16) int { … } // TrailingZeros32 returns the number of trailing zero bits in x; the result is 32 for x == 0. func TrailingZeros32(x uint32) int { … } // TrailingZeros64 returns the number of trailing zero bits in x; the result is 64 for x == 0. func TrailingZeros64(x uint64) int { … } const m0 … const m1 … const m2 … const m3 … const m4 … // OnesCount returns the number of one bits ("population count") in x. func OnesCount(x uint) int { … } // OnesCount8 returns the number of one bits ("population count") in x. func OnesCount8(x uint8) int { … } // OnesCount16 returns the number of one bits ("population count") in x. func OnesCount16(x uint16) int { … } // OnesCount32 returns the number of one bits ("population count") in x. func OnesCount32(x uint32) int { … } // OnesCount64 returns the number of one bits ("population count") in x. func OnesCount64(x uint64) int { … } // RotateLeft returns the value of x rotated left by (k mod [UintSize]) bits. // To rotate x right by k bits, call RotateLeft(x, -k). // // This function's execution time does not depend on the inputs. func RotateLeft(x uint, k int) uint { … } // RotateLeft8 returns the value of x rotated left by (k mod 8) bits. // To rotate x right by k bits, call RotateLeft8(x, -k). // // This function's execution time does not depend on the inputs. func RotateLeft8(x uint8, k int) uint8 { … } // RotateLeft16 returns the value of x rotated left by (k mod 16) bits. // To rotate x right by k bits, call RotateLeft16(x, -k). // // This function's execution time does not depend on the inputs. func RotateLeft16(x uint16, k int) uint16 { … } // RotateLeft32 returns the value of x rotated left by (k mod 32) bits. // To rotate x right by k bits, call RotateLeft32(x, -k). // // This function's execution time does not depend on the inputs. func RotateLeft32(x uint32, k int) uint32 { … } // RotateLeft64 returns the value of x rotated left by (k mod 64) bits. // To rotate x right by k bits, call RotateLeft64(x, -k). // // This function's execution time does not depend on the inputs. func RotateLeft64(x uint64, k int) uint64 { … } // Reverse returns the value of x with its bits in reversed order. func Reverse(x uint) uint { … } // Reverse8 returns the value of x with its bits in reversed order. func Reverse8(x uint8) uint8 { … } // Reverse16 returns the value of x with its bits in reversed order. func Reverse16(x uint16) uint16 { … } // Reverse32 returns the value of x with its bits in reversed order. func Reverse32(x uint32) uint32 { … } // Reverse64 returns the value of x with its bits in reversed order. func Reverse64(x uint64) uint64 { … } // ReverseBytes returns the value of x with its bytes in reversed order. // // This function's execution time does not depend on the inputs. func ReverseBytes(x uint) uint { … } // ReverseBytes16 returns the value of x with its bytes in reversed order. // // This function's execution time does not depend on the inputs. func ReverseBytes16(x uint16) uint16 { … } // ReverseBytes32 returns the value of x with its bytes in reversed order. // // This function's execution time does not depend on the inputs. func ReverseBytes32(x uint32) uint32 { … } // ReverseBytes64 returns the value of x with its bytes in reversed order. // // This function's execution time does not depend on the inputs. func ReverseBytes64(x uint64) uint64 { … } // Len returns the minimum number of bits required to represent x; the result is 0 for x == 0. func Len(x uint) int { … } // Len8 returns the minimum number of bits required to represent x; the result is 0 for x == 0. func Len8(x uint8) int { … } // Len16 returns the minimum number of bits required to represent x; the result is 0 for x == 0. func Len16(x uint16) (n int) { … } // Len32 returns the minimum number of bits required to represent x; the result is 0 for x == 0. func Len32(x uint32) (n int) { … } // Len64 returns the minimum number of bits required to represent x; the result is 0 for x == 0. func Len64(x uint64) (n int) { … } // Add returns the sum with carry of x, y and carry: sum = x + y + carry. // The carry input must be 0 or 1; otherwise the behavior is undefined. // The carryOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Add(x, y, carry uint) (sum, carryOut uint) { … } // Add32 returns the sum with carry of x, y and carry: sum = x + y + carry. // The carry input must be 0 or 1; otherwise the behavior is undefined. // The carryOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Add32(x, y, carry uint32) (sum, carryOut uint32) { … } // Add64 returns the sum with carry of x, y and carry: sum = x + y + carry. // The carry input must be 0 or 1; otherwise the behavior is undefined. // The carryOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Add64(x, y, carry uint64) (sum, carryOut uint64) { … } // Sub returns the difference of x, y and borrow: diff = x - y - borrow. // The borrow input must be 0 or 1; otherwise the behavior is undefined. // The borrowOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Sub(x, y, borrow uint) (diff, borrowOut uint) { … } // Sub32 returns the difference of x, y and borrow, diff = x - y - borrow. // The borrow input must be 0 or 1; otherwise the behavior is undefined. // The borrowOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Sub32(x, y, borrow uint32) (diff, borrowOut uint32) { … } // Sub64 returns the difference of x, y and borrow: diff = x - y - borrow. // The borrow input must be 0 or 1; otherwise the behavior is undefined. // The borrowOut output is guaranteed to be 0 or 1. // // This function's execution time does not depend on the inputs. func Sub64(x, y, borrow uint64) (diff, borrowOut uint64) { … } // Mul returns the full-width product of x and y: (hi, lo) = x * y // with the product bits' upper half returned in hi and the lower // half returned in lo. // // This function's execution time does not depend on the inputs. func Mul(x, y uint) (hi, lo uint) { … } // Mul32 returns the 64-bit product of x and y: (hi, lo) = x * y // with the product bits' upper half returned in hi and the lower // half returned in lo. // // This function's execution time does not depend on the inputs. func Mul32(x, y uint32) (hi, lo uint32) { … } // Mul64 returns the 128-bit product of x and y: (hi, lo) = x * y // with the product bits' upper half returned in hi and the lower // half returned in lo. // // This function's execution time does not depend on the inputs. func Mul64(x, y uint64) (hi, lo uint64) { … } // Div returns the quotient and remainder of (hi, lo) divided by y: // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper // half in parameter hi and the lower half in parameter lo. // Div panics for y == 0 (division by zero) or y <= hi (quotient overflow). func Div(hi, lo, y uint) (quo, rem uint) { … } // Div32 returns the quotient and remainder of (hi, lo) divided by y: // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper // half in parameter hi and the lower half in parameter lo. // Div32 panics for y == 0 (division by zero) or y <= hi (quotient overflow). func Div32(hi, lo, y uint32) (quo, rem uint32) { … } // Div64 returns the quotient and remainder of (hi, lo) divided by y: // quo = (hi, lo)/y, rem = (hi, lo)%y with the dividend bits' upper // half in parameter hi and the lower half in parameter lo. // Div64 panics for y == 0 (division by zero) or y <= hi (quotient overflow). func Div64(hi, lo, y uint64) (quo, rem uint64) { … } // Rem returns the remainder of (hi, lo) divided by y. Rem panics for // y == 0 (division by zero) but, unlike Div, it doesn't panic on a // quotient overflow. func Rem(hi, lo, y uint) uint { … } // Rem32 returns the remainder of (hi, lo) divided by y. Rem32 panics // for y == 0 (division by zero) but, unlike [Div32], it doesn't panic // on a quotient overflow. func Rem32(hi, lo, y uint32) uint32 { … } // Rem64 returns the remainder of (hi, lo) divided by y. Rem64 panics // for y == 0 (division by zero) but, unlike [Div64], it doesn't panic // on a quotient overflow. func Rem64(hi, lo, y uint64) uint64 { … }