diff --git a/src/cmd/asm/internal/asm/testdata/riscv64.s b/src/cmd/asm/internal/asm/testdata/riscv64.s index 4615119af00fd9..4b49d84d6bbddd 100644 --- a/src/cmd/asm/internal/asm/testdata/riscv64.s +++ b/src/cmd/asm/internal/asm/testdata/riscv64.s @@ -509,6 +509,11 @@ start: ORCB X5, X6 // 13d37228 REV8 X7, X8 // 13d4836b + // 28.4.3: Carry-less multiplication (Zbc) + CLMUL X5, X6, X7 // b313530a + CLMULH X5, X6, X7 // b333530a + CLMULR X5, X6, X7 // b323530a + // 28.4.4: Single-bit Instructions (Zbs) BCLR X23, X24, X25 // b31c7c49 BCLR $63, X24 // 131cfc4b diff --git a/src/cmd/internal/obj/riscv/anames.go b/src/cmd/internal/obj/riscv/anames.go index 6c48e2f7de4799..1f777dd1951f04 100644 --- a/src/cmd/internal/obj/riscv/anames.go +++ b/src/cmd/internal/obj/riscv/anames.go @@ -263,6 +263,9 @@ var Anames = []string{ "RORW", "ORCB", "REV8", + "CLMUL", + "CLMULH", + "CLMULR", "BCLR", "BCLRI", "BEXT", diff --git a/src/cmd/internal/obj/riscv/cpu.go b/src/cmd/internal/obj/riscv/cpu.go index 60174a0b3a245f..a43bb825af7dfd 100644 --- a/src/cmd/internal/obj/riscv/cpu.go +++ b/src/cmd/internal/obj/riscv/cpu.go @@ -669,7 +669,7 @@ const ( ASEXTH AZEXTH - // 28.4.3: Bitwise Rotation (Zbb) + // 28.4.2: Bitwise Rotation (Zbb) AROL AROLW AROR @@ -679,6 +679,11 @@ const ( AORCB AREV8 + // 28.4.3: Carry-less multiplication (Zbc) + ACLMUL + ACLMULH + ACLMULR + // 28.4.4: Single-bit Instructions (Zbs) ABCLR ABCLRI diff --git a/src/cmd/internal/obj/riscv/inst.go b/src/cmd/internal/obj/riscv/inst.go index a5b3acdb18110c..a41b35d5a36b6c 100644 --- a/src/cmd/internal/obj/riscv/inst.go +++ b/src/cmd/internal/obj/riscv/inst.go @@ -1,4 +1,4 @@ -// Code generated by ./parse.py -go rv64_a rv64_c rv64_d rv64_f rv64_i rv64_m rv64_q rv64_zba rv64_zbb rv64_zbs rv_a rv_c rv_c_d rv_d rv_f rv_i rv_m rv_q rv_s rv_system rv_v rv_zba rv_zbb rv_zbs rv_zicond rv_zicsr; DO NOT EDIT. +// Code generated by ./parse.py -go rv64_a rv64_c rv64_d rv64_f rv64_i rv64_m rv64_q rv64_zba rv64_zbb rv64_zbs rv_a rv_c rv_c_d rv_d rv_f rv_i rv_m rv_q rv_s rv_system rv_v rv_zba rv_zbb rv_zbc rv_zbs rv_zicond rv_zicsr; DO NOT EDIT. package riscv import "cmd/internal/obj" @@ -170,6 +170,12 @@ func encode(a obj.As) *inst { return &inst{0x2, 0x4, 0x1, 0x0, 0, 0x0} case ACXOR: return &inst{0x21, 0x0, 0x1, 0x0, 0, 0x0} + case ACLMUL: + return &inst{0x33, 0x1, 0x0, 0x0, 160, 0x5} + case ACLMULH: + return &inst{0x33, 0x3, 0x0, 0x0, 160, 0x5} + case ACLMULR: + return &inst{0x33, 0x2, 0x0, 0x0, 160, 0x5} case ACLZ: return &inst{0x13, 0x1, 0x0, 0x0, 1536, 0x30} case ACLZW: diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go index 3deab34d312eab..dd13bba1602443 100644 --- a/src/cmd/internal/obj/riscv/obj.go +++ b/src/cmd/internal/obj/riscv/obj.go @@ -2621,7 +2621,7 @@ var instructions = [ALAST & obj.AMask]instructionData{ AXNOR & obj.AMask: {enc: rIIIEncoding, ternary: true}, AZEXTH & obj.AMask: {enc: rIIEncoding}, - // 28.4.3: Bitwise Rotation (Zbb) + // 28.4.2: Bitwise Rotation (Zbb) AROL & obj.AMask: {enc: rIIIEncoding, ternary: true}, AROLW & obj.AMask: {enc: rIIIEncoding, ternary: true}, AROR & obj.AMask: {enc: rIIIEncoding, immForm: ARORI, ternary: true}, @@ -2631,6 +2631,11 @@ var instructions = [ALAST & obj.AMask]instructionData{ AORCB & obj.AMask: {enc: rIIEncoding}, AREV8 & obj.AMask: {enc: rIIEncoding}, + // 28.4.3: Carry-less Multiplication (Zbc) + ACLMUL & obj.AMask: {enc: rIIIEncoding, ternary: true}, + ACLMULH & obj.AMask: {enc: rIIIEncoding, ternary: true}, + ACLMULR & obj.AMask: {enc: rIIIEncoding, ternary: true}, + // 28.4.4: Single-bit Instructions (Zbs) ABCLR & obj.AMask: {enc: rIIIEncoding, immForm: ABCLRI, ternary: true}, ABCLRI & obj.AMask: {enc: iIIEncoding, ternary: true},