70c70,71
< decode_block = 'switch(%s) {\n' % switchVal
---
> blocks = OutputBlocks()
> blocks.decode_block = 'switch(%s) {\n' % switchVal
72,74c73,76
< new_block = builder(Name, *todo)
< new_block = '\tcase %s: %s\n' % (val, new_block)
< decode_block += new_block
---
> new_blocks = builder(Name, *todo)
> new_blocks.decode_block = \
> '\tcase %s: %s\n' % (val, new_blocks.decode_block)
> blocks.append(new_blocks)
76,80c78,83
< new_block = builder(Name, *default)
< new_block = '\tdefault: %s\n' % new_block
< decode_block += new_block
< decode_block += '}\n'
< return decode_block
---
> new_blocks = builder(Name, *default)
> new_blocks.decode_block = \
> '\tdefault: %s\n' % new_blocks.decode_block
> blocks.append(new_blocks)
> blocks.decode_block += '}\n'
> return blocks
97a101
> print "Specializing %s with opTypes %s" % (Name, opTypes)
99,102d102
< # print "Building a composite op with tags", opTypes
< # print "And code", code
< opNum = len(opTypes) - 1
<
104c104
< opType = OpType(opTypes[opNum])
---
> opType = OpType(opTypes[0])
109c109,112
< print "INTREG_R%s" % (opType.reg + opType.size.upper())
---
> if opType.reg in ("A", "B", "C", "D"):
> env.addReg("INTREG_R%sX" % opType.reg)
> else:
> env.addReg("INTREG_R%s" % opType.reg)
121c124
< print "(uint8_t)MODRM_REG"
---
> env.addReg("(uint8_t)MODRM_REG")
125d127
< print "(uint8_t)MODRM_RM"
128a131
> regEnv.addReg("(uint8_t)MODRM_RM")
132d134
< print "%0"
135a138
> print "%0"
137c140
< {"3" : (regTypes, memEnv)}, (memTypes, memEnv))
---
> {"3" : (regTypes, regEnv)}, (memTypes, memEnv))
149c152
< print "(uint8_t)MODRM_RM"
---
> env.addReg("(uint8_t)MODRM_RM")