From f245252732d4052c9c8706fad854d75907da8a53 Mon Sep 17 00:00:00 2001 From: Jordan Hurwich Date: Fri, 16 May 2025 13:50:57 -0700 Subject: [PATCH] Replace asm bitlen with Go math/bits implementation on amd64 - Remove bitlen_amd64.s and replace with pure-Go bitlen_amd64.go using bits.Len64 - Change bitlen signature to accept uint64 instead of Word - Update bitlen_decl.go to only build on 386 and ARM, excluding amd64 - Add //go:build constraint alongside legacy +build tags for Go 1.17+ compatibility --- bitlen_amd64.go | 11 +++++++++++ bitlen_amd64.s | 12 ------------ bitlen_decl.go | 3 ++- 3 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 bitlen_amd64.go delete mode 100644 bitlen_amd64.s diff --git a/bitlen_amd64.go b/bitlen_amd64.go new file mode 100644 index 0000000..99ef323 --- /dev/null +++ b/bitlen_amd64.go @@ -0,0 +1,11 @@ +//go:build amd64 && !gccgo +// +build amd64,!gccgo + +package encoding + +import "math/bits" + +// bitlen returns the number of bits required to represent x. +func bitlen(x uint64) int { + return bits.Len64(x) +} diff --git a/bitlen_amd64.s b/bitlen_amd64.s deleted file mode 100644 index 5e26858..0000000 --- a/bitlen_amd64.s +++ /dev/null @@ -1,12 +0,0 @@ -// +build !gccgo - -// func bitlen(x Word) (n int) -TEXT ·bitlen(SB),4,$0 - BSRQ x+0(FP), AX - JZ Z1 - ADDQ $1, AX - MOVQ AX, n+8(FP) - RET - -Z1: MOVQ $0, n+8(FP) - RET diff --git a/bitlen_decl.go b/bitlen_decl.go index 8641ac4..5fc5503 100644 --- a/bitlen_decl.go +++ b/bitlen_decl.go @@ -1,5 +1,6 @@ +//go:build !gccgo && (386 || arm) // +build !gccgo -// +build amd64 386 arm +// +build 386 arm package encoding