62,64d61
<
< // Load templates
<
121a119,170
> // LEA template
>
> def template MicroLeaExecute {{
> Fault %(class_name)s::execute(%(CPU_exec_context)s *xc,
> Trace::InstRecord *traceData) const
> {
> Fault fault = NoFault;
> Addr EA;
>
> %(op_decl)s;
> %(op_rd)s;
> %(ea_code)s;
> DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
>
> %(code)s;
> if(fault == NoFault)
> {
> %(op_wb)s;
> }
>
> return fault;
> }
> }};
>
> def template MicroLeaDeclare {{
> class %(class_name)s : public %(base_class)s
> {
> protected:
> void buildMe();
>
> public:
> %(class_name)s(ExtMachInst _machInst,
> const char * instMnem,
> bool isMicro, bool isDelayed, bool isFirst, bool isLast,
> uint8_t _scale, RegIndex _index, RegIndex _base,
> uint64_t _disp, uint8_t _segment,
> RegIndex _data,
> uint8_t _dataSize, uint8_t _addressSize);
>
> %(class_name)s(ExtMachInst _machInst,
> const char * instMnem,
> uint8_t _scale, RegIndex _index, RegIndex _base,
> uint64_t _disp, uint8_t _segment,
> RegIndex _data,
> uint8_t _dataSize, uint8_t _addressSize);
>
> %(BasicExecDeclare)s
> };
> }};
>
> // Load templates
>
414,415c463,464
< def __init__(self, data, addr, segment):
< super(LoadOp, self).__init__(data, addr, segment)
---
> def __init__(self, data, segment, addr, disp = 0):
> super(LoadOp, self).__init__(data, segment, addr, disp)
421a471,484
>
> iop = InstObjParams("lea", "Lea", 'LdStOp',
> {"code": "Data = merge(Data, EA, dataSize);", "ea_code": calculateEA})
> header_output += MicroLeaDeclare.subst(iop)
> decoder_output += MicroLdStOpConstructor.subst(iop)
> exec_output += MicroLeaExecute.subst(iop)
>
> class LeaOp(LdStOp):
> def __init__(self, data, segment, addr, disp = 0):
> super(LeaOp, self).__init__(data, segment, addr, disp)
> self.className = "Lea"
> self.mnemonic = "lea"
>
> microopClasses["lea"] = LeaOp