On 9/29/2026 1:09 PM, Marco Liebel wrote:
On 26.09.2026 14:23, Brian Cain wrote:
Signed-off-by: Brian Cain <[email protected]>
---
target/hexagon/mmvec/hvx_ieee_fp.h | 2 +
target/hexagon/mmvec/macros.h | 2 +
target/hexagon/mmvec/hvx_ieee_fp.c | 15 ++++
target/hexagon/tag_rev_info.c.inc | 13 ++++
target/hexagon/imported/mmvec/encode_ext.def | 10 +++
target/hexagon/imported/mmvec/ext.idef | 74 ++++++++++++++++++++
6 files changed, 116 insertions(+)
+ITERATOR_INSN_SHIFT_SLOT_FLT(16, vconv_h_hf_rnd,"Vd32.h=Vu32.hf:rnd",
+ "Vector conversion of hf16 format to int hw, round to nearest
even",
+ VdV.h[i] = float16_to_int16_scalbn(VuV.hf[i],
float_round_nearest_even, 0,
+ &env->hvx_fp_status))
+
I think there are two issues with vconv_h_hf_rnd. Because it's using
float16_to_int16_scalbn:
- It hard-codes nearest-even instead of using USR.FPRND.
This matches the defined semantics for rounding.
https://docs.qualcomm.com/doc/80-N2040-61/topic/hvx-floating-point.html#rounding-modes
"HVX floating point only supports IEEE-754 round-to-even mode."
- It uses generic conversion, which returns INT16_MAX for negative
NaNs. Hexagon requires INT16_MIN.
I will fix this.