diff --git a/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi b/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi new file mode 100644 index 0000000..4fd4435 --- /dev/null +++ b/src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi @@ -0,0 +1,18 @@ +`CAP_CHECK_FIELD(src1_tag,"src1_tag") +`CAP_CHECK_FIELD(src2_tag,"src2_tag") +`CAP_CHECK_FIELD(src1_sealed_with_type,"src1_sealed_with_type") +`CAP_CHECK_FIELD(src1_unsealed,"src1_unsealed") +`CAP_CHECK_FIELD(src2_unsealed,"src2_unsealed") +`CAP_CHECK_FIELD(src1_sealed,"src1_sealed") +`CAP_CHECK_FIELD(src2_sealed,"src2_sealed") +`CAP_CHECK_FIELD(src1_src2_types_match,"src1_src2_types_match") +`CAP_CHECK_FIELD(src1_permit_ccall,"src1_permit_ccall") +`CAP_CHECK_FIELD(src2_permit_ccall,"src2_permit_ccall") +`CAP_CHECK_FIELD(src1_permit_x,"src1_permit_x") +`CAP_CHECK_FIELD(src2_no_permit_x,"src2_no_permit_x") +`CAP_CHECK_FIELD(src2_permit_unseal,"src2_permit_unseal") +`CAP_CHECK_FIELD(src2_permit_seal,"src2_permit_seal") +`CAP_CHECK_FIELD(src2_points_to_src1_type,"src2_points_to_src1_type") +`CAP_CHECK_FIELD(src2_addr_valid_type,"src2_addr_valid_type") +`CAP_CHECK_FIELD(src1_perm_subset_src2,"src1_perm_subset_src2") +`CAP_CHECK_FIELD(src1_derivable,"src1_derivable") diff --git a/src_Core/RISCY_OOO/procs/lib/ProcTypes.bsv b/src_Core/RISCY_OOO/procs/lib/ProcTypes.bsv index 84146d1..694e2fe 100755 --- a/src_Core/RISCY_OOO/procs/lib/ProcTypes.bsv +++ b/src_Core/RISCY_OOO/procs/lib/ProcTypes.bsv @@ -709,24 +709,9 @@ typedef Bit#(65) CapTop; typedef Bit#(32) ImmData; // 32-bit decoded immediate data typedef struct { - Bool src1_tag; - Bool src2_tag; - Bool src1_sealed_with_type; - Bool src1_unsealed; - Bool src2_unsealed; - Bool src1_sealed; - Bool src2_sealed; - Bool src1_src2_types_match; - Bool src1_permit_ccall; - Bool src2_permit_ccall; - Bool src1_permit_x; - Bool src2_no_permit_x; - Bool src2_permit_unseal; - Bool src2_permit_seal; - Bool src2_points_to_src1_type; - Bool src2_addr_valid_type; - Bool src1_perm_subset_src2; - Bool src1_derivable; +`define CAP_CHECK_FIELD(x,s) Bool x; +`include "CapChecks.bsvi" +`undef CAP_CHECK_FIELD Bool check_enable; CheckAuthoritySrc check_authority_src; @@ -736,7 +721,27 @@ typedef struct { Bit#(6) rn1; Bit#(6) rn2; -} CapChecks deriving(Bits, Eq, FShow); +} CapChecks deriving(Bits, Eq); + +instance FShow#(CapChecks); + function Fmt fshow(CapChecks x); + let ret = $format("CapChecks {", + "rn1 ", fshow(x.rn1), ", rn2 ", fshow(x.rn2)); + +`define CAP_CHECK_FIELD(f,s) if (x.f) ret = ret + $format(", ", s); +`include "CapChecks.bsvi" +`undef CAP_CHECK_FIELD + + if (x.check_enable) + ret = $format(ret, ", bounds check: ", + "auth ", fshow(x.check_authority_src), ", ", + "low ", fshow(x.check_low_src), ", ", + "high ", fshow(x.check_high_src), ", ", + "inclusive ", fshow(x.check_inclusive)); + + return $format(ret, "}"); + endfunction +endinstance typedef CSR_XCapCause CapException;