From 8d0f985d993298bf7444945b5ee75d29180bc701 Mon Sep 17 00:00:00 2001 From: Peter Rugg Date: Thu, 23 Jan 2025 12:24:28 +0000 Subject: [PATCH] Ban illegal shift immediate encodings --- src_Core/RISCY_OOO/procs/lib/Decode.bsv | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src_Core/RISCY_OOO/procs/lib/Decode.bsv b/src_Core/RISCY_OOO/procs/lib/Decode.bsv index 2e5d67b..4cbce16 100644 --- a/src_Core/RISCY_OOO/procs/lib/Decode.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Decode.bsv @@ -338,8 +338,10 @@ function DecodeResult decode(Instruction inst, Bool cap_mode); fnAND: Valid(And); fnOR: Valid(Or); fnXOR: Valid(Xor); - fnSLL: Valid(Sll); - fnSR: Valid(immI[10] == 0 ? Srl : Sra); + fnSLL: (immI[11:6] == 6'b000000 ? Valid(Sll) : Invalid); + fnSR: (immI[11:6] == 6'b000000 ? Valid(Srl) : + immI[11:6] == 6'b010000 ? Valid(Sra) : + Invalid); default: Invalid; endcase; legalInst = isValid(mAluFunc); @@ -355,8 +357,10 @@ function DecodeResult decode(Instruction inst, Bool cap_mode); dInst.iType = Alu; Maybe#(AluFunc) mAluFunc = case (funct3) fnADD: Valid(Addw); - fnSLL: Valid(Sllw); - fnSR: Valid(immI[10] == 0 ? Srlw : Sraw); + fnSLL: (immI[11:5] == 7'b0000000 ? Valid(Sllw) : Invalid); + fnSR: (immI[11:5] == 7'b0000000 ? Valid(Srlw) : + immI[11:5] == 7'b0100000 ? Valid(Sraw) : + Invalid); default: Invalid; endcase; legalInst = isValid(mAluFunc);