private void Push(Identifier reg) { var s = frame.EnsureRegister(arch.StackRegister); emitter.Assign(s, emitter.ISub(s, 1)); emitter.Assign(emitter.LoadB(s), reg); }
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)); }
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)); }
private void RewriteLds() { m.Assign(RewriteOp(0), m.LoadB(RewriteOp(1))); }