Opcode | Encoding | 16-bit | 32-bit | 64-bit | CPUID Feature Flag(s) | Description |
---|---|---|---|---|---|---|
VEX.L0.NP.0F38.W0 F3 /1 BLSR r32, r/m32 | vm | Invalid | Valid | Valid | bmi1 | Move from r/m32 into r32 while clearing the lowest set bit. |
VEX.L0.NP.0F38.W1 F3 /1 BLSR r64, r/m64 | vm | Invalid | Invalid | Valid | bmi1 | Move from r/m64 into r64 while clearing the lowest set bit. |
Encoding
Encoding | Operand 1 | Operand 2 |
---|---|---|
vm | VEX.vvvv[w] | ModRM.r/m[r] |
Description
The BLSR
instruction copies from the source operand into the destination operand while, at the same time, clearing (resetting) the lowest set bit.
The operand size is always 32 bits if not in Long Mode. In other words, VEX.W1
is treated as VEX.W0
outside Long Mode.
Operation
public void BLSR(ref U32 dest, U32 src)
{
dest = src & (src - 1);
}
public void BLSR(ref U64 dest, U64 src)
{
dest = src & (src - 1);
}
Flags Affected
CF
(carry flag)- Set if the source is not zero. Cleared otherwise.
PF
(parity flag)- Undefined.
AF
(auxiliary flag)- Undefined.
ZF
(zero flag)- Set according to the result.
SF
(sign flag)- Set according to the result.
OF
(overflow flag)- Cleared.
Intrinsics
uint32_t _blsr_u32(uint32_t src)
uint64_t _blsr_u64(uint64_t src)
Exceptions
SIMD Floating-Point
None.Other Exceptions
VEX Encoded Form: See Type 13 Exception Conditions.