implement C_GET_HIGH

This commit is contained in:
Yuecheng-CAM
2024-10-20 23:17:01 +01:00
parent 57fcf7a52a
commit 303331cc8f
4 changed files with 14 additions and 0 deletions

View File

@@ -184,6 +184,7 @@ Bit #(5) f5rs2_cap_CGetAddr = 5'h0f;
Bit #(5) f5rs2_cap_CClearFPReg = 5'h10;
Bit #(5) f5rs2_cap_CSealEntry = 5'h11;
Bit #(5) f5rs2_cap_CLoadTags = 5'h12;
Bit #(5) f5rs2_cap_CGetHigh = 5'h17;
// 5'h13 unused
Bit #(5) f5rs2_cap_JALR_PCC = 5'h14;
// 5'h15-5'h1f unused (5'h1f reserved for 1-reg instructions)

View File

@@ -1303,6 +1303,12 @@ function DecodeResult decode(Instruction inst, Bool cap_mode);
regs.src1 = Valid(tagged Gpr rs1);
dInst.capFunc = CapInspect (GetType);
end
f5rs2_cap_CGetHigh: begin
dInst.iType = Cap;
regs.dst = Valid(tagged Gpr rd);
regs.src1 = Valid(tagged Gpr rs1);
dInst.capFunc = CapInspect (GetHigh);
end
f5rs2_cap_CLoadTags: begin
dInst.iType = Ld;
dInst.imm = Valid(0);

View File

@@ -308,6 +308,8 @@ function Data capInspect(CapPipe a, CapPipe b, CapInspectFunc func);
zeroExtend(getFlags(a));
tagged GetPerm :
zeroExtend(getPerms(a));
tagged GetHigh :
zeroExtend(getHigh(pack(toMem(a))));
tagged GetType :
tpl_1(extractType(a));
tagged ToPtr :
@@ -624,7 +626,11 @@ function MemTaggedData gatherLoad( Addr addr, ByteOrTagEn byteOrTagEn
return dataToMemTaggedData(extend(dataVec[offset]));
end
endfunction
function Bit#(64) getHigh(CapMem cap);
Bit #(129) cap_mem_bits = unpack(pack(cap));
return cap_mem_bits[128-1:64];
endfunction
function Tuple2#(ByteEn, Data) scatterStore(Addr addr, ByteEn byteEn, Data data);
Bit#(IndxShamt) offset = truncate(addr);
if(byteEn[7]) begin

View File

@@ -363,6 +363,7 @@ typedef union tagged {
void GetFlags;
void GetPerm;
void GetType;
void GetHigh;
void ToPtr;
} CapInspectFunc deriving(Bits, Eq, FShow);