private static void EmitSse42Crc32(AILEmitterCtx Context, Type TCrc, Type TData) { AOpCodeAluRs Op = (AOpCodeAluRs)Context.CurrOp; Context.EmitLdintzr(Op.Rn); Context.EmitLdintzr(Op.Rm); Context.EmitCall(typeof(Sse42).GetMethod(nameof(Sse42.Crc32), new Type[] { TCrc, TData })); Context.EmitStintzr(Op.Rd); }
private static void EmitCrc32(AILEmitterCtx Context, string Name) { AOpCodeAluRs Op = (AOpCodeAluRs)Context.CurrOp; Context.EmitLdintzr(Op.Rn); if (Op.RegisterSize != ARegisterSize.Int32) { Context.Emit(OpCodes.Conv_U4); } Context.EmitLdintzr(Op.Rm); ASoftFallback.EmitCall(Context, Name); if (Op.RegisterSize != ARegisterSize.Int32) { Context.Emit(OpCodes.Conv_U8); } Context.EmitStintzr(Op.Rd); }
public static void Extr(AILEmitterCtx Context) { //TODO: Ensure that the Shift is valid for the Is64Bits. AOpCodeAluRs Op = (AOpCodeAluRs)Context.CurrOp; Context.EmitLdintzr(Op.Rm); if (Op.Shift > 0) { Context.EmitLdc_I4(Op.Shift); Context.Emit(OpCodes.Shr_Un); Context.EmitLdintzr(Op.Rn); Context.EmitLdc_I4(Op.GetBitsCount() - Op.Shift); Context.Emit(OpCodes.Shl); Context.Emit(OpCodes.Or); } EmitDataStore(Context); }