RegIndex rMid = deinterleave ? VecSpecialElem : vd * 2;
- uint32_t noAlign = TLB::MustBeOne;
+ uint32_t noAlign = 0;
unsigned uopIdx = 0;
switch (regs) {
if (interleave) numMicroops += (regs / elems);
microOps = new StaticInstPtr[numMicroops];
- uint32_t noAlign = TLB::MustBeOne;
+ uint32_t noAlign = 0;
RegIndex rMid = interleave ? VecSpecialElem : vd * 2;
microOps = new StaticInstPtr[numMicroops];
unsigned uopIdx = 0;
- uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
- TLB::AllowUnaligned;
+ uint32_t memaccessFlags = (TLB::ArmFlags)eSize | TLB::AllowUnaligned;
int i = 0;
for (; i < numMemMicroops - 1; ++i) {
}
}
- uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
- TLB::AllowUnaligned;
+ uint32_t memaccessFlags = (TLB::ArmFlags)eSize | TLB::AllowUnaligned;
int i = 0;
for (; i < numMemMicroops - 1; ++i) {
microOps = new StaticInstPtr[numMicroops];
unsigned uopIdx = 0;
- uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
- TLB::AllowUnaligned;
+ uint32_t memaccessFlags = (TLB::ArmFlags)eSize | TLB::AllowUnaligned;
int i = 0;
for (; i < numMemMicroops - 1; ++i) {
numStructElems, index, i /* step */, replicate);
}
- uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
- TLB::AllowUnaligned;
+ uint32_t memaccessFlags = (TLB::ArmFlags)eSize | TLB::AllowUnaligned;
int i = 0;
for (; i < numMemMicroops - 1; ++i) {
MicroNeonMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
RegIndex _dest, RegIndex _ura, uint32_t _imm)
: MicroOp(mnem, machInst, __opClass),
- dest(_dest), ura(_ura), imm(_imm),
- memAccessFlags(TLB::MustBeOne)
+ dest(_dest), ura(_ura), imm(_imm), memAccessFlags()
{
}
};
MicroMemOp(const char *mnem, ExtMachInst machInst, OpClass __opClass,
RegIndex _ura, RegIndex _urb, bool _up, uint8_t _imm)
: MicroIntImmOp(mnem, machInst, __opClass, _ura, _urb, _imm),
- up(_up), memAccessFlags(TLB::MustBeOne | TLB::AlignWord)
+ up(_up), memAccessFlags(TLB::AlignWord)
{
}
bool _up, uint8_t _imm)
: MicroOp(mnem, machInst, __opClass),
dest(_dreg1), dest2(_dreg2), urb(_base), up(_up), imm(_imm),
- memAccessFlags(TLB::MustBeOne | TLB::AlignWord)
+ memAccessFlags(TLB::AlignWord)
{
}
IntRegIndex _base, uint64_t _imm)
: ArmStaticInst(mnem, _machInst, __opClass),
dest(_dest), base(_base), imm(_imm),
- memAccessFlags(ArmISA::TLB::AllowUnaligned | ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
baseIsSP = isSP(_base);
}
IntRegIndex _base, uint64_t _imm)
: ArmStaticInst(mnem, _machInst, __opClass),
dest(_dest), base(_base), imm(_imm),
- memAccessFlags(ArmISA::TLB::AllowUnaligned | ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
baseIsSP = isSP(_base);
}
IntRegIndex _offset)
: ArmStaticInst(mnem, _machInst, __opClass),
dest(_dest), gp(_gp), base(_base), offset(_offset),
- memAccessFlags(ArmISA::TLB::AllowUnaligned | ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
baseIsSP = isSP(_base);
}
uint64_t _imm)
: ArmStaticInst(mnem, _machInst, __opClass),
dest(_dest), gp(_gp), base(_base), imm(_imm),
- memAccessFlags(ArmISA::TLB::AllowUnaligned | ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
baseIsSP = isSP(_base);
}
Fault fault;
switch(misc_reg) {
case MISCREG_ATS1CPR:
- flags = TLB::MustBeOne;
tranType = TLB::S1CTran;
mode = BaseTLB::Read;
break;
case MISCREG_ATS1CPW:
- flags = TLB::MustBeOne;
tranType = TLB::S1CTran;
mode = BaseTLB::Write;
break;
case MISCREG_ATS1CUR:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1CTran;
mode = BaseTLB::Read;
break;
case MISCREG_ATS1CUW:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1CTran;
mode = BaseTLB::Write;
break;
case MISCREG_ATS12NSOPR:
if (!haveSecurity)
panic("Security Extensions required for ATS12NSOPR");
- flags = TLB::MustBeOne;
tranType = TLB::S1S2NsTran;
mode = BaseTLB::Read;
break;
case MISCREG_ATS12NSOPW:
if (!haveSecurity)
panic("Security Extensions required for ATS12NSOPW");
- flags = TLB::MustBeOne;
tranType = TLB::S1S2NsTran;
mode = BaseTLB::Write;
break;
case MISCREG_ATS12NSOUR:
if (!haveSecurity)
panic("Security Extensions required for ATS12NSOUR");
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1S2NsTran;
mode = BaseTLB::Read;
break;
case MISCREG_ATS12NSOUW:
if (!haveSecurity)
panic("Security Extensions required for ATS12NSOUW");
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1S2NsTran;
mode = BaseTLB::Write;
break;
case MISCREG_ATS1HR: // only really useful from secure mode.
- flags = TLB::MustBeOne;
tranType = TLB::HypMode;
mode = BaseTLB::Read;
break;
case MISCREG_ATS1HW:
- flags = TLB::MustBeOne;
tranType = TLB::HypMode;
mode = BaseTLB::Write;
break;
Fault fault;
switch(misc_reg) {
case MISCREG_AT_S1E1R_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E1Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S1E1W_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E1Tran;
mode = BaseTLB::Write;
break;
case MISCREG_AT_S1E0R_Xt:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1E0Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S1E0W_Xt:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S1E0Tran;
mode = BaseTLB::Write;
break;
case MISCREG_AT_S1E2R_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E2Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S1E2W_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E2Tran;
mode = BaseTLB::Write;
break;
case MISCREG_AT_S12E0R_Xt:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S12E0Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S12E0W_Xt:
- flags = TLB::MustBeOne | TLB::UserMode;
+ flags = TLB::UserMode;
tranType = TLB::S12E0Tran;
mode = BaseTLB::Write;
break;
case MISCREG_AT_S12E1R_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S12E1Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S12E1W_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S12E1Tran;
mode = BaseTLB::Write;
break;
case MISCREG_AT_S1E3R_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E3Tran;
mode = BaseTLB::Read;
break;
case MISCREG_AT_S1E3W_Xt:
- flags = TLB::MustBeOne;
tranType = TLB::S1E3Tran;
mode = BaseTLB::Write;
break;
bits(machInst, 22) << 4);
const uint32_t type = bits(machInst, 11, 8);
uint32_t size = 0;
- uint32_t align = TLB::MustBeOne;
+ uint32_t align = 0;
unsigned inc = 1;
unsigned regs = 1;
unsigned lane = 0;
self.top = top
self.paired = paired
- self.memFlags = ["ArmISA::TLB::MustBeOne"]
+ self.memFlags = []
self.instFlags = ["IsAtomic"]
self.codeBlobs = { "postacc_code" : "" }
self.codeBlobs['usrDecl'] = ""
if isTbh:
eaCode = '''
unsigned memAccessFlags = ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::AlignHalfWord |
- ArmISA::TLB::MustBeOne;
+ ArmISA::TLB::AlignHalfWord;
EA = Op1 + Op2 * 2
'''
accCode = 'NPC = PC + 2 * (Mem_uh);\n'
else:
eaCode = '''
unsigned memAccessFlags = ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::AlignByte |
- ArmISA::TLB::MustBeOne;
+ ArmISA::TLB::AlignByte;
EA = Op1 + Op2
'''
accCode = 'NPC = PC + 2 * (Mem_ub)'
msrdczva_ea_code = msr_check_code
msrdczva_ea_code += '''
- Request::Flags memAccessFlags = Request::CACHE_BLOCK_ZERO |
- ArmISA::TLB::MustBeOne;
+ Request::Flags memAccessFlags = Request::CACHE_BLOCK_ZERO;
EA = XBase;
assert(!(Dczid & 0x10));
uint64_t op_size = power(2, Dczid + 2);
msrdccvau_ea_code = msr_check_code
msrdccvau_ea_code += '''
- Request::Flags memAccessFlags = Request::CLEAN | Request::DST_POU |
- ArmISA::TLB::MustBeOne;
+ Request::Flags memAccessFlags = Request::CLEAN | Request::DST_POU;
EA = XBase;
faultAddr = EA;
System *sys = xc->tcBase()->getSystemPtr();
msrdccvac_ea_code = msr_check_code
msrdccvac_ea_code += '''
- Request::Flags memAccessFlags = Request::CLEAN | Request::DST_POC |
- ArmISA::TLB::MustBeOne;
+ Request::Flags memAccessFlags = Request::CLEAN | Request::DST_POC;
EA = XBase;
faultAddr = EA;
System *sys = xc->tcBase()->getSystemPtr();
msrdccivac_ea_code = msr_check_code
msrdccivac_ea_code += '''
Request::Flags memAccessFlags = Request::CLEAN |
- Request::INVALIDATE | Request::DST_POC | ArmISA::TLB::MustBeOne;
+ Request::INVALIDATE | Request::DST_POC;
EA = XBase;
faultAddr = EA;
System *sys = xc->tcBase()->getSystemPtr();
msrdcivac_ea_code = msr_check_code
msrdcivac_ea_code += '''
Request::Flags memAccessFlags = Request::INVALIDATE |
- Request::DST_POC | ArmISA::TLB::MustBeOne;
+ Request::DST_POC;
EA = XBase;
faultAddr = EA;
HCR hcr = Hcr64;
else:
self.op = " -"
- self.memFlags = ["ArmISA::TLB::MustBeOne"]
+ self.memFlags = []
self.codeBlobs = {"postacc_code" : ""}
- def emitHelper(self, base = 'Memory', wbDecl = None, instFlags = [], pcDecl = None):
+ def emitHelper(self, base='Memory', wbDecl=None, instFlags=[],
+ pcDecl=None):
global header_output, decoder_output, exec_output
self.flavor = flavor
self.top = top
- self.memFlags = ["ArmISA::TLB::MustBeOne"]
+ self.memFlags = []
self.instFlags = []
self.codeBlobs = {"postacc_code" : ""}
'''
McrDcimvacCode = '''
- const Request::Flags memAccessFlags(ArmISA::TLB::MustBeOne |
- Request::INVALIDATE |
+ const Request::Flags memAccessFlags(Request::INVALIDATE |
Request::DST_POC);
EA = Op1;
'''
Mcr15CompleteAcc.subst(McrDcimvacIop)
McrDccmvacCode = '''
- const Request::Flags memAccessFlags(ArmISA::TLB::MustBeOne |
- Request::CLEAN |
+ const Request::Flags memAccessFlags(Request::CLEAN |
Request::DST_POC);
EA = Op1;
'''
Mcr15CompleteAcc.subst(McrDccmvacIop)
McrDccmvauCode = '''
- const Request::Flags memAccessFlags(ArmISA::TLB::MustBeOne |
- Request::CLEAN |
+ const Request::Flags memAccessFlags(Request::CLEAN |
Request::DST_POU);
EA = Op1;
'''
Mcr15CompleteAcc.subst(McrDccmvauIop)
McrDccimvacCode = '''
- const Request::Flags memAccessFlags(ArmISA::TLB::MustBeOne |
- Request::CLEAN |
+ const Request::Flags memAccessFlags(Request::CLEAN |
Request::INVALIDATE |
Request::DST_POC);
EA = Op1;
else:
self.op = " -"
- self.memFlags = ["ArmISA::TLB::MustBeOne"]
+ self.memFlags = []
self.codeBlobs = { "postacc_code" : "" }
def emitHelper(self, base = 'Memory', wbDecl = None):
(newHeader,
newDecoder,
newExec) = self.fillTemplates(self.name, self.Name, codeBlobs,
- ["ArmISA::TLB::AlignWord", "ArmISA::TLB::MustBeOne"], [],
- 'SrsOp', wbDecl)
+ ["ArmISA::TLB::AlignWord"], [], 'SrsOp', wbDecl)
header_output += newHeader
decoder_output += newDecoder
self.flavor = flavor
self.top = top
- self.memFlags = ["ArmISA::TLB::MustBeOne"]
+ self.memFlags = []
self.instFlags = []
self.codeBlobs = { "postacc_code" : "" }
dest(_dest), gp(_gp), base(_base), imm(_imm),
elemIndex(_elemIndex), numElems(_numElems),
firstFault(_firstFault),
- memAccessFlags(ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
%(constructor)s;
if (_opClass == MemReadOp && elemIndex == 0) {
offsetIs32(_offsetIs32), offsetIsSigned(_offsetIsSigned),
offsetIsScaled(_offsetIsScaled), elemIndex(_elemIndex),
numElems(_numElems), firstFault(_firstFault),
- memAccessFlags(ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
%(constructor)s;
if (_opClass == MemReadOp && elemIndex == 0) {
: %(base_class)s(mnem, machInst, %(op_class)s),
dest(_dest), gp(_gp), base(_base), imm(_imm),
numRegs(_numRegs), regIndex(_regIndex),
- memAccessFlags(ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
%(constructor)s;
baseIsSP = isSP(_base);
: %(base_class)s(mnem, machInst, %(op_class)s),
dest(_dest), gp(_gp), base(_base), offset(_offset),
numRegs(_numRegs), regIndex(_regIndex),
- memAccessFlags(ArmISA::TLB::AllowUnaligned |
- ArmISA::TLB::MustBeOne)
+ memAccessFlags(ArmISA::TLB::AllowUnaligned)
{
%(constructor)s;
baseIsSP = isSP(_base);
// check here.
if (currState->stage2Req) {
Fault fault;
- flags = flags | TLB::MustBeOne;
if (isTiming) {
Stage2MMU::Stage2Translation *tran = new
bool is_write = (mode == Write);
if (!is_fetch) {
- assert(flags & MustBeOne || req->isPrefetch());
if (sctlr.a || !(flags & AllowUnaligned)) {
if (vaddr & mask(flags & AlignmentMask)) {
// LPAE is always disabled in SE mode
req->setFlags(Request::STRICT_ORDER);
}
if (!is_fetch) {
- assert(flags & MustBeOne || req->isPrefetch());
if (sctlr.a || !(flags & AllowUnaligned)) {
if (vaddr & mask(flags & AlignmentMask)) {
alignFaults++;
AllowUnaligned = 0x8,
// Priv code operating as if it wasn't
- UserMode = 0x10,
- // Because zero otherwise looks like a valid setting and may be used
- // accidentally, this bit must be non-zero to show it was used on
- // purpose.
- MustBeOne = 0x40
+ UserMode = 0x10
};
enum ArmTranslationType {
ostream &outs = Trace::output();
uint64_t written_data = 0;
- unsigned mem_flags = ArmISA::TLB::MustBeOne | 3 |
- ArmISA::TLB::AllowUnaligned;
+ unsigned mem_flags = 3 | ArmISA::TLB::AllowUnaligned;
ISetState isetstate;