Example #1
0
        private void Push(Identifier reg)
        {
            var s = frame.EnsureRegister(arch.StackRegister);

            emitter.Assign(s, emitter.ISub(s, 1));
            emitter.Assign(emitter.LoadB(s), reg);
        }
Example #2
0
        private void RewriteBlockInstruction()
        {
            var bc = frame.EnsureRegister(Registers.bc);
            var de = frame.EnsureRegister(Registers.de);
            var hl = frame.EnsureRegister(Registers.hl);
            var V  = FlagGroup(FlagM.PF);

            emitter.Assign(emitter.LoadB(de), emitter.LoadB(hl));
            emitter.Assign(hl, emitter.IAdd(hl, 1));
            emitter.Assign(de, emitter.IAdd(de, 1));
            emitter.Assign(bc, emitter.ISub(bc, 1));
            emitter.BranchInMiddleOfInstruction(emitter.Ne0(bc), dasm.Current.Address, RtlClass.Transfer);
            emitter.Assign(V, emitter.Const(PrimitiveType.Bool, 0));
        }
Example #3
0
        private void RewriteBlockInstruction(Func <Expression, Expression, Expression> incdec, bool repeat)
        {
            var bc = frame.EnsureRegister(Registers.bc);
            var de = frame.EnsureRegister(Registers.de);
            var hl = frame.EnsureRegister(Registers.hl);
            var V  = FlagGroup(FlagM.PF);

            emitter.Assign(emitter.LoadB(de), emitter.LoadB(hl));
            emitter.Assign(hl, incdec(hl, Constant.Int16(1)));
            emitter.Assign(de, incdec(de, Constant.Int16(1)));
            emitter.Assign(bc, emitter.ISub(bc, 1));
            if (repeat)
            {
                emitter.BranchInMiddleOfInstruction(emitter.Ne0(bc), dasm.Current.Address, RtlClass.Transfer);
            }
            emitter.Assign(V, emitter.Const(PrimitiveType.Bool, 0));
        }
Example #4
0
 private void RewriteLds()
 {
     m.Assign(RewriteOp(0), m.LoadB(RewriteOp(1)));
 }