X86: Implement the cda microop which checks if an address is legal to write to.
--HG-- extra : convert_revision : afe20649180dd59ad0702b98f7293be6c9226359
This commit is contained in:
parent
93da9eb7f6
commit
421aea980f
|
@ -445,5 +445,27 @@ let {{
|
||||||
self.mnemonic = "lea"
|
self.mnemonic = "lea"
|
||||||
|
|
||||||
microopClasses["lea"] = LeaOp
|
microopClasses["lea"] = LeaOp
|
||||||
|
|
||||||
|
|
||||||
|
iop = InstObjParams("cda", "Cda", 'X86ISA::LdStOp',
|
||||||
|
{"code": '''
|
||||||
|
Addr paddr;
|
||||||
|
fault = xc->translateDataWriteAddr(EA, paddr,
|
||||||
|
dataSize, (1 << segment));
|
||||||
|
''',
|
||||||
|
"ea_code": calculateEA})
|
||||||
|
header_output += MicroLeaDeclare.subst(iop)
|
||||||
|
decoder_output += MicroLdStOpConstructor.subst(iop)
|
||||||
|
exec_output += MicroLeaExecute.subst(iop)
|
||||||
|
|
||||||
|
class CdaOp(LdStOp):
|
||||||
|
def __init__(self, segment, addr, disp = 0,
|
||||||
|
dataSize="env.dataSize", addressSize="env.addressSize"):
|
||||||
|
super(CdaOp, self).__init__("NUM_INTREGS", segment,
|
||||||
|
addr, disp, dataSize, addressSize)
|
||||||
|
self.className = "Cda"
|
||||||
|
self.mnemonic = "cda"
|
||||||
|
|
||||||
|
microopClasses["cda"] = CdaOp
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue