Update to go1.25.0
This commit is contained in:
@@ -6,7 +6,10 @@
|
||||
|
||||
package codegen
|
||||
|
||||
import "math/bits"
|
||||
import (
|
||||
"math/bits"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// ----------------------- //
|
||||
// bits.LeadingZeros //
|
||||
@@ -15,60 +18,70 @@ import "math/bits"
|
||||
func LeadingZeros(n uint) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ"
|
||||
// amd64/v3:"LZCNTQ", -"BSRQ"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV",-"SUB"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t",-"SUB"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.LeadingZeros(n)
|
||||
}
|
||||
|
||||
func LeadingZeros64(n uint64) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ"
|
||||
// amd64/v3:"LZCNTQ", -"BSRQ"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// loong64:"CLZV",-"SUB"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t",-"ADDI"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.LeadingZeros64(n)
|
||||
}
|
||||
|
||||
func LeadingZeros32(n uint32) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ","LEAQ",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL",- "BSRL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZW"
|
||||
// arm:"CLZ"
|
||||
// arm64:"CLZW"
|
||||
// loong64:"CLZW",-"SUB"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"CNTLZW"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZW",-"ADDI"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.LeadingZeros32(n)
|
||||
}
|
||||
|
||||
func LeadingZeros16(n uint16) int {
|
||||
// amd64/v1,amd64/v2:"BSRL","LEAL",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL",- "BSRL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-48",-"NEG"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.LeadingZeros16(n)
|
||||
}
|
||||
|
||||
func LeadingZeros8(n uint8) int {
|
||||
// amd64/v1,amd64/v2:"BSRL","LEAL",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL",- "BSRL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-56",-"NEG"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.LeadingZeros8(n)
|
||||
}
|
||||
|
||||
@@ -79,30 +92,35 @@ func LeadingZeros8(n uint8) int {
|
||||
func Len(n uint) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ"
|
||||
// amd64/v3: "LZCNTQ"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"SUBC","CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-64"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.Len(n)
|
||||
}
|
||||
|
||||
func Len64(n uint64) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ"
|
||||
// amd64/v3: "LZCNTQ"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"SUBC","CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-64"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.Len64(n)
|
||||
}
|
||||
|
||||
func SubFromLen64(n uint64) int {
|
||||
// loong64:"CLZV",-"ADD"
|
||||
// ppc64x:"CNTLZD",-"SUBC"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t",-"ADDI",-"NEG"
|
||||
return 64 - bits.Len64(n)
|
||||
}
|
||||
|
||||
@@ -114,36 +132,42 @@ func CompareWithLen64(n uint64) bool {
|
||||
func Len32(n uint32) int {
|
||||
// amd64/v1,amd64/v2:"BSRQ","LEAQ",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZW"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x: "CNTLZW"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZW","ADDI\t\\$-32"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.Len32(n)
|
||||
}
|
||||
|
||||
func Len16(n uint16) int {
|
||||
// amd64/v1,amd64/v2:"BSRL","LEAL",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"SUBC","CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-64"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.Len16(n)
|
||||
}
|
||||
|
||||
func Len8(n uint8) int {
|
||||
// amd64/v1,amd64/v2:"BSRL","LEAL",-"CMOVQEQ"
|
||||
// amd64/v3: "LZCNTL"
|
||||
// s390x:"FLOGR"
|
||||
// arm:"CLZ" arm64:"CLZ"
|
||||
// arm64:"CLZ"
|
||||
// arm:"CLZ"
|
||||
// loong64:"CLZV"
|
||||
// mips:"CLZ"
|
||||
// wasm:"I64Clz"
|
||||
// ppc64x:"SUBC","CNTLZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CLZ\t","ADDI\t\\$-64"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Clz"
|
||||
return bits.Len8(n)
|
||||
}
|
||||
|
||||
@@ -157,8 +181,9 @@ func OnesCount(n uint) int {
|
||||
// amd64:"POPCNTQ"
|
||||
// arm64:"VCNT","VUADDLV"
|
||||
// loong64:"VPCNTV"
|
||||
// s390x:"POPCNT"
|
||||
// ppc64x:"POPCNTD"
|
||||
// riscv64:"CPOP\t"
|
||||
// s390x:"POPCNT"
|
||||
// wasm:"I64Popcnt"
|
||||
return bits.OnesCount(n)
|
||||
}
|
||||
@@ -168,8 +193,9 @@ func OnesCount64(n uint64) int {
|
||||
// amd64:"POPCNTQ"
|
||||
// arm64:"VCNT","VUADDLV"
|
||||
// loong64:"VPCNTV"
|
||||
// s390x:"POPCNT"
|
||||
// ppc64x:"POPCNTD"
|
||||
// riscv64:"CPOP\t"
|
||||
// s390x:"POPCNT"
|
||||
// wasm:"I64Popcnt"
|
||||
return bits.OnesCount64(n)
|
||||
}
|
||||
@@ -179,8 +205,9 @@ func OnesCount32(n uint32) int {
|
||||
// amd64:"POPCNTL"
|
||||
// arm64:"VCNT","VUADDLV"
|
||||
// loong64:"VPCNTW"
|
||||
// s390x:"POPCNT"
|
||||
// ppc64x:"POPCNTW"
|
||||
// riscv64:"CPOPW"
|
||||
// s390x:"POPCNT"
|
||||
// wasm:"I64Popcnt"
|
||||
return bits.OnesCount32(n)
|
||||
}
|
||||
@@ -190,15 +217,17 @@ func OnesCount16(n uint16) int {
|
||||
// amd64:"POPCNTL"
|
||||
// arm64:"VCNT","VUADDLV"
|
||||
// loong64:"VPCNTH"
|
||||
// s390x:"POPCNT"
|
||||
// ppc64x:"POPCNTW"
|
||||
// riscv64:"CPOP\t"
|
||||
// s390x:"POPCNT"
|
||||
// wasm:"I64Popcnt"
|
||||
return bits.OnesCount16(n)
|
||||
}
|
||||
|
||||
func OnesCount8(n uint8) int {
|
||||
// s390x:"POPCNT"
|
||||
// ppc64x:"POPCNTB"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"CPOP\t"
|
||||
// s390x:"POPCNT"
|
||||
// wasm:"I64Popcnt"
|
||||
return bits.OnesCount8(n)
|
||||
}
|
||||
@@ -237,42 +266,46 @@ func Reverse8(n uint8) uint8 {
|
||||
// ----------------------- //
|
||||
|
||||
func ReverseBytes(n uint) uint {
|
||||
// amd64:"BSWAPQ"
|
||||
// 386:"BSWAPL"
|
||||
// s390x:"MOVDBR"
|
||||
// amd64:"BSWAPQ"
|
||||
// arm64:"REV"
|
||||
// loong64:"REVBV"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"REV8"
|
||||
// s390x:"MOVDBR"
|
||||
return bits.ReverseBytes(n)
|
||||
}
|
||||
|
||||
func ReverseBytes64(n uint64) uint64 {
|
||||
// amd64:"BSWAPQ"
|
||||
// 386:"BSWAPL"
|
||||
// s390x:"MOVDBR"
|
||||
// amd64:"BSWAPQ"
|
||||
// arm64:"REV"
|
||||
// ppc64x/power10: "BRD"
|
||||
// loong64:"REVBV"
|
||||
// ppc64x/power10: "BRD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"REV8"
|
||||
// s390x:"MOVDBR"
|
||||
return bits.ReverseBytes64(n)
|
||||
}
|
||||
|
||||
func ReverseBytes32(n uint32) uint32 {
|
||||
// amd64:"BSWAPL"
|
||||
// 386:"BSWAPL"
|
||||
// s390x:"MOVWBR"
|
||||
// amd64:"BSWAPL"
|
||||
// arm64:"REVW"
|
||||
// loong64:"REVB2W"
|
||||
// ppc64x/power10: "BRW"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"REV8","SRLI\t\\$32"
|
||||
// s390x:"MOVWBR"
|
||||
return bits.ReverseBytes32(n)
|
||||
}
|
||||
|
||||
func ReverseBytes16(n uint16) uint16 {
|
||||
// amd64:"ROLW"
|
||||
// arm64:"REV16W",-"UBFX",-"ORR"
|
||||
// arm/5:"SLL","SRL","ORR"
|
||||
// arm/6:"REV16"
|
||||
// arm/7:"REV16"
|
||||
// arm64:"REV16W",-"UBFX",-"ORR"
|
||||
// loong64:"REVB2H"
|
||||
// ppc64x/power10: "BRH"
|
||||
// riscv64/rva22u64,riscv64/rva23u64:"REV8","SRLI\t\\$48"
|
||||
return bits.ReverseBytes16(n)
|
||||
}
|
||||
|
||||
@@ -356,28 +389,30 @@ func RotateLeftVariable32(n uint32, m int) uint32 {
|
||||
// ------------------------ //
|
||||
|
||||
func TrailingZeros(n uint) int {
|
||||
// 386:"BSFL"
|
||||
// amd64/v1,amd64/v2:"BSFQ","MOVL\t\\$64","CMOVQEQ"
|
||||
// amd64/v3:"TZCNTQ"
|
||||
// 386:"BSFL"
|
||||
// arm:"CLZ"
|
||||
// arm64:"RBIT","CLZ"
|
||||
// loong64:"CTZV"
|
||||
// s390x:"FLOGR"
|
||||
// ppc64x/power8:"ANDN","POPCNTD"
|
||||
// ppc64x/power9: "CNTTZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros(n)
|
||||
}
|
||||
|
||||
func TrailingZeros64(n uint64) int {
|
||||
// 386:"BSFL","JNE"
|
||||
// amd64/v1,amd64/v2:"BSFQ","MOVL\t\\$64","CMOVQEQ"
|
||||
// amd64/v3:"TZCNTQ"
|
||||
// 386:"BSFL"
|
||||
// arm64:"RBIT","CLZ"
|
||||
// loong64:"CTZV"
|
||||
// s390x:"FLOGR"
|
||||
// ppc64x/power8:"ANDN","POPCNTD"
|
||||
// ppc64x/power9: "CNTTZD"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t"
|
||||
// s390x:"FLOGR"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros64(n)
|
||||
}
|
||||
@@ -389,38 +424,43 @@ func TrailingZeros64Subtract(n uint64) int {
|
||||
}
|
||||
|
||||
func TrailingZeros32(n uint32) int {
|
||||
// 386:"BSFL"
|
||||
// amd64/v1,amd64/v2:"BTSQ\\t\\$32","BSFQ"
|
||||
// amd64/v3:"TZCNTL"
|
||||
// 386:"BSFL"
|
||||
// arm:"CLZ"
|
||||
// arm64:"RBITW","CLZW"
|
||||
// loong64:"CTZW"
|
||||
// s390x:"FLOGR","MOVWZ"
|
||||
// ppc64x/power8:"ANDN","POPCNTW"
|
||||
// ppc64x/power9: "CNTTZW"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZW"
|
||||
// s390x:"FLOGR","MOVWZ"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros32(n)
|
||||
}
|
||||
|
||||
func TrailingZeros16(n uint16) int {
|
||||
// amd64:"BSFL","ORL\\t\\$65536"
|
||||
// 386:"BSFL\t"
|
||||
// amd64:"BSFL","ORL\\t\\$65536"
|
||||
// arm:"ORR\t\\$65536","CLZ",-"MOVHU\tR"
|
||||
// arm64:"ORR\t\\$65536","RBITW","CLZW",-"MOVHU\tR",-"RBIT\t",-"CLZ\t"
|
||||
// loong64:"CTZV"
|
||||
// s390x:"FLOGR","OR\t\\$65536"
|
||||
// ppc64x/power8:"POPCNTD","ORIS\\t\\$1"
|
||||
// ppc64x/power8:"POPCNTW","ADD\t\\$-1"
|
||||
// ppc64x/power9:"CNTTZD","ORIS\\t\\$1"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "ORI\t\\$65536","CTZW"
|
||||
// s390x:"FLOGR","OR\t\\$65536"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros16(n)
|
||||
}
|
||||
|
||||
func TrailingZeros8(n uint8) int {
|
||||
// amd64:"BSFL","ORL\\t\\$256"
|
||||
// 386:"BSFL"
|
||||
// amd64:"BSFL","ORL\\t\\$256"
|
||||
// arm:"ORR\t\\$256","CLZ",-"MOVBU\tR"
|
||||
// arm64:"ORR\t\\$256","RBITW","CLZW",-"MOVBU\tR",-"RBIT\t",-"CLZ\t"
|
||||
// loong64:"CTZV"
|
||||
// ppc64x/power8:"POPCNTB","ADD\t\\$-1"
|
||||
// ppc64x/power9:"CNTTZD","OR\t\\$256"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "ORI\t\\$256","CTZW"
|
||||
// s390x:"FLOGR","OR\t\\$256"
|
||||
// wasm:"I64Ctz"
|
||||
return bits.TrailingZeros8(n)
|
||||
@@ -444,6 +484,7 @@ func IterateBits64(n uint64) int {
|
||||
for n != 0 {
|
||||
// amd64/v1,amd64/v2:"BSFQ",-"CMOVEQ"
|
||||
// amd64/v3:"TZCNTQ"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t"
|
||||
i += bits.TrailingZeros64(n)
|
||||
n &= n - 1
|
||||
}
|
||||
@@ -455,6 +496,7 @@ func IterateBits32(n uint32) int {
|
||||
for n != 0 {
|
||||
// amd64/v1,amd64/v2:"BSFL",-"BTSQ"
|
||||
// amd64/v3:"TZCNTL"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t"
|
||||
i += bits.TrailingZeros32(n)
|
||||
n &= n - 1
|
||||
}
|
||||
@@ -467,6 +509,7 @@ func IterateBits16(n uint16) int {
|
||||
// amd64/v1,amd64/v2:"BSFL",-"BTSL"
|
||||
// amd64/v3:"TZCNTL"
|
||||
// arm64:"RBITW","CLZW",-"ORR"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t",-"ORR"
|
||||
i += bits.TrailingZeros16(n)
|
||||
n &= n - 1
|
||||
}
|
||||
@@ -479,6 +522,7 @@ func IterateBits8(n uint8) int {
|
||||
// amd64/v1,amd64/v2:"BSFL",-"BTSL"
|
||||
// amd64/v3:"TZCNTL"
|
||||
// arm64:"RBITW","CLZW",-"ORR"
|
||||
// riscv64/rva22u64,riscv64/rva23u64: "CTZ\t",-"ORR"
|
||||
i += bits.TrailingZeros8(n)
|
||||
n &= n - 1
|
||||
}
|
||||
@@ -925,6 +969,17 @@ func Mul64LoOnly(x, y uint64) uint64 {
|
||||
return lo
|
||||
}
|
||||
|
||||
func Mul64Const() (uint64, uint64) {
|
||||
// 7133701809754865664 == 99<<56
|
||||
// arm64:"MOVD\t[$]7133701809754865664, R1", "MOVD\t[$]88, R0"
|
||||
return bits.Mul64(99+88<<8, 1<<56)
|
||||
}
|
||||
|
||||
func MulUintOverflow(p *uint64) []uint64 {
|
||||
// arm64:"CMP\t[$]72"
|
||||
return unsafe.Slice(p, 9)
|
||||
}
|
||||
|
||||
// --------------- //
|
||||
// bits.Div* //
|
||||
// --------------- //
|
||||
|
||||
Reference in New Issue
Block a user