public static void Clz(ArmEmitterContext context) { Operand m = GetAluM(context, setCarry: false); Operand res = context.CountLeadingZeros(m); EmitAluStore(context, res); }
public static void Clz(ArmEmitterContext context) { OpCodeAlu op = (OpCodeAlu)context.CurrOp; Operand n = GetIntOrZR(context, op.Rn); Operand d = context.CountLeadingZeros(n); SetAluDOrZR(context, d); }
public static void Cls(ArmEmitterContext context) { OpCodeAlu op = (OpCodeAlu)context.CurrOp; Operand n = GetIntOrZR(context, op.Rn); Operand nHigh = context.ShiftRightUI(n, Const(1)); bool is32Bits = op.RegisterSize == RegisterSize.Int32; Operand mask = is32Bits ? Const(int.MaxValue) : Const(long.MaxValue); Operand nLow = context.BitwiseAnd(n, mask); Operand res = context.CountLeadingZeros(context.BitwiseExclusiveOr(nHigh, nLow)); res = context.Subtract(res, Const(res.Type, 1)); SetAluDOrZR(context, res); }