More concise FShow for CapChecks
This commit is contained in:
18
src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi
Normal file
18
src_Core/RISCY_OOO/procs/lib/CapChecks.bsvi
Normal file
@@ -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")
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user