// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-// Authors: Alec Roelke
////////////////////////////////////////////////////////////////////
//
/// Constructor.
%(class_name)s(ExtMachInst machInst);
- Fault execute(ExecContext *, Trace::InstRecord *) const;
- Fault eaComp(ExecContext *, Trace::InstRecord *) const;
- Fault initiateAcc(ExecContext *, Trace::InstRecord *) const;
- Fault completeAcc(PacketPtr, ExecContext *, Trace::InstRecord *) const;
+ Fault execute(ExecContext *, Trace::InstRecord *) const override;
+ Fault initiateAcc(ExecContext *, Trace::InstRecord *) const override;
+ Fault completeAcc(PacketPtr, ExecContext *,
+ Trace::InstRecord *) const override;
};
}};
}
}};
-def template EACompExecute {{
- Fault
- %(class_name)s::eaComp(ExecContext *xc, Trace::InstRecord *traceData) const
- {
- Addr EA;
- Fault fault = NoFault;
-
- %(op_decl)s;
- %(op_rd)s;
- %(ea_code)s;
-
- if (fault == NoFault) {
- %(op_wb)s;
- xc->setEA(EA);
- }
-
- return fault;
- }
-}};
-
let {{
def LoadStoreBase(name, Name, offset_code, ea_code, memacc_code, mem_flags,
inst_flags, base_class, postacc_code='', decode_template=BasicDecode,
if mem_flags:
mem_flags = [ 'Request::%s' % flag for flag in mem_flags ]
- s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';'
+ s = '\n\tmemAccessFlags = ' + '|'.join(mem_flags) + ';'
iop.constructor += s
# select templates
LoadStoreConstructor.subst(iop),
decode_template.subst(iop),
fullExecTemplate.subst(iop) +
- EACompExecute.subst(iop) +
initiateAccTemplate.subst(iop) +
completeAccTemplate.subst(iop))
}};
%(ea_code)s;
if (fault == NoFault) {
- fault = readMemAtomic(xc, traceData, EA, Mem, memAccessFlags);
+ fault = readMemAtomicLE(xc, traceData, EA, Mem, memAccessFlags);
%(memacc_code)s;
}
%(op_decl)s;
%(op_rd)s;
- getMem(pkt, Mem, traceData);
+ getMemLE(pkt, Mem, traceData);
if (fault == NoFault) {
%(memacc_code)s;
}
if (fault == NoFault) {
- fault = writeMemAtomic(xc, traceData, Mem, EA, memAccessFlags,
+ fault = writeMemAtomicLE(xc, traceData, Mem, EA, memAccessFlags,
nullptr);
}
}
if (fault == NoFault) {
- fault = writeMemTiming(xc, traceData, Mem, EA,
+ fault = writeMemTimingLE(xc, traceData, Mem, EA,
memAccessFlags, nullptr);
}
}
}};
-def format Load(memacc_code, ea_code={{EA = Rs1 + offset;}}, mem_flags=[],
- inst_flags=[]) {{
- offset_code = """
- offset = IMM12;
- if (IMMSIGN > 0)
- offset |= ~((uint64_t)0xFFF);
- """
+def format Load(memacc_code, ea_code = {{EA = Rs1 + offset;}},
+ offset_code={{offset = sext<12>(IMM12);}},
+ mem_flags=[], inst_flags=[]) {{
(header_output, decoder_output, decode_block, exec_output) = \
LoadStoreBase(name, Name, offset_code, ea_code, memacc_code, mem_flags,
inst_flags, 'Load', exec_template_base='Load')
}};
-def format Store(memacc_code, ea_code={{EA = Rs1 + offset;}}, mem_flags=[],
- inst_flags=[]) {{
- offset_code = """
- offset = IMM5 | (IMM7 << 5);
- if (IMMSIGN > 0)
- offset |= ~((uint64_t)0xFFF);
- """
+def format Store(memacc_code, ea_code={{EA = Rs1 + offset;}},
+ offset_code={{offset = sext<12>(IMM5 | (IMM7 << 5));}},
+ mem_flags=[], inst_flags=[]) {{
(header_output, decoder_output, decode_block, exec_output) = \
LoadStoreBase(name, Name, offset_code, ea_code, memacc_code, mem_flags,
inst_flags, 'Store', exec_template_base='Store')