public static void Vneg_V(ArmEmitterContext context) { OpCode32SimdCmpZ op = (OpCode32SimdCmpZ)context.CurrOp; if (op.F) { if (Optimizations.FastFP && Optimizations.UseSse2) { EmitVectorUnaryOpSimd32(context, (m) => { if ((op.Size & 1) == 0) { Operand mask = X86GetAllElements(context, -0f); return(context.AddIntrinsic(Intrinsic.X86Xorps, mask, m)); } else { Operand mask = X86GetAllElements(context, -0d); return(context.AddIntrinsic(Intrinsic.X86Xorpd, mask, m)); } }); } else { EmitVectorUnaryOpF32(context, (op1) => context.Negate(op1)); } } else { EmitVectorUnaryOpSx32(context, (op1) => context.Negate(op1)); } }
public static void Vabs_V(ArmEmitterContext context) { OpCode32SimdCmpZ op = (OpCode32SimdCmpZ)context.CurrOp; if (op.F) { if (Optimizations.FastFP && Optimizations.UseSse2) { EmitVectorUnaryOpSimd32(context, (m) => { return(EmitFloatAbs(context, m, (op.Size & 1) == 0, true)); }); } else { EmitVectorUnaryOpF32(context, (op1) => EmitUnaryMathCall(context, nameof(Math.Abs), op1)); } } else { EmitVectorUnaryOpSx32(context, (op1) => EmitAbs(context, op1)); } }