From 9bb3e835ac577c1b35e0490946ce58e680c6fdd8 Mon Sep 17 00:00:00 2001 From: jon Date: Thu, 16 Apr 2020 11:38:38 +0100 Subject: [PATCH] Fix operand of CCall. Also fix one case of CCopyType where it is meant to return nullWithAddr(-1). --- src_Core/RISCY_OOO/procs/lib/Exec.bsv | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src_Core/RISCY_OOO/procs/lib/Exec.bsv b/src_Core/RISCY_OOO/procs/lib/Exec.bsv index 0f5848f..30a80bd 100755 --- a/src_Core/RISCY_OOO/procs/lib/Exec.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Exec.bsv @@ -107,7 +107,8 @@ function CapPipe capModify(CapPipe a, CapPipe b, CapModifyFunc func); //tagged SpecialRW : // error("SpecialRW not yet implemented"); tagged SetAddr .addrSource : - setAddr(a, addrSource == Src2Type ? (isSealed(b) ? zeroExtend(getType(b)) : -1) : getAddr(b)).value; + if (addrSource == Src2Type && !isSealed(b)) return nullWithAddr(-1); + else return setAddr(a, (addrSource == Src2Type) ? zeroExtend(getType(b)) : getAddr(b) ).value; tagged Seal : setType(a, truncate(getAddr(b))); tagged Unseal .src : @@ -229,7 +230,7 @@ function ExecResult basicExec(DecodedInst dInst, CapPipe rVal1, CapPipe rVal2, C Data alu_result = alu(getAddr(rVal1), getAddr(aluVal2), alu_f); Data inspect_result = capInspect(rVal1, aluVal2, dInst.execFunc.CapInspect); - CapModifyFunc modFunc = ccall ? (Unseal (Src1)):dInst.execFunc.CapModify; + CapModifyFunc modFunc = ccall ? (Unseal (Src2)):dInst.execFunc.CapModify; CapPipe modify_result = capModify(rVal1, aluVal2, modFunc); Maybe#(CapException) capException = capChecks(rVal1, aluVal2, dInst.capChecks); // TODO use this to throw exceptions