summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Norton2018-03-14 16:05:37 +0000
committerRobert Norton2018-03-14 18:04:09 +0000
commit26c7468c15c15424535afebc12e995a3a746476f (patch)
treeeef4818c21d114150e781056fccd0a0017c33e39
parent4c3579a6e4bd10e05f381235e4827b945553d0c1 (diff)
rename EXTS and EXTZ to sign_extend and zero_extend because it is more obviosu and to more closely match existing cheri pseudocode.
-rw-r--r--cheri/cheri_insts.sail26
-rw-r--r--cheri/cheri_prelude_128.sail10
-rw-r--r--mips/mips_insts.sail176
-rw-r--r--mips/mips_prelude.sail2
-rw-r--r--mips/mips_regfp.sail4
-rw-r--r--mips/mips_tlb.sail4
-rw-r--r--mips/prelude.sail12
7 files changed, 117 insertions, 117 deletions
diff --git a/cheri/cheri_insts.sail b/cheri/cheri_insts.sail
index fa6ae0fd..6e2b2282 100644
--- a/cheri/cheri_insts.sail
+++ b/cheri/cheri_insts.sail
@@ -203,7 +203,7 @@ function clause execute (CGetPerm(rd, cb)) =
raise_c2_exception(CapEx_AccessSystemRegsViolation, cb)
else
let capVal = readCapReg(cb) in
- wGPR(rd) = EXTZ(getCapPerms(capVal));
+ wGPR(rd) = zero_extend(getCapPerms(capVal));
/* END_CGetPerms */
}
@@ -216,7 +216,7 @@ function clause execute (CGetType(rd, cb)) =
else
let capVal = readCapReg(cb) in
wGPR(rd) = if (capVal.sealed)
- then EXTZ(capVal.otype)
+ then zero_extend(capVal.otype)
else (bitone ^^ 64)
/* END_CGetType */
}
@@ -266,7 +266,7 @@ function clause execute (CGetTag(rd, cb)) =
raise_c2_exception(CapEx_AccessSystemRegsViolation, cb)
else
let capVal = readCapReg(cb) in
- wGPR(rd) = EXTZ(capVal.tag);
+ wGPR(rd) = zero_extend(capVal.tag);
/* END_CGetTag */
}
@@ -278,7 +278,7 @@ function clause execute (CGetSealed(rd, cb)) =
raise_c2_exception(CapEx_AccessSystemRegsViolation, cb)
else
let capVal = readCapReg(cb) in
- wGPR(rd) = EXTZ(capVal.sealed);
+ wGPR(rd) = zero_extend(capVal.sealed);
/* END_CGetSealed */
}
@@ -325,7 +325,7 @@ function clause execute (CGetCause(rd)) =
if not (pcc_access_system_regs ()) then
raise_c2_exception_noreg(CapEx_AccessSystemRegsViolation)
else
- wGPR(rd) = EXTZ(CapCause.bits())
+ wGPR(rd) = zero_extend(CapCause.bits())
/* END_CGetCause */
}
@@ -462,7 +462,7 @@ function clause execute(CPtrCmp(rd, cb, ct, op)) =
CEXEQ => cb_val == ct_val,
CNEXEQ => cb_val != ct_val
};
- wGPR(rd) = EXTZ (cmp)
+ wGPR(rd) = zero_extend (cmp)
}
/* END_CPtrCmp */
}
@@ -495,7 +495,7 @@ function clause execute (CIncOffsetImmediate(cd, cb, imm)) =
/* START_CIncOffsetImmediate */
checkCP2usable();
let cb_val = readCapReg(cb);
- let imm64 : bits(64) = EXTS(imm) in
+ let imm64 : bits(64) = sign_extend(imm) in
if (register_inaccessible(cd)) then
raise_c2_exception(CapEx_AccessSystemRegsViolation, cd)
else if (register_inaccessible(cb)) then
@@ -787,7 +787,7 @@ function clause execute (CCheckPerm(cs, rt)) =
/* START_CCheckPerm */
checkCP2usable();
cs_val = readCapReg(cs);
- cs_perms : bits(64) = EXTZ(getCapPerms(cs_val));
+ cs_perms : bits(64) = zero_extend(getCapPerms(cs_val));
rt_perms = rGPR(rt);
if (register_inaccessible(cs)) then
raise_c2_exception(CapEx_AccessSystemRegsViolation, cs)
@@ -856,7 +856,7 @@ function clause execute (CTestSubset(rd, cb, ct)) =
0b0
else
0b1;
- wGPR(rd) = EXTZ(result);
+ wGPR(rd) = zero_extend(result);
}
/* END_CTestSubset */
}
@@ -1087,7 +1087,7 @@ function clause execute (CBX(cb, imm, notset)) =
raise_c2_exception(CapEx_AccessSystemRegsViolation, cb)
else if (((readCapReg(cb)).tag) ^ notset) then
{
- let offset : bits(64) = (EXTS(imm @ 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm @ 0b00) + 4) in
delayedPC = PC + offset;
branchPending = 0b1;
}
@@ -1103,7 +1103,7 @@ function clause execute (CBZ(cb, imm, notzero)) =
raise_c2_exception(CapEx_AccessSystemRegsViolation, cb)
else if (((readCapReg(cb)) == null_cap) ^ notzero) then
{
- let offset : bits(64) = (EXTS(imm @ 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm @ 0b00) + 4) in
delayedPC = PC + offset;
branchPending = 0b1;
}
@@ -1237,7 +1237,7 @@ function clause execute (CStore(rs, cb, rt, rd, offset, width, conditional)) =
}
else
false;
- wGPR(rd) = EXTZ(success);
+ wGPR(rd) = zero_extend(success);
}
else
match width
@@ -1295,7 +1295,7 @@ function clause execute (CSC(cs, cb, rt, rd, offset, conditional)) =
MEMw_tagged_conditional(pAddr, cs_val.tag, capStructToMemBits(cs_val))
else
false;
- wGPR(rd) = EXTZ(success);
+ wGPR(rd) = zero_extend(success);
}
else
MEMw_tagged(pAddr, cs_val.tag, capStructToMemBits(cs_val));
diff --git a/cheri/cheri_prelude_128.sail b/cheri/cheri_prelude_128.sail
index f0e96a14..9f91ae77 100644
--- a/cheri/cheri_prelude_128.sail
+++ b/cheri/cheri_prelude_128.sail
@@ -188,7 +188,7 @@ function memBitsToCapBits(tag, b) : (bool, bits(128)) -> bits(129) =
memBitsToCapBits128(tag, b ^ null_cap_bits)
function getCapPerms(cap) : CapStruct -> bits(31) =
- let perms : bits(15) = EXTS(getCapHardPerms(cap)) in /* NB access_system copied into 14-11 */
+ let perms : bits(15) = sign_extend(getCapHardPerms(cap)) in /* NB access_system copied into 14-11 */
(0x000 /* uperms 30-19 */
@ cap.uperms
@ perms)
@@ -219,7 +219,7 @@ function sealCap(cap, otype) : (CapStruct, bits(24)) -> (bool, CapStruct) =
function a_top_correction(a_mid, R, bound) : (bits(20), bits(20), bits(20)) -> bits(65) =
match (a_mid <_u R, bound <_u R) {
(false, false) => zeros(),
- (false, true) => EXTZ(0b1),
+ (false, true) => zero_extend(0b1),
(true, false) => ones(),
(true, true) => zeros()
}
@@ -227,7 +227,7 @@ function a_top_correction(a_mid, R, bound) : (bits(20), bits(20), bits(20)) -> b
function getCapBase(c) : CapStruct -> uint64 =
let E = min(unsigned(c.E), 48) in
let Bc : bits(20) = c.B in
- let a : bits(65) = EXTZ(c.address) in
+ let a : bits(65) = zero_extend(c.address) in
let R : bits(20) = Bc - 0x01000 in /* wraps */
let a_mid : bits(20) = mask(a >> E) in
let correction = a_top_correction(a_mid, R, Bc) in
@@ -239,7 +239,7 @@ function getCapTop (c) : CapStruct -> CapLen =
let E = min(unsigned(c.E), 48) in
let Bc : bits(20) = c.B in
let T : bits(20) = c.T in
- let a : bits(65) = EXTZ(c.address) in
+ let a : bits(65) = zero_extend(c.address) in
let R : bits(20) = Bc - 0x01000 in /* wraps */
let a_mid : bits(20) = mask(a >> E) in
let correction = a_top_correction(a_mid, R, T) in
@@ -326,7 +326,7 @@ function setCapBounds(cap, base, top) : (CapStruct, bits(64), bits(65)) -> (bool
let 'e = computeE(top - (0b0 @ base)) in
let Bc : bits(20) = mask(base >> e) in
let T : bits(20) = mask(top >> e) in
- let e_mask : bits(65) = EXTZ(replicate_bits(0b1, e)) in
+ let e_mask : bits(65) = zero_extend(replicate_bits(0b1, e)) in
let e_bits = top & e_mask in
let T2 : bits(20) = T + (if unsigned(e_bits) == 0 then 0x00000 else 0x00001) in
let newCap = {cap with E=to_bits(6, e), B=Bc, T=T2} in
diff --git a/mips/mips_insts.sail b/mips/mips_insts.sail
index e8f9a0f7..028665c9 100644
--- a/mips/mips_insts.sail
+++ b/mips/mips_insts.sail
@@ -50,7 +50,7 @@ function clause decode (0b011001 @ rs : regno @ rt : regno @ imm : imm16) =
function clause execute (DADDIU (rs, rt, imm)) =
{
- wGPR(rt) = rGPR(rs) + EXTS(imm)
+ wGPR(rt) = rGPR(rs) + sign_extend(imm)
}
/* DADDU Doubleword Add Unsigned -- another very simple instruction,
@@ -76,7 +76,7 @@ function clause decode (0b011000 @ rs : regno @ rt : regno @ imm : imm16) =
function clause execute (DADDI (rs, rt, imm)) =
{
- let sum65 : bits(65) = EXTS(rGPR(rs)) + EXTS(imm) in
+ let sum65 : bits(65) = sign_extend(rGPR(rs)) + sign_extend(imm) in
{
if (sum65[64] != sum65[63]) then
(SignalException(Ov))
@@ -95,7 +95,7 @@ function clause decode (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b0000
function clause execute (DADD (rs, rt, rd)) =
{
- let sum65 : bits(65) = EXTS(rGPR(rs)) + EXTS(rGPR(rt)) in
+ let sum65 : bits(65) = sign_extend(rGPR(rs)) + sign_extend(rGPR(rt)) in
{
if sum65[64] != sum65[63] then
(SignalException(Ov))
@@ -118,11 +118,11 @@ function clause execute (ADD(rs, rt, rd)) =
if NotWordVal(opA) | NotWordVal(opB) then
wGPR(rd) = undefined /* XXX could exit instead */
else
- let sum33 : bits(33) = EXTS(opA[31 .. 0]) + EXTS(opB[31 .. 0])in
+ let sum33 : bits(33) = sign_extend(opA[31 .. 0]) + sign_extend(opB[31 .. 0])in
if sum33[32] != sum33[31] then
(SignalException(Ov))
else
- wGPR(rd) = EXTS(sum33[31..0])
+ wGPR(rd) = sign_extend(sum33[31..0])
}
/* ADDI 32-bit add immediate -- reg, reg, imm with possible undefined behaviour or exception */
@@ -138,11 +138,11 @@ function clause execute (ADDI(rs, rt, imm)) =
if NotWordVal(opA) then
wGPR(rt) = undefined /* XXX could exit instead */
else
- let sum33 : bits(33) = EXTS(opA[31 .. 0]) + EXTS(imm) in
+ let sum33 : bits(33) = sign_extend(opA[31 .. 0]) + sign_extend(imm) in
if sum33[32] != sum33[31] then
(SignalException(Ov))
else
- wGPR(rt) = EXTS(sum33[31..0])
+ wGPR(rt) = sign_extend(sum33[31..0])
}
/* ADDU 32-bit add immediate -- reg, reg, reg with possible undefined behaviour */
@@ -159,7 +159,7 @@ function clause execute (ADDU(rs, rt, rd)) =
if NotWordVal(opA) | NotWordVal(opB) then
wGPR(rd) = undefined
else
- wGPR(rd) = EXTS(opA[31..0] + opB[31..0])
+ wGPR(rd) = sign_extend(opA[31..0] + opB[31..0])
}
@@ -176,7 +176,7 @@ function clause execute (ADDIU(rs, rt, imm)) =
if NotWordVal(opA) then
wGPR(rt) = undefined /* XXX could exit instead */
else
- wGPR(rt) = EXTS((opA[31 .. 0]) + EXTS(imm))
+ wGPR(rt) = sign_extend((opA[31 .. 0]) + sign_extend(imm))
}
/**************************************************************************************/
@@ -204,7 +204,7 @@ function clause decode (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b0000
function clause execute (DSUB (rs, rt, rd)) =
{
- let temp65 : bits(65) = EXTS(rGPR(rs)) - EXTS(rGPR(rt)) in
+ let temp65 : bits(65) = sign_extend(rGPR(rs)) - sign_extend(rGPR(rt)) in
{
if temp65[64] != temp65[63] then
(SignalException(Ov))
@@ -227,11 +227,11 @@ function clause execute (SUB(rs, rt, rd)) =
if NotWordVal(opA) | NotWordVal(opB) then
wGPR(rd) = undefined /* XXX could instead */
else
- let temp33 : bits(33) = EXTS(opA[31..0]) - EXTS(opB[31..0]) in
+ let temp33 : bits(33) = sign_extend(opA[31..0]) - sign_extend(opB[31..0]) in
if temp33[32] != temp33[31] then
(SignalException(Ov))
else
- wGPR(rd) = EXTS(temp33[31..0])
+ wGPR(rd) = sign_extend(temp33[31..0])
}
/* SUBU 32-bit 'unsigned' sub -- reg, reg, reg with possible undefined behaviour */
@@ -247,7 +247,7 @@ function clause execute (SUBU(rs, rt, rd)) =
if NotWordVal(opA) | NotWordVal(opB) then
wGPR(rd) = undefined
else
- wGPR(rd) = EXTS(opA[31..0] - opB[31..0])
+ wGPR(rd) = sign_extend(opA[31..0] - opB[31..0])
}
/**************************************************************************************/
@@ -272,7 +272,7 @@ function clause decode (0b001100 @ rs : regno @ rt : regno @ imm : imm16) =
Some(ANDI(rs, rt, imm))
function clause execute (ANDI (rs, rt, imm)) =
{
- wGPR(rt) = (rGPR(rs) & EXTZ(imm))
+ wGPR(rt) = (rGPR(rs) & zero_extend(imm))
}
/* OR reg, reg, reg */
@@ -292,7 +292,7 @@ function clause decode (0b001101 @ rs : regno @ rt : regno @ imm : imm16) =
Some(ORI(rs, rt, imm))
function clause execute (ORI (rs, rt, imm)) =
{
- wGPR(rt) = (rGPR(rs) | EXTZ(imm))
+ wGPR(rt) = (rGPR(rs) | zero_extend(imm))
}
/* NOR reg, reg, reg */
@@ -321,7 +321,7 @@ function clause decode (0b001110 @ rs : regno @ rt : regno @ imm : imm16) =
Some(XORI(rs, rt, imm))
function clause execute (XORI (rs, rt, imm)) =
{
- wGPR(rt) = (rGPR(rs) ^ EXTZ(imm))
+ wGPR(rt) = (rGPR(rs) ^ zero_extend(imm))
}
/* LUI reg, imm 32-bit load immediate into upper 16 bits */
@@ -330,7 +330,7 @@ function clause decode (0b001111 @ 0b00000 @ rt : regno @ imm : imm16) =
Some(LUI(rt, imm))
function clause execute (LUI (rt, imm)) =
{
- wGPR(rt) = EXTS(imm @ 0x0000)
+ wGPR(rt) = sign_extend(imm @ 0x0000)
}
/**************************************************************************************/
@@ -449,7 +449,7 @@ function clause decode (0b000000 @ 0b00000 @ rt : regno @ rd : regno @ sa : regn
function clause execute (SLL(rt, rd, sa)) =
{
rt32 = rGPR(rt)[31..0];
- wGPR(rd) = EXTS(rt32 << sa);
+ wGPR(rd) = sign_extend(rt32 << sa);
}
/* SLLV 32-bit shift left variable */
@@ -461,7 +461,7 @@ function clause execute (SLLV(rs, rt, rd)) =
{
sa = rGPR(rs)[4..0];
rt32 = rGPR(rt)[31..0];
- wGPR(rd) = EXTS(rt32 << sa)
+ wGPR(rd) = sign_extend(rt32 << sa)
}
/* SRA 32-bit arithmetic shift right */
@@ -476,7 +476,7 @@ function clause execute (SRA(rt, rd, sa)) =
wGPR(rd) = undefined
else {
rt32 = temp[31..0];
- wGPR(rd) = EXTS(rt32 >>_s sa);
+ wGPR(rd) = sign_extend(rt32 >>_s sa);
}
}
@@ -493,7 +493,7 @@ function clause execute (SRAV(rs, rt, rd)) =
wGPR(rd) = undefined
else {
rt32 = temp[31..0];
- wGPR(rd) = EXTS(rt32 >>_s sa)
+ wGPR(rd) = sign_extend(rt32 >>_s sa)
}
}
@@ -509,7 +509,7 @@ function clause execute (SRL(rt, rd, sa)) =
wGPR(rd) = undefined
else {
rt32 = temp[31..0];
- wGPR(rd) = EXTS(rt32 >> sa);
+ wGPR(rd) = sign_extend(rt32 >> sa);
}
}
@@ -526,7 +526,7 @@ function clause execute (SRLV(rs, rt, rd)) =
wGPR(rd) = undefined
else {
rt32 = temp[31..0];
- wGPR(rd) = EXTS(rt32 >> sa);
+ wGPR(rd) = sign_extend(rt32 >> sa);
}
}
@@ -541,7 +541,7 @@ function clause decode (0b000000 @ rs : regno @ rt : regno @ rd : regno @ 0b0000
Some(SLT(rs, rt, rd))
function clause execute (SLT(rs, rt, rd)) =
{
- wGPR(rd) = EXTZ(if (rGPR(rs) <_s rGPR(rt)) then 0b1 else 0b0)
+ wGPR(rd) = zero_extend(if (rGPR(rs) <_s rGPR(rt)) then 0b1 else 0b0)
}
/* SLT set if less than immediate (signed) */
@@ -553,7 +553,7 @@ function clause execute (SLTI(rs, rt, imm)) =
{
let imm_val = signed(imm) in
let rs_val = signed(rGPR(rs)) in
- wGPR(rt) = EXTZ(if (rs_val < imm_val) then 0b1 else 0b0)
+ wGPR(rt) = zero_extend(if (rs_val < imm_val) then 0b1 else 0b0)
}
/* SLTU set if less than unsigned */
@@ -565,7 +565,7 @@ function clause execute (SLTU(rs, rt, rd)) =
{
let rs_val = rGPR(rs) in
let rt_val = rGPR(rt) in
- wGPR(rd) = EXTZ(if (rs_val <_u rt_val) then 0b1 else 0b0)
+ wGPR(rd) = zero_extend(if (rs_val <_u rt_val) then 0b1 else 0b0)
}
/* SLTIU set if less than immediate unsigned */
@@ -576,8 +576,8 @@ function clause decode (0b001011 @ rs : regno @ rt : regno @ imm : imm16) =
function clause execute (SLTIU(rs, rt, imm)) =
{
let rs_val = rGPR(rs) in
- let immext : bits(64) = EXTS(imm) in /* NB defined to sign extend here even though comparison is unsigned! */
- wGPR(rt) = EXTZ(if (rs_val <_u immext) then 0b1 else 0b0)
+ let immext : bits(64) = sign_extend(imm) in /* NB defined to sign extend here even though comparison is unsigned! */
+ wGPR(rt) = zero_extend(if (rs_val <_u immext) then 0b1 else 0b0)
}
/* MOVN move if non-zero */
@@ -650,11 +650,11 @@ function clause execute (MUL(rs, rt, rd)) =
{
rsVal = rGPR(rs);
rtVal = rGPR(rt);
- result : bits(64) = EXTS((rsVal[31..0]) *_s (rtVal[31..0]));
+ result : bits(64) = sign_extend((rsVal[31..0]) *_s (rtVal[31..0]));
wGPR(rd) = if (NotWordVal(rsVal) | NotWordVal(rtVal)) then
undefined
else
- EXTS(result[31..0]);
+ sign_extend(result[31..0]);
/* HI and LO are technically undefined after MUL, but this causes problems with tests and
(potentially) context switch so just leave them alone
HI = undefined;
@@ -674,8 +674,8 @@ function clause execute (MULT(rs, rt)) =
undefined
else
(rsVal[31..0]) *_s (rtVal[31..0]);
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* MULTU 32-bit unsignedm rultiply into HI/LO */
@@ -690,8 +690,8 @@ function clause execute (MULTU(rs, rt)) =
undefined
else
(rsVal[31..0]) *_u (rtVal[31..0]);
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* DMULT 64-bit multiply into HI/LO */
@@ -729,8 +729,8 @@ function clause execute (MADD(rs, rt)) =
else
rsVal[31..0] *_s rtVal[31..0];
result = mul_result + (HI[31..0] @ LO[31..0]);
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* MADDU 32-bit unsigned multiply and add into HI/LO */
@@ -746,8 +746,8 @@ function clause execute (MADDU(rs, rt)) =
else
rsVal[31..0] *_u rtVal[31..0];
result = mul_result + (HI[31..0] @ LO[31..0]);
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* MSUB 32-bit signed multiply and sub from HI/LO */
@@ -763,8 +763,8 @@ function clause execute (MSUB(rs, rt)) =
else
rsVal[31..0] *_s rtVal[31..0];
result = (HI[31..0] @ LO[31..0]) - mul_result;
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* MSUBU 32-bit unsigned multiply and sub from HI/LO */
@@ -780,8 +780,8 @@ function clause execute (MSUBU(rs, rt)) =
else
rsVal[31..0] *_u rtVal[31..0];
result = (HI[31..0] @ LO[31..0]) - mul_result;
- HI = EXTS(result[63..32]);
- LO = EXTS(result[31..0]);
+ HI = sign_extend(result[63..32]);
+ LO = sign_extend(result[31..0]);
}
/* DIV 32-bit divide into HI/LO */
@@ -803,8 +803,8 @@ function clause execute (DIV(rs, rt)) =
(to_bits(32, qi), to_bits(32, ri))
in
{
- HI = EXTS(r);
- LO = EXTS(q);
+ HI = sign_extend(r);
+ LO = sign_extend(q);
}
}
@@ -827,8 +827,8 @@ function clause execute (DIVU(rs, rt)) =
(to_bits(32, qi), to_bits(32, ri))
in
{
- HI = EXTS(r);
- LO = EXTS(q);
+ HI = sign_extend(r);
+ LO = sign_extend(q);
}
}
@@ -938,7 +938,7 @@ function clause execute (BEQ(rs, rd, imm, ne, likely)) =
{
if ((rGPR(rs) == rGPR(rd)) ^ ne) then
{
- let offset : bits(64) = (EXTS(imm @ 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm @ 0b00) + 4) in
delayedPC = PC + offset;
branchPending = 0b1;
}
@@ -992,10 +992,10 @@ function clause execute (BCMPZ(rs, imm, cmp, link, likely)) =
{
linkVal = PC + 8;
regVal = rGPR(rs);
- condition = compare(cmp, regVal, EXTZ(0b0));
+ condition = compare(cmp, regVal, zero_extend(0b0));
if (condition) then
{
- let offset : bits(64) = (EXTS(imm @ 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm @ 0b00) + 4) in
delayedPC = PC + offset;
branchPending = 0b1;
}
@@ -1091,7 +1091,7 @@ function clause decode (0b000001 @ rs : regno @ 0b01011 @ imm : imm16) =
function clause execute (TRAPIMM(rs, imm, cmp)) =
{
rs_val = rGPR(rs);
- imm_val : bits(64) = EXTS(imm);
+ imm_val : bits(64) = sign_extend(imm);
condition = compare(cmp, rs_val, imm_val);
if (condition) then
(SignalException(Tr))
@@ -1124,14 +1124,14 @@ function clause decode (0b110100 @ base : regno @ rt : regno @ offset : imm16) =
val extendLoad : forall 'sz, 'sz <= 64 . (bits('sz), bool) -> bits(64) effect pure
function extendLoad(memResult, sign) = {
if (sign) then
- EXTS(memResult)
+ sign_extend(memResult)
else
- EXTZ(memResult)
+ zero_extend(memResult)
}
function clause execute (Load(width, sign, linked, base, rt, offset)) =
{
- vAddr : bits(64) = addrWrapper(EXTS(offset) + rGPR(base), LoadData, width);
+ vAddr : bits(64) = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, width);
if ~ (isAddressAligned(vAddr, width)) then
(SignalExceptionBadAddr(AdEL, vAddr)) /* unaligned access */
else
@@ -1180,7 +1180,7 @@ function clause decode (0b111100 @ base : regno @ rt : regno @ offset : imm16) =
Some(Store(D, true, base, rt, offset)) /* SCD */
function clause execute (Store(width, conditional, base, rt, offset)) =
{
- vAddr : bits(64) = addrWrapper(EXTS(offset) + rGPR(base), StoreData, width);
+ vAddr : bits(64) = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, width);
rt_val = rGPR(rt);
if ~ (isAddressAligned(vAddr, width)) then
(SignalExceptionBadAddr(AdES, vAddr)) /* unaligned access */
@@ -1196,7 +1196,7 @@ function clause execute (Store(width, conditional, base, rt, offset)) =
W => MEMw_conditional_wrapper(pAddr, 4, rt_val[31..0]),
D => MEMw_conditional_wrapper(pAddr, 8, rt_val)
} else false;
- wGPR(rt) = EXTZ(success)
+ wGPR(rt) = zero_extend(success)
}
else
match width
@@ -1217,7 +1217,7 @@ function clause decode(0b100010 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(LWL(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), LoadData, W);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, W);
let pAddr = (TLBTranslate(vAddr, LoadData)) in
{
mem_val = MEMr_wrapper (pAddr[63..2] @ 0b00, 4); /* read word of interest */
@@ -1229,7 +1229,7 @@ function clause execute(LWL(base, rt, offset)) =
0b10 => mem_val[15..0] @ reg_val[15..0],
0b11 => mem_val[07..0] @ reg_val[23..0]
};
- wGPR(rt) = EXTS(result);
+ wGPR(rt) = sign_extend(result);
}
}
union clause ast = LWR : (regno, regno, bits(16))
@@ -1238,7 +1238,7 @@ function clause decode(0b100110 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(LWR(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), LoadData, W);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, W);
let pAddr = (TLBTranslate(vAddr, LoadData)) in
{
mem_val = MEMr_wrapper(pAddr[63..2] @ 0b00, 4); /* read word of interest */
@@ -1250,7 +1250,7 @@ function clause execute(LWR(base, rt, offset)) =
0b10 => reg_val[31..24] @ mem_val[31..8],
0b11 => mem_val
};
- wGPR(rt) = EXTS(result)
+ wGPR(rt) = sign_extend(result)
}
}
@@ -1261,7 +1261,7 @@ function clause decode(0b101010 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(SWL(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), StoreData, W);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, W);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);
@@ -1281,7 +1281,7 @@ function clause decode(0b101110 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(SWR(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), StoreData, W);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, W);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
wordAddr = pAddr[63..2] @ 0b00;
@@ -1303,7 +1303,7 @@ function clause decode(0b011010 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(LDL(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), LoadData, D);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, D);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
mem_val = MEMr_wrapper(pAddr[63..3] @ 0b000, 8); /* read double of interest */
@@ -1329,7 +1329,7 @@ function clause decode(0b011011 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(LDR(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), LoadData, D);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), LoadData, D);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
mem_val = MEMr_wrapper(pAddr[63..3] @ 0b000, 8); /* read double of interest */
@@ -1355,7 +1355,7 @@ function clause decode(0b101100 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(SDL(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), StoreData, D);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, D);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);
@@ -1381,7 +1381,7 @@ function clause decode(0b101101 @ base : regno @ rt : regno @ offset : imm16) =
function clause execute(SDR(base, rt, offset)) =
{
/* XXX length check not quite right, but conservative */
- vAddr = addrWrapper(EXTS(offset) + rGPR(base), StoreData, D);
+ vAddr = addrWrapper(sign_extend(offset) + rGPR(base), StoreData, D);
let pAddr = TLBTranslate(vAddr, StoreData) in
{
reg_val = rGPR(rt);
@@ -1433,27 +1433,27 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
checkCP0Access();
let result : bits(64) = match (rd, sel)
{
- (0b00000,0b000) => let idx : bits(31) = EXTZ(TLBIndex) in
+ (0b00000,0b000) => let idx : bits(31) = zero_extend(TLBIndex) in
(0x00000000 @ TLBProbe @ idx), /* 0, TLB Index */
- (0b00001,0b000) => EXTZ(TLBRandom), /* 1, TLB Random */
+ (0b00001,0b000) => zero_extend(TLBRandom), /* 1, TLB Random */
(0b00010,0b000) => TLBEntryLo0.bits(), /* 2, TLB EntryLo0 */
(0b00011,0b000) => TLBEntryLo1.bits(), /* 3, TLB EntryLo1 */
(0b00100,0b000) => TLBContext.bits(), /* 4, TLB Context */
- (0b00101,0b000) => EXTZ(TLBPageMask @ 0x000), /* 5, TLB PageMask */
- (0b00110,0b000) => EXTZ(TLBWired), /* 6, TLB Wired */
- (0b00111,0b000) => EXTZ(CP0HWREna), /* 7, HWREna */
+ (0b00101,0b000) => zero_extend(TLBPageMask @ 0x000), /* 5, TLB PageMask */
+ (0b00110,0b000) => zero_extend(TLBWired), /* 6, TLB Wired */
+ (0b00111,0b000) => zero_extend(CP0HWREna), /* 7, HWREna */
(0b01000,0b000) => CP0BadVAddr, /* 8, BadVAddr reg */
- (0b01000,0b001) => EXTZ(0b0), /* 8, BadInstr reg XXX TODO */
- (0b01001,0b000) => EXTZ(CP0Count), /* 9, Count reg */
+ (0b01000,0b001) => zero_extend(0b0), /* 8, BadInstr reg XXX TODO */
+ (0b01001,0b000) => zero_extend(CP0Count), /* 9, Count reg */
(0b01010,0b000) => TLBEntryHi.bits(),/* 10, TLB EntryHi */
- (0b01011,0b000) => EXTZ(CP0Compare), /* 11, Compare reg */
- (0b01100,0b000) => EXTZ(CP0Status.bits()), /* 12, Status reg */
- (0b01101,0b000) => EXTZ(CP0Cause.bits()), /* 13, Cause reg */
+ (0b01011,0b000) => zero_extend(CP0Compare), /* 11, Compare reg */
+ (0b01100,0b000) => zero_extend(CP0Status.bits()), /* 12, Status reg */
+ (0b01101,0b000) => zero_extend(CP0Cause.bits()), /* 13, Cause reg */
(0b01110,0b000) => CP0EPC, /* 14, EPC */
- (0b01111,0b000) => EXTZ(0x00000400), /* 15, sel 0: PrID processor ID */
- (0b01111,0b110) => EXTZ(0b0), /* 15, sel 6: CHERI core ID */
- (0b01111,0b111) => EXTZ(0b0), /* 15, sel 7: CHERI thread ID */
- (0b10000,0b000) => EXTZ(0b1 /* M */ /* 16, sel 0: Config0 */
+ (0b01111,0b000) => zero_extend(0x00000400), /* 15, sel 0: PrID processor ID */
+ (0b01111,0b110) => zero_extend(0b0), /* 15, sel 6: CHERI core ID */
+ (0b01111,0b111) => zero_extend(0b0), /* 15, sel 7: CHERI thread ID */
+ (0b10000,0b000) => zero_extend(0b1 /* M */ /* 16, sel 0: Config0 */
@ 0b000000000000000 /* Impl */
@ 0b1 /* BE */
@ 0b10 /* AT */
@@ -1461,7 +1461,7 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
@ 0b001 /* MT standard TLB */
@ 0b0000 /* zero */
@ 0b000),
- (0b10000,0b001) => EXTZ( /* 16, sel 1: Config1 */
+ (0b10000,0b001) => zero_extend( /* 16, sel 1: Config1 */
0b1 /* M */
@ TLBIndexMax /* MMU size-1 */
@ 0b000 /* IS icache sets */
@@ -1477,7 +1477,7 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
@ 0b0 /* CA 16e code compression */
@ 0b0 /* EP EJTAG */
@ 0b0), /* FP FPU present */
- (0b10000,0b010) => EXTZ( /* 16, sel 2: Config2 */
+ (0b10000,0b010) => zero_extend( /* 16, sel 2: Config2 */
0b1 /* M */
@ 0b000 /* TU L3 control */
@ 0b0000 /* TS L3 sets */
@@ -1490,13 +1490,13 @@ function clause execute (MFC0(rt, rd, sel, double)) = {
(0b10000,0b011) => 0x0000000000002000, /* 16, sel 3: Config3 zero except for bit 13 == ulri */
(0b10000,0b101) => 0x0000000000000000, /* 16, sel 5: Config5 beri specific -- no extended TLB */
(0b10001,0b000) => CP0LLAddr, /* 17, sel 0: LLAddr */
- (0b10010,0b000) => EXTZ(0b0), /* 18, WatchLo */
- (0b10011,0b000) => EXTZ(0b0), /* 19, WatchHi */
+ (0b10010,0b000) => zero_extend(0b0), /* 18, WatchLo */
+ (0b10011,0b000) => zero_extend(0b0), /* 19, WatchHi */
(0b10100,0b000) => TLBXContext.bits(), /* 20, XContext */
(0b11110,0b000) => CP0ErrorEPC, /* 30, ErrorEPC */
_ => (SignalException(ResI))
} in
- wGPR(rt) = if (double) then result else EXTS(result[31..0])
+ wGPR(rt) = if (double) then result else sign_extend(result[31..0])
}
/* simulator halt instruction "MTC0 rt, r23" (cheri specific behaviour) */
@@ -1676,10 +1676,10 @@ function clause execute (RDHWR(rt, rd)) = {
if ~(haveAccessLevel | haveCU0 | haveHWREna) then
(SignalException(ResI));
let temp : bits(64) = match rd {
- 0b00000 => EXTZ([bitzero]), /* CPUNum */
- 0b00001 => EXTZ([bitzero]), /* SYNCI_step */
- 0b00010 => EXTZ(CP0Count), /* Count */
- 0b00011 => EXTZ([bitone]), /* Count resolution */
+ 0b00000 => zero_extend([bitzero]), /* CPUNum */
+ 0b00001 => zero_extend([bitzero]), /* SYNCI_step */
+ 0b00010 => zero_extend(CP0Count), /* Count */
+ 0b00011 => zero_extend([bitone]), /* Count resolution */
0b11101 => CP0UserLocal, /* User local register */
_ => (SignalException(ResI))
} in
diff --git a/mips/mips_prelude.sail b/mips/mips_prelude.sail
index b4f09548..b672d993 100644
--- a/mips/mips_prelude.sail
+++ b/mips/mips_prelude.sail
@@ -425,7 +425,7 @@ function SignalExceptionMIPS (ex, kccBase) =
0xFFFFFFFF80000000;
/* On CHERI we have to subtract KCC.base so that we end up at the
right absolute vector address after indirecting via new PCC */
- nextPC = vectorBase + EXTS(vectorOffset) - kccBase;
+ nextPC = vectorBase + sign_extend(vectorOffset) - kccBase;
CP0Cause->ExcCode() = ExceptionCode(ex);
CP0Status->EXL() = 0b1;
throw (ISAException());
diff --git a/mips/mips_regfp.sail b/mips/mips_regfp.sail
index 4bf96022..0c77fb9f 100644
--- a/mips/mips_regfp.sail
+++ b/mips/mips_regfp.sail
@@ -349,7 +349,7 @@ function (regfps,regfps,regfps,niafps,diafp,instruction_kind) initial_analysis (
ik = IK_cond_branch;
if rs == 0 then () else iR = RFull(GPRs[rs]) :: iR;
if rd == 0 then () else iR = RFull(GPRs[rd]) :: iR;
- let offset : bits(64) = (EXTS(imm : 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm : 0b00) + 4) in
Dia = DIAFP_concrete (PC + offset);
}
(BCMPZ(rs, imm, cmp, link, likely)) => {
@@ -357,7 +357,7 @@ function (regfps,regfps,regfps,niafps,diafp,instruction_kind) initial_analysis (
if rs == 0 then () else iR = RFull(GPRs[rs]) :: iR;
if link then
oR = RFull("GPR31") :: oR;
- let offset : bits(64) = (EXTS(imm : 0b00) + 4) in
+ let offset : bits(64) = (sign_extend(imm : 0b00) + 4) in
Dia = DIAFP_concrete (PC + offset);
}
(SYSCALL_THREAD_START) => ()
diff --git a/mips/mips_tlb.sail b/mips/mips_tlb.sail
index 741eb84c..6313c001 100644
--- a/mips/mips_tlb.sail
+++ b/mips/mips_tlb.sail
@@ -40,7 +40,7 @@ function tlbEntryMatch(r, vpn2, asid, entry) =
let entryVPN = entry.vpn2() in
let entryASID = entry.asid() in
let entryG = entry.g() in
- let vpnMask : bits(27) = ~(EXTZ(entryMask)) in
+ let vpnMask : bits(27) = ~(zero_extend(entryMask)) in
(entryValid &
(r == entryR) &
((vpn2 & vpnMask) == ((entryVPN) & vpnMask)) &
@@ -93,7 +93,7 @@ function TLBTranslate2 (vAddr, accessType) = {
else if ((accessType == StoreData) & ~(d)) then
SignalExceptionTLB(TLBMod, vAddr)
else
- let res : bits(64) = EXTZ(pfn[23..(evenOddBit - 12)] @ vAddr[(evenOddBit - 1) .. 0]) in
+ let res : bits(64) = zero_extend(pfn[23..(evenOddBit - 12)] @ vAddr[(evenOddBit - 1) .. 0]) in
(res, bits_to_bool(if (accessType == StoreData) then caps else capl)),
None() => SignalExceptionTLB(
if (accessType == StoreData) then XTLBRefillS else XTLBRefillL, vAddr)
diff --git a/mips/prelude.sail b/mips/prelude.sail
index 272b6e04..63fed9c4 100644
--- a/mips/prelude.sail
+++ b/mips/prelude.sail
@@ -311,14 +311,14 @@ union exception = {
Error_internal_error : unit
}
-val "sign_extend" : forall 'n 'm, 'm >= 'n. (bits('n), atom('m)) -> bits('m)
-val "zero_extend" : forall 'n 'm, 'm >= 'n. (bits('n), atom('m)) -> bits('m)
+val _sign_extend = "sign_extend" : forall 'n 'm, 'm >= 'n. (bits('n), atom('m)) -> bits('m)
+val _zero_extend = "zero_extend" : forall 'n 'm, 'm >= 'n. (bits('n), atom('m)) -> bits('m)
-val EXTS : forall 'n 'm , 'm >= 'n . bits('n) -> bits('m)
-val EXTZ : forall 'n 'm , 'm >= 'n . bits('n) -> bits('m)
+val sign_extend : forall 'n 'm , 'm >= 'n . bits('n) -> bits('m)
+val zero_extend : forall 'n 'm , 'm >= 'n . bits('n) -> bits('m)
-function EXTS v = sign_extend(v, sizeof('m))
-function EXTZ v = zero_extend(v, sizeof('m))
+function sign_extend v = _sign_extend(v, sizeof('m))
+function zero_extend v = _zero_extend(v, sizeof('m))
val zeros : forall 'n, 'n >= 0 . unit -> bits('n)
function zeros() = replicate_bits (0b0,'n)