From 421aea980f7cbc9495b9df36b6b4e76dc323d971 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Mon, 22 Oct 2007 14:30:56 -0700 Subject: X86: Implement the cda microop which checks if an address is legal to write to. --HG-- extra : convert_revision : afe20649180dd59ad0702b98f7293be6c9226359 --- src/arch/x86/isa/microops/ldstop.isa | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/arch') 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 }}; -- cgit v1.2.3