### 3.2.4 fplib comparisons between floats and doubles

fplib provides a number of routines to perform comparisons between floating-point numbers.

The following table describes these routines.

Table 3-3 Floating-point comparison routines

Function Argument types Return type Condition tested Notes
`_fcmpeq` 2 `float` Flags, EQ/NE x equal to y a
`_fcmpge` 2 `float` Flags, HS/LO x greater than or equal to y a, b
`_fcmple` 2 `float` Flags, HI/LS x less than or equal to y a, b
`_feq` 2 `float` Boolean x equal to y -
`_fneq` 2 `float` Boolean x not equal to y -
`_fgeq` 2 `float` Boolean x greater than or equal to y b
`_fgr` 2 `float` Boolean x greater than y b
`_fleq` 2 `float` Boolean x less than or equal to y b
`_fls` 2 `float` Boolean x less than y b
`_dcmpeq` 2 `double` Flags, EQ/NE x equal to y a
`_dcmpge` 2 `double` Flags, HS/LO x greater than or equal to y a, b
`_dcmple` 2 `double` Flags, HI/LS x less than or equal to y a, b
`_deq` 2 `double` Boolean x equal to y -
`_dneq` 2 `double` Boolean x not equal to y -
`_dgeq` 2 `double` Boolean x greater than or equal to y b
`_dgr` 2 `double` Boolean x greater than y b
`_dleq` 2 `double` Boolean x less than or equal to y b
`_dls` 2 `double` Boolean x less than y b
`_fcmp4` 2 `float` Flags, VFP x less than or equal to y c
`_fcmp4e` 2 `float` Flags, VFP x less than or equal to y b, c
`_fdcmp4` `float`, `double` Flags, VFP x less than or equal to y c
`_fdcmp4e` `float`, `double` Flags, VFP x less than or equal to y b, c
`_dcmp4` 2 `double` Flags, VFP x less than or equal to y c
`_dcmp4e` 2 `double` Flags, VFP x less than or equal to y b, c
`_dfcmp4` `double`, `float` Flags, VFP x less than or equal to y c
`_dfcmp4e` `double`, `float` Flags, VFP x less than or equal to y b, c

## Notes on floating-point comparison routines

a

Returns results in the ARM condition flags. This is efficient in assembly language, because you can directly follow a call to the function with a conditional instruction, but it means there is no way to use this function from C. This function is not declared in rt_fp.h.

b

Causes an Invalid Operation exception if either argument is a NaN, even a quiet NaN. Other functions only cause Invalid Operation if an argument is an SNaN. QNaNs return not equal when compared to anything, including other QNaNs (so comparing a QNaN to the same QNaN still returns not equal).

c

Returns VFP-type status flags in the `PSR`. Also returns VFP-type status flags in the top four bits of `r0`, meaning that it is possible to use this function from C. This function is declared in rt_fp.h.