ANDS (immediate) Bitwise AND (immediate), setting flags This instruction performs a bitwise AND of a register value and an immediate value, and writes the result to the destination register. It updates the condition flags based on the result. If PSTATE.DIT is 1: The execution time of this instruction is independent of: The values of the data supplied in any of its registers. The values of the NZCV flags. The response of this instruction to asynchronous exceptions does not vary based on: The values of the data supplied in any of its registers. The values of the NZCV flags. This instruction is used by the alias TST (immediate) Rd == '11111' See below for details of when the alias is preferred. 1 1 1 0 0 1 0 0 0 0 ANDS <Wd>, <Wn>, #<imm> 1 ANDS <Xd>, <Xn>, #<imm> if sf == '0' && N != '0' then UNDEFINED; constant integer d = UInt(Rd); constant integer n = UInt(Rn); constant integer datasize = 32 << UInt(sf); bits(datasize) imm; (imm, -) = DecodeBitMasks(N, imms, immr, TRUE, datasize); <Wd> Is the 32-bit name of the general-purpose destination register, encoded in the "Rd" field. <Wn> Is the 32-bit name of the general-purpose source register, encoded in the "Rn" field. <imm> For the 32-bit variant: is the bitmask immediate, encoded in "imms:immr". <imm> For the 64-bit variant: is the bitmask immediate, encoded in "N:imms:immr". <Xd> Is the 64-bit name of the general-purpose destination register, encoded in the "Rd" field. <Xn> Is the 64-bit name of the general-purpose source register, encoded in the "Rn" field. Alias Conditions constant bits(datasize) operand1 = X[n, datasize]; constant bits(datasize) operand2 = imm; constant bits(datasize) result = operand1 AND operand2; X[d, datasize] = result; PSTATE.<N,Z,C,V> = result<datasize-1>:IsZeroBit(result):'00';