71a72,73
>
> unsigned memAccFlags() { return memAccessFlags; }
110a113
>
112a116,145
> output exec {{
> /** return data in cases where there the size of data is only
> known in the packet
> */
> uint64_t getStoreData(Packet *packet) {
> switch (packet->getSize())
> {
> case 8:
> return packet->get<uint8_t>();
>
> case 16:
> return packet->get<uint16_t>();
>
> case 32:
> return packet->get<uint32_t>();
>
> case 864:
> return packet->get<uint64_t>();
>
> default:
> std::cerr << "bad store data size = " << packet->getSize() << std::endl;
>
> assert(0);
> return 0;
> }
> }
>
>
> }};
>
128c161
< EAComp(MachInst machInst);
---
> EAComp(ExtMachInst machInst);
140c173
< MemAcc(MachInst machInst);
---
> MemAcc(ExtMachInst machInst);
148c181
< %(class_name)s(MachInst machInst);
---
> %(class_name)s(ExtMachInst machInst);
154a188,189
>
> %(MemAccSizeDeclare)s
165c200
< Fault completeAcc(PacketPtr, %(CPU_exec_context)s *, Trace::InstRecord *) const;
---
> Fault completeAcc(Packet *, %(CPU_exec_context)s *, Trace::InstRecord *) const;
167a203,205
> def template MemAccSizeDeclare {{
> int memAccSize(%(CPU_exec_context)s *xc);
> }};
173c211
< inline %(class_name)s::EAComp::EAComp(MachInst machInst)
---
> inline %(class_name)s::EAComp::EAComp(ExtMachInst machInst)
182c220
< inline %(class_name)s::MemAcc::MemAcc(MachInst machInst)
---
> inline %(class_name)s::MemAcc::MemAcc(ExtMachInst machInst)
191c229
< inline %(class_name)s::%(class_name)s(MachInst machInst)
---
> inline %(class_name)s::%(class_name)s(ExtMachInst machInst)
212a251
> // NOTE: Trace Data is written using execute or completeAcc templates
214d252
< %(op_wb)s;
230d267
< %(fp_enable_check)s;
232a270
>
235,238c273
< if (fault == NoFault) {
< fault = xc->read(EA, (uint%(mem_acc_size)d_t&)Mem, memAccessFlags);
< %(memacc_code)s;
< }
---
> fault = xc->read(EA, (uint%(mem_acc_size)d_t&)Mem, memAccessFlags);
240,242c275
< if (fault == NoFault) {
< %(op_wb)s;
< }
---
> %(memacc_code)s;
243a277,278
> // NOTE: Write back data using execute or completeAcc templates
>
295d329
<
297c331
< Fault %(class_name)s::completeAcc(PacketPtr pkt,
---
> Fault %(class_name)s::completeAcc(Packet *pkt,
304a339
> %(op_rd)s;
320a356,364
>
> def template LoadStoreMemAccSize {{
> int %(class_name)s::memAccSize(%(CPU_exec_context)s *xc)
> {
> // Return the memory access size in bytes
> return (%(mem_acc_size)d / 8);
> }
> }};
>
327a372
> uint64_t write_result = 0;
331a377
>
340,341c386,388
< memAccessFlags, NULL);
< if (traceData) { traceData->setData(Mem); }
---
> memAccessFlags, &write_result);
> // @NOTE: Need to Call Complete Access to Set Trace Data
> //if (traceData) { traceData->setData(Mem); }
344,351d390
< if (fault == NoFault) {
< %(postacc_code)s;
< }
<
< if (fault == NoFault) {
< %(op_wb)s;
< }
<
392d430
<
398a437
> uint64_t write_result = 0;
411c450
< memAccessFlags, NULL);
---
> memAccessFlags, &write_result);
490c529
< Fault %(class_name)s::completeAcc(PacketPtr pkt,
---
> Fault %(class_name)s::completeAcc(Packet *pkt,
504a544,545
>
> if (traceData) { traceData->setData(getStoreData(pkt)); }
512c553
< Fault %(class_name)s::completeAcc(PacketPtr pkt,
---
> Fault %(class_name)s::completeAcc(Packet *pkt,
587c628
< Fault %(class_name)s::completeAcc(PacketPtr pkt,
---
> Fault %(class_name)s::completeAcc(Packet *pkt,
596a638,646
>
> def template MiscMemAccSize {{
> int %(class_name)s::memAccSize(%(CPU_exec_context)s *xc)
> {
> panic("Misc instruction does not support split access method!");
> return 0;
> }
> }};
>
652a703
> #decl_code += 'xc->readFunctional(EA,(uint32_t&)mem_word);'