79,80c79,80
< uint32_t _numMicroops, X86ISA::EmulEnv _emulEnv)
< : MacroopBase(mnem, _machInst, _numMicroops, _emulEnv)
---
> uint32_t _numMicroops, X86ISA::EmulEnv _env)
> : MacroopBase(mnem, _machInst, _numMicroops, _env)
105c105,108
< %(class_name)s(ExtMachInst machInst, X86ISA::EmulEnv env);
---
> %(class_name)s(ExtMachInst machInst, X86ISA::EmulEnv _env);
>
> std::string
> generateDisassembly(Addr pc, const SymbolTable *symtab) const;
109a113,128
> def template MacroDisassembly {{
> std::string
> X86Macroop::%(class_name)s::generateDisassembly(Addr pc,
> const SymbolTable *symtab) const
> {
> std::stringstream out;
> out << mnemonic << "\t";
>
> int regSize = %(regSize)s;
> %(disassembly)s
> // Shut up gcc.
> regSize = regSize;
> return out.str();
> }
> }};
>
113,114c132,133
< ExtMachInst machInst, EmulEnv env)
< : %(base_class)s("%(mnemonic)s", machInst, %(num_microops)s, env)
---
> ExtMachInst machInst, EmulEnv _env)
> : %(base_class)s("%(mnemonic)s", machInst, %(num_microops)s, _env)
120a140
> const char *macrocodeBlock = "%(class_name)s";
161c181,186
< return "new X86Macroop::%s(machInst, %s)" % (self.name, env.getAllocator())
---
> return "new X86Macroop::%s(machInst, %s)" % \
> (self.name, env.getAllocator())
> def getMnemonic(self):
> mnemonic = self.name.lower()
> mnemonic = re.match(r'[^_]*', mnemonic).group(0)
> return mnemonic
169c194
< iop = InstObjParams(self.name, self.name, "Macroop",
---
> iop = InstObjParams(self.getMnemonic(), self.name, "Macroop",
174c199
< def getDefinition(self):
---
> def getDefinition(self, env):
187c212,223
< iop = InstObjParams(self.name, self.name, "Macroop",
---
> if env.useStackSize:
> useStackSize = "true"
> else:
> useStackSize = "false"
> if env.memoryInst:
> memoryInst = "true"
> else:
> memoryInst = "false"
> regSize = '''(%s || (env.base == INTREG_RSP && %s) ?
> env.stackSize :
> env.dataSize)''' % (useStackSize, memoryInst)
> iop = InstObjParams(self.getMnemonic(), self.name, "Macroop",
192a229,230
> "disassembly" : env.disassembly,
> "regSize" : regSize,
194c232,233
< return MacroConstructor.subst(iop);
---
> return MacroConstructor.subst(iop) + \
> MacroDisassembly.subst(iop);
209a249,252
> self.disassembly = ""
> self.firstArgument = True
> self.useStackSize = False
> self.memoryInst = False
210a254,259
> def addToDisassembly(self, code):
> if not self.firstArgument:
> self.disassembly += "out << \", \";\n"
> self.firstArgument = False
> self.disassembly += code
>
267c316
< blocks.decoder_output = macroop.getDefinition()
---
> blocks.decoder_output = macroop.getDefinition(env)