While porting TF-M to the IAR toolchain I ran into an issue where the NaN/INF tests does not follow the Run-time ABI for the Arm® Architecture, https://developer.arm.com/docs/ihi0043/e/run-time-abi-for-the-arm-architecture-abi-2018q4-documentation.
From the document:
If NaNs are supported, it is only required to recognize, process, and convert those values with at least one bit set in the 20 most significant bits of the mantissa. Remaining bits should be zero and can be ignored. When a quiet NaN of one precision is converted to a quiet of the other precision, the most significant 20 bits of the mantissa must be preserved. Consequently:
A NaN can be recognized by processing the most significant or only word of the representation. The least significant word of a double can be ignored (it should be zero). Each ABI-complying value has a single-precision representation, and a corresponding double-precision representation in which the least significant word is zero. Each ABI-complying NaN value is converted between single- and double-precision in the same way that Arm VFP VCVT instructions convert the values.
The IAR toolchain only checks the upper 32 bits for NaN / INF and the double precision NaN tests misinterprets some of the hand crafted NaN:s as INF. This causes the NaN tests to fail when tf-m is built with the IAR toolchain.