internal/cpu: add zbc extension detection for riscv64

Add zbc extension detection for riscv64.

Change-Id: Ib333d67eb160998ca887a99ced9e9e9aee7d4c54
GitHub-Last-Rev: 836410115f
GitHub-Pull-Request: golang/go#78862
Reviewed-on: https://go-review.googlesource.com/c/go/+/768920
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Florian Lehner <lehner.florian86@gmail.com>
This commit is contained in:
Xueqi Luo 2026-04-20 11:43:28 +00:00 committed by Keith Randall
parent 9c688e3f4d
commit 122eb7d035
3 changed files with 4 additions and 0 deletions

View file

@ -157,6 +157,7 @@ var RISCV64 struct {
HasFastMisaligned bool // Fast misaligned accesses
HasV bool // Vector extension compatible with RVV 1.0
HasZbb bool // Basic bit-manipulation extension
HasZbc bool // Carryless multiplication extension
HasZvbb bool // Vector Basic Bit-manipulation
HasZvbc bool // Vector Carryless Multiplication
HasZvkg bool // Vector GCM/GMAC

View file

@ -13,6 +13,7 @@ func doinit() {
{Name: "fastmisaligned", Feature: &RISCV64.HasFastMisaligned},
{Name: "v", Feature: &RISCV64.HasV},
{Name: "zbb", Feature: &RISCV64.HasZbb},
{Name: "zbc", Feature: &RISCV64.HasZbc},
{Name: "zvbb", Feature: &RISCV64.HasZvbb},
{Name: "zvbc", Feature: &RISCV64.HasZvbc},
{Name: "zvkg", Feature: &RISCV64.HasZvkg},

View file

@ -51,6 +51,7 @@ const (
riscv_HWPROBE_KEY_IMA_EXT_0 = 0x4
riscv_HWPROBE_IMA_V = 0x4
riscv_HWPROBE_EXT_ZBB = 0x10
riscv_HWPROBE_EXT_ZBC = 0x80
riscv_HWPROBE_EXT_ZVBB = 0x20000
riscv_HWPROBE_EXT_ZVBC = 0x40000
riscv_HWPROBE_EXT_ZVKB = 0x80000
@ -95,6 +96,7 @@ func osInit() {
v := uint(pairs[0].value)
RISCV64.HasV = isSet(v, riscv_HWPROBE_IMA_V)
RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB)
RISCV64.HasZbc = isSet(v, riscv_HWPROBE_EXT_ZBC)
RISCV64.HasZvbb = isSet(v, riscv_HWPROBE_EXT_ZVBB)
RISCV64.HasZvbc = isSet(v, riscv_HWPROBE_EXT_ZVBC)
RISCV64.HasZvkg = isSet(v, riscv_HWPROBE_EXT_ZVKG)