riscv64: add support for zbc instructions Add support for the disassembly of Zbc instructions and test cases. Change-Id: Icf1097ecdbbb68837836d1e9e79e8a4dd61d41bb GitHub-Last-Rev: 77c297cff58a74ad14851a28c822e58d845bbaf6 GitHub-Pull-Request: golang/arch#18 Reviewed-on: https://go-review.googlesource.com/c/arch/+/735880 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: Meng Zhuo <mengzhuo1203@gmail.com> Reviewed-by: Joel Sing <joel@sing.id.au>
diff --git a/riscv64/riscv64asm/tables.go b/riscv64/riscv64asm/tables.go index 2a951f9..01fc172 100644 --- a/riscv64/riscv64asm/tables.go +++ b/riscv64/riscv64asm/tables.go
@@ -104,6 +104,9 @@ BNE BSET BSETI + CLMUL + CLMULH + CLMULR CLZ CLZW CPOP @@ -1100,6 +1103,9 @@ BNE: "BNE", BSET: "BSET", BSETI: "BSETI", + CLMUL: "CLMUL", + CLMULH: "CLMULH", + CLMULR: "CLMULR", CLZ: "CLZ", CLZW: "CLZW", CPOP: "CPOP", @@ -2191,6 +2197,12 @@ {mask: 0xfe00707f, value: 0x28001033, op: BSET, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, // BSETI rd, rs1, shamt6 {mask: 0xfc00707f, value: 0x28001013, op: BSETI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}}, + // CLMUL rd, rs1, rs2 + {mask: 0xfe00707f, value: 0x0a001033, op: CLMUL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, + // CLMULH rd, rs1, rs2 + {mask: 0xfe00707f, value: 0x0a003033, op: CLMULH, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, + // CLMULR rd, rs1, rs2 + {mask: 0xfe00707f, value: 0x0a002033, op: CLMULR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, // CLZ rd, rs1 {mask: 0xfff0707f, value: 0x60001013, op: CLZ, args: argTypeList{arg_rd, arg_rs1}}, // CLZW rd, rs1
diff --git a/riscv64/riscv64asm/testdata/gnucases.txt b/riscv64/riscv64asm/testdata/gnucases.txt index b92e093..cb37c43 100644 --- a/riscv64/riscv64asm/testdata/gnucases.txt +++ b/riscv64/riscv64asm/testdata/gnucases.txt
@@ -415,6 +415,11 @@ b353530e| czero.eqz x7,x6,x5 b373530e| czero.nez x7,x6,x5 +# 28.4.3: Zbc: Carry-less multiplication +b313530a| clmul x7,x6,x5 +b333530a| clmulh x7,x6,x5 +b323530a| clmulr x7,x6,x5 + # "V" Standard Extension for Vector Operations, Version 1.0 # 31.6: Configuration Setting Instructions
diff --git a/riscv64/riscv64asm/testdata/plan9cases.txt b/riscv64/riscv64asm/testdata/plan9cases.txt index f496165..33a9d07 100644 --- a/riscv64/riscv64asm/testdata/plan9cases.txt +++ b/riscv64/riscv64asm/testdata/plan9cases.txt
@@ -369,6 +369,11 @@ b353530e| CZEROEQZ X5, X6, X7 b373530e| CZERONEZ X5, X6, X7 +# 28.4.3: Zbc: Carry-less multiplication +b313530a| CLMUL X5, X6, X7 +b333530a| CLMULH X5, X6, X7 +b323530a| CLMULR X5, X6, X7 + # "V" Standard Extension for Vector Operations, Version 1.0 # 31.6: Configuration Setting Instructions
diff --git a/riscv64/riscv64spec/spec.go b/riscv64/riscv64spec/spec.go index 392965a..19c3614 100644 --- a/riscv64/riscv64spec/spec.go +++ b/riscv64/riscv64spec/spec.go
@@ -34,6 +34,7 @@ "rv_v", "rv_zba", "rv_zbb", + "rv_zbc", "rv_zbs", "rv_zfh", "rv_zicond",