Skip to content

fix(riscv): allow vfncvt FP-to-int narrowing at SEW=8 - #212

Closed
carlosqwqqwq wants to merge 2 commits into
HexRaysSA:masterfrom
carlosqwqqwq:fix-riscv-vfncvt-sew8-toint
Closed

fix(riscv): allow vfncvt FP-to-int narrowing at SEW=8#212
carlosqwqqwq wants to merge 2 commits into
HexRaysSA:masterfrom
carlosqwqqwq:fix-riscv-vfncvt-sew8-toint

Conversation

@carlosqwqqwq

Copy link
Copy Markdown
Contributor

fix(riscv): allow vfncvt FP-to-int narrowing at SEW=8

Closes #211

Summary

The FP-to-integer vfncvt variants (vfncvt.xu.f.w/vfncvt.x.f.w/vfncvt.rtz.xu.f.w/vfncvt.rtz.x.f.w) convert a 2*SEW FP value to an SEW integer and are legal for every SEW: at SEW=8 a 16-bit FP source converts to an 8-bit integer. The previous SEW restriction (introduced by the #135 fix) rejected SEW=8 for all variants, which over-rejects the legal FP-to-int encodings. The int-to-FP and FP-to-FP variants still produce an SEW FP value and stay reserved at SEW=8.

Validation

  • ftoi gains the 8-bit saturating paths (NaN -> i8/u8 max, out-of-range saturation, RNE rounding) used by the newly legal encodings.
  • Regression verifies values against QEMU/native references: 1.5 -> 2, -1.5 -> -2, NaN -> 255 (u8), and that the int-to-FP variant at SEW=8 stays reserved.
  • cargo test --lib: 8213 passed, 0 failed.

Notes

The vector semantics live in cpu/vector.rs after the refactor in #202, so this change does not grow the oversized cpu.rs.

cpu.rs exceeded the AGENTS.md hard split triggers (2000 lines / 150 kB). Move the vector (RVV) element access and data-path execution group, including set_vtype, into cpu/vector.rs with no behavior change.
The FP-to-integer vfncvt variants convert a 16-bit FP source to an 8-bit integer, which is legal at SEW=8; the int-to-FP and FP-to-FP variants stay reserved there. ftoi gains the 8-bit saturating paths used by the new legal encodings.
@19h

19h commented Aug 11, 2026

Copy link
Copy Markdown
Member

Thanks @carlosqwqqwq. The legal SEW=8 FP-to-integer narrowing fix is now consolidated into #203 in commit d1de115, with you credited as co-author. The rollup keeps FP8-producing variants reserved and adds exact rounding, saturation, NaN/infinity, NV/NX, SMIR interpreter, O0/O2 JIT, and live QEMU coverage. Closing this PR in favor of #203.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

vfncvt FP-to-int narrowing is wrongly rejected at SEW=8

2 participants