From 0c63bbe0e558b92786cbd1ed695f2e6f1fb0e86d Mon Sep 17 00:00:00 2001 From: Tim Hutt Date: Mon, 18 Sep 2023 09:46:00 +0100 Subject: [PATCH] Remove duplicate shift definitions SHIFTW and SHIFTIWOP were duplicated. This did not cause any harm except that the disassembly for the SHIFTW version was incorrect. Therefore I removed that version. The `execute()` functions were identical but the SHIFTW version is slightly neater (only one `[31..0]`) so I applied that to the SHIFTIWOP version. This should cause no functional changes to the model except that the disassembly will have the extra `w` which is correct. --- model/riscv_insts_base.sail | 41 ++++--------------------------------- 1 file changed, 4 insertions(+), 37 deletions(-) diff --git a/model/riscv_insts_base.sail b/model/riscv_insts_base.sail index b5e699e70..45e2833b1 100644 --- a/model/riscv_insts_base.sail +++ b/model/riscv_insts_base.sail @@ -504,39 +504,6 @@ mapping clause assembly = ADDIW(imm, rs1, rd) <-> "addiw" ^ spc() ^ reg_name(rd) ^ sep() ^ reg_name(rs1) ^ sep() ^ hex_bits_12(imm) if sizeof(xlen) == 64 -/* ****************************************************************** */ -union clause ast = SHIFTW : (bits(5), regidx, regidx, sop) - -mapping clause encdec = SHIFTW(shamt, rs1, rd, RISCV_SLLI) - if sizeof(xlen) == 64 - <-> 0b0000000 @ shamt @ rs1 @ 0b001 @ rd @ 0b0011011 - if sizeof(xlen) == 64 -mapping clause encdec = SHIFTW(shamt, rs1, rd, RISCV_SRLI) - if sizeof(xlen) == 64 - <-> 0b0000000 @ shamt @ rs1 @ 0b101 @ rd @ 0b0011011 - if sizeof(xlen) == 64 -mapping clause encdec = SHIFTW(shamt, rs1, rd, RISCV_SRAI) - if sizeof(xlen) == 64 - <-> 0b0100000 @ shamt @ rs1 @ 0b101 @ rd @ 0b0011011 - if sizeof(xlen) == 64 - -function clause execute (SHIFTW(shamt, rs1, rd, op)) = { - let rs1_val = (X(rs1))[31..0]; - let result : bits(32) = match op { - RISCV_SLLI => rs1_val << shamt, - RISCV_SRLI => rs1_val >> shamt, - RISCV_SRAI => shift_right_arith32(rs1_val, shamt) - }; - X(rd) = sign_extend(result); - RETIRE_SUCCESS -} - -mapping shiftw_mnemonic : sop <-> string = { - RISCV_SLLI <-> "slli", - RISCV_SRLI <-> "srli", - RISCV_SRAI <-> "srai" -} - mapping clause assembly = SHIFTW(shamt, rs1, rd, op) if sizeof(xlen) == 64 <-> shiftw_mnemonic(op) ^ spc() ^ reg_name(rd) ^ sep() ^ reg_name(rs1) ^ sep() ^ hex_bits_5(shamt) @@ -610,11 +577,11 @@ mapping clause encdec = SHIFTIWOP(shamt, rs1, rd, RISCV_SRAIW) if sizeof(xlen) == 64 function clause execute (SHIFTIWOP(shamt, rs1, rd, op)) = { - let rs1_val = X(rs1); + let rs1_val = (X(rs1))[31..0]; let result : bits(32) = match op { - RISCV_SLLIW => rs1_val[31..0] << shamt, - RISCV_SRLIW => rs1_val[31..0] >> shamt, - RISCV_SRAIW => shift_right_arith32(rs1_val[31..0], shamt) + RISCV_SLLIW => rs1_val << shamt, + RISCV_SRLIW => rs1_val >> shamt, + RISCV_SRAIW => shift_right_arith32(rs1_val, shamt) }; X(rd) = sign_extend(result); RETIRE_SUCCESS