From 791e862377d0afbde8ca81efe664362a9cf07310 Mon Sep 17 00:00:00 2001 From: Peter Rugg Date: Thu, 21 May 2020 15:49:25 +0100 Subject: [PATCH] Initial (slow) implementation of CTestSubset --- src_Core/RISCY_OOO/procs/lib/Decode.bsv | 8 +++----- src_Core/RISCY_OOO/procs/lib/Exec.bsv | 8 ++++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src_Core/RISCY_OOO/procs/lib/Decode.bsv b/src_Core/RISCY_OOO/procs/lib/Decode.bsv index 321ff67..f8e5f59 100755 --- a/src_Core/RISCY_OOO/procs/lib/Decode.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Decode.bsv @@ -1128,13 +1128,11 @@ function DecodeResult decode(Instruction inst, Bool cap_mode); dInst.capFunc = CapModify (Unseal (Src1)); end f7_cap_CTestSubset: begin - illegalInst = True; - // TODO dInst.iType = Cap; regs.dst = Valid(tagged Gpr rd); - regs.src1 = Valid(tagged Gpr rs1); - regs.src2 = Valid(tagged Gpr rs2); - dInst.imm = Invalid; + regs.src1 = Valid(tagged Gpr rs2); + regs.src2 = rs1 == 0 ? Invalid : Valid(tagged Gpr rs1); + dInst.scr = rs1 == 0 ? Valid (SCR_DDC) : Invalid; dInst.capFunc = CapInspect (TestSubset); end f7_cap_CCopyType: begin diff --git a/src_Core/RISCY_OOO/procs/lib/Exec.bsv b/src_Core/RISCY_OOO/procs/lib/Exec.bsv index d40cae8..fb2e16b 100755 --- a/src_Core/RISCY_OOO/procs/lib/Exec.bsv +++ b/src_Core/RISCY_OOO/procs/lib/Exec.bsv @@ -230,8 +230,12 @@ endfunction (* noinline *) function Data capInspect(CapPipe a, CapPipe b, CapInspectFunc func); Data res = (case(func) matches - //tagged TestSubset : - // error("TestSubset not yet implemented"); + tagged TestSubset : + // TODO will be bad for timing. Would like to reuse bounds check + zeroExtend(pack( (isValidCap(b) == isValidCap(a)) + && ((getPerms(a) & getPerms(b)) == getPerms(a)) + && (getBase(a) >= getBase(b)) + && (getTop(a) >= getTop(b)))); tagged GetLen : truncate(getLength(a)); tagged GetBase :