[RISC-V] Fix dropping NaN sign and payload when importing float constants (#93285)
authorTomasz Sowiński <tomeksowi@gmail.com>
Wed, 11 Oct 2023 11:43:04 +0000 (13:43 +0200)
committerGleb Balykov <g.balykov@samsung.com>
Fri, 15 Dec 2023 12:28:32 +0000 (15:28 +0300)
commit898095d372e254c3885693c856f6beec258095d4
tree166769da246fc17b94ace6f2cbd56b8b52470a60
parentb3ba557386d7caadf473bf43f173a7b095c05c8c
[RISC-V] Fix dropping NaN sign and payload when importing float constants (#93285)

RISC-V float-to-double conversion canonicalizes the constant NaN value. Use soft conversion to double.

Since gtNewDconNode is used in quite a few places, the offending conversion is silent (float to double), and most programmers are unaware of NaN propagation issues on uncommon platforms like RISC-V, introduce factory functions dedicated to float and double that do the necessary conversions and make unintended upcasts more difficult.

Also fix printing NaN constants in dumps.
src/coreclr/jit/assertionprop.cpp
src/coreclr/jit/compiler.h
src/coreclr/jit/emit.cpp
src/coreclr/jit/gentree.cpp
src/coreclr/jit/importer.cpp
src/coreclr/jit/importercalls.cpp
src/coreclr/jit/lowerxarch.cpp
src/coreclr/jit/utils.cpp