ARMv5TE, ARMv6 and later have a Q flag that is set to 1 when saturation has occurred in saturating arithmetic instructions, or when overflow has occurred in certain multiply instructions.
The Q flag is a sticky flag. Although the saturating and certain multiply instructions can set the flag, they cannot clear it. You can execute a series of such instructions, and then test the flag to find out whether saturation or overflow occurred at any point in the series, without having to check the flag after each instruction.
To clear the Q flag, use an
MSR instruction to
read-modify-write the APSR:
MRS r5, APSR BIC r5, r5, #(1<<27) MSR APSR_nzcvq, r5
The state of the Q flag cannot be tested directly by the condition
codes. To read the state of the Q flag, use an
MRS r6, APSR TST r6, #(1<<27); Z is clear if Q flag was set