diff --git a/src/arch/riscv/isa/decoder.isa b/src/arch/riscv/isa/decoder.isa index 58958bb9f1..cb2b19909a 100644 --- a/src/arch/riscv/isa/decoder.isa +++ b/src/arch/riscv/isa/decoder.isa @@ -537,18 +537,26 @@ decode QUADRANT default Unknown::unknown() { 0x3: sha256sig1({{ Rd_sw = _rvk_emu_sha256sig1(Rs1_sw); }}); - 0x4: sha512sum0({{ - Rd_sd = _rvk_emu_sha512sum0(Rs1_sd); - }}); - 0x5: sha512sum1({{ - Rd_sd = _rvk_emu_sha512sum1(Rs1_sd); - }}); - 0x6: sha512sig0({{ - Rd_sd = _rvk_emu_sha512sig0(Rs1_sd); - }}); - 0x7: sha512sig1({{ - Rd_sd = _rvk_emu_sha512sig1(Rs1_sd); - }}); + 0x4: decode RVTYPE { + 0x1: sha512sum0({{ + Rd_sd = _rvk_emu_sha512sum0(Rs1_sd); + }}); + } + 0x5: decode RVTYPE { + 0x1: sha512sum1({{ + Rd_sd = _rvk_emu_sha512sum1(Rs1_sd); + }}); + } + 0x6: decode RVTYPE { + 0x1: sha512sig0({{ + Rd_sd = _rvk_emu_sha512sig0(Rs1_sd); + }}); + } + 0x7: decode RVTYPE { + 0x1: sha512sig1({{ + Rd_sd = _rvk_emu_sha512sig1(Rs1_sd); + }}); + } 0x8: sm3p0({{ Rd_sw = _rvk_emu_sm3p0(Rs1_sw); }}); @@ -565,12 +573,16 @@ decode QUADRANT default Unknown::unknown() { Rd = rvSext(Rs1 | (UINT64_C(1) << index)); }}, imm_type = uint64_t, imm_code = {{ imm = SHAMT6; }}); 0x06: decode BIT24 { - 0x0: aes64im({{ - Rd_sd = _rvk_emu_aes64im(Rs1_sd); - }}); - 0x1: aes64ks1i({{ - Rd_sd = _rvk_emu_aes64ks1i(Rs1_sd, imm); - }}, imm_type = int32_t, imm_code={{ imm = RNUM; }}); + 0x0: decode RVTYPE { + 0x1: aes64im({{ + Rd_sd = _rvk_emu_aes64im(Rs1_sd); + }}); + } + 0x1: decode RVTYPE { + 0x1: aes64ks1i({{ + Rd_sd = _rvk_emu_aes64ks1i(Rs1_sd, imm); + }}, imm_type = int32_t, imm_code={{ imm = RNUM; }}); + } } 0x09: bclri({{ if (rvSelect((bool)SHAMT6BIT5, false)) { @@ -698,6 +710,14 @@ decode QUADRANT default Unknown::unknown() { }}, imm_type = uint64_t, imm_code = {{ imm = SHAMT6; }}); } + 0x07: decode RVTYPE { + 0x0: rv32_brev8({{ + Rd_sw = _rvk_emu_brev8_32(Rs1_sw); + }}, imm_code = {{ imm = SHAMT5; }}); + 0x1: brev8({{ + Rd = _rvk_emu_brev8_64(Rs1); + }}, imm_code = {{ imm = SHAMT6; }}); + } } } 0x6: ori({{ @@ -972,33 +992,43 @@ decode QUADRANT default Unknown::unknown() { }}, IntMultOp); } 0x18: sm4ed({{ - Rd_sd = _rvk_emu_sm4ed(Rs1_sd, Rs2_sd, (uint8_t)BS); + Rd_sw = _rvk_emu_sm4ed(Rs1_sw, Rs2_sw, (uint8_t)BS); }}); 0x19: decode BS { - 0x0: aes64es({{ - Rd_sd = _rvk_emu_aes64es(Rs1_sd, Rs2_sd); - }}); + 0x0: decode RVTYPE { + 0x1: aes64es({{ + Rd_sd = _rvk_emu_aes64es(Rs1_sd, Rs2_sd); + }}); + } } 0x1a: sm4ks({{ - Rd_sd = _rvk_emu_sm4ks(Rs1_sd, Rs2_sd, (uint8_t)BS); + Rd_sw = _rvk_emu_sm4ks(Rs1_sw, Rs2_sw, (uint8_t)BS); }}); 0x1b: decode BS { - 0x0: aes64esm({{ - Rd_sd = _rvk_emu_aes64esm(Rs1_sd, Rs2_sd); - }}); + 0x0: decode RVTYPE { + 0x1: aes64esm({{ + Rd_sd = _rvk_emu_aes64esm(Rs1_sd, Rs2_sd); + }}); + } } 0x1d: decode BS { - 0x0: aes64ds({{ - Rd_sd = _rvk_emu_aes64ds(Rs1_sd, Rs2_sd); - }}); + 0x0: decode RVTYPE { + 0x1: aes64ds({{ + Rd_sd = _rvk_emu_aes64ds(Rs1_sd, Rs2_sd); + }}); + } } - 0x1f: decode BS{ - 0x0: aes64dsm({{ - Rd_sd = _rvk_emu_aes64dsm(Rs1_sd, Rs2_sd); - }}); - 0x1: aes64ks2({{ - Rd_sd = _rvk_emu_aes64ks2(Rs1_sd, Rs2_sd); - }}); + 0x1f: decode BS { + 0x0: decode RVTYPE { + 0x1: aes64dsm({{ + Rd_sd = _rvk_emu_aes64dsm(Rs1_sd, Rs2_sd); + }}); + } + 0x1: decode RVTYPE { + 0x1: aes64ks2({{ + Rd_sd = _rvk_emu_aes64ks2(Rs1_sd, Rs2_sd); + }}); + } } } 0x1: decode FUNCT7 { @@ -1105,9 +1135,14 @@ decode QUADRANT default Unknown::unknown() { 0x10: sh1add({{ Rd = rvSext((Rs1 << 1) + Rs2); }}); - 0x14: xperm4({{ - Rd_sd = _rvk_emu_xperm4_64(Rs1_sd, Rs2_sd); - }}); + 0x14: decode RVTYPE { + 0x0: xperm4_32({{ + Rd_sw = _rvk_emu_xperm4_32(Rs1_sw, Rs2_sw); + }}); + 0x1: xperm4_64({{ + Rd_sd = _rvk_emu_xperm4_64(Rs1_sd, Rs2_sd); + }}); + } } 0x3: decode FUNCT7 { 0x0: sltu({{ @@ -1186,9 +1221,14 @@ decode QUADRANT default Unknown::unknown() { 0x10: sh2add({{ Rd = rvSext((Rs1 << 2) + Rs2); }}); - 0x14: xperm8({{ - Rd_sd = _rvk_emu_xperm8_64(Rs1_sd, Rs2_sd); - }}); + 0x14: decode RVTYPE { + 0x0: xperm8_32({{ + Rd_sw = _rvk_emu_xperm8_32(Rs1_sw, Rs2_sw); + }}); + 0x1: xperm8_64({{ + Rd_sd = _rvk_emu_xperm8_64(Rs1_sd, Rs2_sd); + }}); + } 0x20: xnor({{ Rd = rvSext(~(Rs1 ^ Rs2)); }});