public static void Stp(ILEmitterCtx context) { OpCodeMemPair64 op = (OpCodeMemPair64)context.CurrOp; EmitLoadAddress(context); if (op is IOpCodeSimd64) { context.EmitLdvec(op.Rt); } else { context.EmitLdintzr(op.Rt); } EmitWriteCall(context, op.Size); context.EmitLdtmp(); context.EmitLdc_I8(1 << op.Size); context.Emit(OpCodes.Add); if (op is IOpCodeSimd64) { context.EmitLdvec(op.Rt2); } else { context.EmitLdintzr(op.Rt2); } EmitWriteCall(context, op.Size); EmitWBackIfNeeded(context); }
public static void Ldp(ILEmitterCtx context) { OpCodeMemPair64 op = (OpCodeMemPair64)context.CurrOp; void EmitReadAndStore(int rt) { if (op.Extend64) { EmitReadSx64Call(context, op.Size); } else { EmitReadZxCall(context, op.Size); } if (op is IOpCodeSimd64) { context.EmitStvec(rt); } else { context.EmitStintzr(rt); } } context.EmitLdarg(TranslatedSub.MemoryArgIdx); EmitLoadAddress(context); EmitReadAndStore(op.Rt); context.EmitLdarg(TranslatedSub.MemoryArgIdx); context.EmitLdtmp(); context.EmitLdc_I8(1 << op.Size); context.Emit(OpCodes.Add); EmitReadAndStore(op.Rt2); EmitWBackIfNeeded(context); }