Esempio n. 1
0
 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 !;
 }
Esempio n. 2
0
        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();
            }
        }