private static void Blx(ILEmitterCtx context, bool x) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; uint pc = op.GetPc(); bool isThumb = IsThumb(context.CurrOp); if (!isThumb) { context.EmitLdc_I(op.GetPc() - 4); } else { context.EmitLdc_I(op.GetPc() | 1); } context.EmitStint(GetBankedRegisterAlias(context.Mode, RegisterAlias.Aarch32Lr)); //If x is true, then this is a branch with link and exchange. //In this case we need to swap the mode between Arm <-> Thumb. if (x) { context.EmitLdc_I4(isThumb ? 0 : 1); context.EmitStflg((int)PState.TBit); } InstEmitFlowHelper.EmitCall(context, op.Imm); }
public static void B(ArmEmitterContext context) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; if (context.CurrBlock.Branch != null) { context.Branch(context.GetLabel((ulong)op.Immediate)); } else { EmitTailContinue(context, Const(op.Immediate)); } }
public static void B(ArmEmitterContext context) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; if (context.CurrBlock.Branch != null) { context.Branch(context.GetLabel((ulong)op.Immediate)); } else { context.StoreToContext(); context.Return(Const(op.Immediate)); } }
public static void B(ILEmitterCtx context) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; if (context.CurrBlock.Branch != null) { context.Emit(OpCodes.Br, context.GetLabel(op.Imm)); } else { context.EmitStoreContext(); context.EmitLdc_I8(op.Imm); context.Emit(OpCodes.Ret); } }
private static void Blx(ArmEmitterContext context, bool x) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; uint pc = op.GetPc(); bool isThumb = IsThumb(context.CurrOp); uint currentPc = isThumb ? op.GetPc() | 1 : op.GetPc() - 4; SetIntOrSP(context, GetBankedRegisterAlias(context.Mode, RegisterAlias.Aarch32Lr), Const(currentPc)); // If x is true, then this is a branch with link and exchange. // In this case we need to swap the mode between Arm <-> Thumb. if (x) { SetFlag(context, PState.TFlag, Const(isThumb ? 0 : 1)); } InstEmitFlowHelper.EmitCall(context, (ulong)op.Immediate); }
public static void B(ArmEmitterContext context) { IOpCode32BImm op = (IOpCode32BImm)context.CurrOp; context.Branch(context.GetLabel((ulong)op.Immediate)); }