public static void Umulh(ILEmitterCtx context) { OpCodeMul64 op = (OpCodeMul64)context.CurrOp; context.EmitLdintzr(op.Rn); context.EmitLdintzr(op.Rm); SoftFallback.EmitCall(context, nameof(SoftFallback.UMulHi128)); context.EmitStintzr(op.Rd); }
private static void EmitMul(ILEmitterCtx context, OpCode ilOp) { OpCodeMul64 op = (OpCodeMul64)context.CurrOp; context.EmitLdintzr(op.Ra); context.EmitLdintzr(op.Rn); context.EmitLdintzr(op.Rm); context.Emit(OpCodes.Mul); context.Emit(ilOp); context.EmitStintzr(op.Rd); }
private static void EmitMull(ILEmitterCtx context, OpCode addSubOp, bool signed) { OpCodeMul64 op = (OpCodeMul64)context.CurrOp; OpCode castOp = signed ? OpCodes.Conv_I8 : OpCodes.Conv_U8; context.EmitLdintzr(op.Ra); context.EmitLdintzr(op.Rn); context.Emit(OpCodes.Conv_I4); context.Emit(castOp); context.EmitLdintzr(op.Rm); context.Emit(OpCodes.Conv_I4); context.Emit(castOp); context.Emit(OpCodes.Mul); context.Emit(addSubOp); context.EmitStintzr(op.Rd); }