public C166Rewriter(C166Architecture arch, EndianImageReader rdr, ProcessorState state, IStorageBinder binder, IRewriterHost host) { this.arch = arch; this.state = state; this.binder = binder; this.host = host; this.rdr = rdr; this.dasm = new C166Disassembler(arch, rdr).GetEnumerator(); this.instrs = new List <RtlInstruction>(); this.m = new RtlEmitter(instrs); this.instr = null !; }
public IEnumerator <RtlInstructionCluster> GetEnumerator() { while (dasm.MoveNext()) { this.instr = dasm.Current; this.iclass = instr.InstructionClass; switch (instr.Mnemonic) { default: EmitUnitTest(); goto case Mnemonic.Invalid; case Mnemonic.Invalid: iclass = InstrClass.Invalid; m.Invalid(); break; case Mnemonic.add: RewriteAddSub(m.IAdd); break; case Mnemonic.and: RewriteLogical(m.And); break; case Mnemonic.bclr: RewriteBclr(); break; case Mnemonic.bset: RewriteBset(); break; case Mnemonic.calla: RewriteCalla(); break; case Mnemonic.cmp: RewriteCmp(); break; case Mnemonic.cmpb: RewriteCmp(); break; case Mnemonic.cmpd1: RewriteCmpIncDec(-1); break; case Mnemonic.diswdt: RewriteDiswdt(); break; case Mnemonic.einit: RewriteEinit(); break; case Mnemonic.jmpa: RewriteJmpa(); break; case Mnemonic.jmpr: RewriteJmpr(); break; case Mnemonic.jmps: RewriteJmps(); break; case Mnemonic.jnb: RewriteJnb(); break; case Mnemonic.mov: RewriteMov(); break; case Mnemonic.movb: RewriteMov(); break; case Mnemonic.nop: m.Nop(); break; case Mnemonic.push: RewritePush(); break; case Mnemonic.ret: RewriteRet(); break; case Mnemonic.reti: RewriteReti(); break; } yield return(m.MakeCluster(instr.Address, instr.Length, iclass)); instrs.Clear(); } }