From: Gabe Black Date: Mon, 22 Oct 2007 21:30:56 +0000 (-0700) Subject: X86: Implement the cda microop which checks if an address is legal to write to. X-Git-Tag: m5_2.0_beta4~31 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=421aea980f7cbc9495b9df36b6b4e76dc323d971;p=gem5.git X86: Implement the cda microop which checks if an address is legal to write to. --HG-- extra : convert_revision : afe20649180dd59ad0702b98f7293be6c9226359 --- diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index c9ace4790..61adde8d1 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -445,5 +445,27 @@ let {{ self.mnemonic = "lea" 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 }};