75c75
< class MacroOp : public StaticInst
---
> class Macroop : public StaticInst
78c78
< const uint32_t numMicroOps;
---
> const uint32_t numMicroops;
81,82c81,82
< MacroOp(const char *mnem, ExtMachInst _machInst,
< uint32_t _numMicroOps)
---
> Macroop(const char *mnem, ExtMachInst _machInst,
> uint32_t _numMicroops)
84c84
< numMicroOps(_numMicroOps)
---
> numMicroops(_numMicroops)
86,88c86,88
< assert(numMicroOps);
< microOps = new StaticInstPtr[numMicroOps];
< flags[IsMacroOp] = true;
---
> assert(numMicroops);
> microops = new StaticInstPtr[numMicroops];
> flags[IsMacroop] = true;
91c91
< ~MacroOp()
---
> ~Macroop()
93c93
< delete [] microOps;
---
> delete [] microops;
96c96
< StaticInstPtr * microOps;
---
> StaticInstPtr * microops;
98c98
< StaticInstPtr fetchMicroOp(MicroPC microPC)
---
> StaticInstPtr fetchMicroop(MicroPC microPC)
100,101c100,101
< assert(microPC < numMicroOps);
< return microOps[microPC];
---
> assert(microPC < numMicroops);
> return microops[microPC];
116c116
< namespace X86Microop
---
> namespace X86Macroop
125c125
< %(class_name)s(ExtMachInst machInst);
---
> %(class_name)s(ExtMachInst machInst, EmulEnv env);
132,133c132,133
< inline %(class_name)s::%(class_name)s(ExtMachInst machInst)
< : %(base_class)s("%(mnemonic)s", machInst, %(num_micro_ops)s)
---
> inline X86Macroop::%(class_name)s::%(class_name)s(ExtMachInst machInst, EmulEnv env)
> : %(base_class)s("%(mnemonic)s", machInst, %(num_microops)s)
136c136
< //alloc_micro_ops is the code that sets up the microOps
---
> //alloc_microops is the code that sets up the microops
138c138
< %(alloc_micro_ops)s;
---
> %(alloc_microops)s;
156c156
< return "new X86Macroop::%s(machInst)" % self.name
---
> return "new X86Macroop::%s(machInst, %s)" % (self.name, env.getAllocator())
170c170
< "microOps[%d] = %s;\n" % \
---
> "microops[%d] = %s;\n" % \
176,177c176,177
< {"code" : "", "num_micro_ops" : numMicroops,
< "alloc_micro_ops" : allocMicroops})
---
> {"code" : "", "num_microops" : numMicroops,
> "alloc_microops" : allocMicroops})
204,205c204,207
< self.reg = "Not specified"
< self.regm = "Not specified"
---
> self.reg = "0"
> self.regUsed = False
> self.regm = "0"
> self.regmUsed = False
211,212c213,231
< return "EmulEmv(%(reg)s, %(regm)s, %(immediate)s, %(displacement)s, %(addressSize)s, %(dataSize)s)" % \
< self.__dict__()
---
> return '''EmulEnv(%(reg)s,
> %(regm)s,
> %(immediate)s,
> %(displacement)s,
> %(addressSize)s,
> %(dataSize)s)''' % \
> self.__dict__
> def addReg(self, reg):
> print "Adding reg \"%s\"" % reg
> if not self.regUsed:
> print "Added as reg"
> self.reg = reg
> self.regUsed = True
> elif not self.regmUsed:
> print "Added as regm"
> self.regm = reg
> self.regmUsed = True
> else:
> raise Exception, "EmulEnv is out of register specialization spots."
216a236
> blocks = OutputBlocks()
221,225c241,245
< global header_output
< global decoder_output
< header_output = macroop.getDeclaration()
< decoder_output = macroop.getDefinition()
< return "return %s;\n" % macroop.getAllocator(env)
---
> blocks.header_output = macroop.getDeclaration()
> blocks.decoder_output = macroop.getDefinition()
> macroop.declared = True
> blocks.decode_block = "return %s;\n" % macroop.getAllocator(env)
> return blocks