Comparison of condition code meanings in integer and floating-point code
The meaning of the condition code mnemonic suffixes depends on whether the condition flags in the APSR were set by a floating-point instruction or by an ARM or Thumb data processing instruction.
This is because:
Floating-point values are never unsigned, so the unsigned conditions are not required.
Not-a-Number (NaN) values have no ordering relationship with numbers or with each other, so additional conditions are required to account for unordered results.
The only VFP instruction that can update the condition flags is VCMP. Other VFP or NEON instructions cannot modify the flags.
The VCMP instruction does not update the flags in the APSR directly, but updates a separate set of flags in the FPSCR. To use these flags to control conditional instructions, including conditional VFP instructions, you must first copy them into the APSR using a VMRS instruction:
VMRS APSR_nzcv, FPSCR
The meaning of the condition code mnemonic suffixes is shown in the following table:
|Suffix||Meaning after ARM or Thumb data processing instruction||Meaning after VFP VCMP instruction|
|NE||Not equal||Not equal, or unordered|
|CS||Carry set||Greater than or equal, or unordered|
|HS||Unsigned higher or same||Greater than or equal, or unordered|
|CC||Carry clear||Less than|
|LO||Unsigned lower||Less than|
|PL||Positive or zero||Greater than or equal, or unordered|
|VS||Overflow||Unordered (at least one NaN operand)|
|VC||No overflow||Not unordered|
|HI||Unsigned higher||Greater than, or unordered|
|LS||Unsigned lower or same||Less than or equal|
|GE||Signed greater than or equal||Greater than or equal|
|LT||Signed less than||Less than, or unordered|
|GT||Signed greater than||Greater than|
|LE||Signed less than or equal||Less than or equal, or unordered|
|AL||Always (normally omitted)||Always (normally omitted)|