From aaec6f8136df6f7020bfc05f79ff5273adf73de1 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 7 Oct 2026 12:57:31 -0700 Subject: flt->int conversion --- .../java/com/seaofnodes/isa/eval/EvalArm64.java | 9 ++++++--- .../java/com/seaofnodes/isa/eval/EvalRisc5.java | 20 +++++++++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'isa/src/test-support/java/com') diff --git a/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalArm64.java b/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalArm64.java index 2a4a2708..2fa4aec1 100644 --- a/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalArm64.java +++ b/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalArm64.java @@ -404,10 +404,13 @@ public class EvalArm64 { break; } case 0x9E: { - // scvtf - is_f = true; int rs1 = (ir >> 5) & 0x1F; - frval = (double)regs[rs1]; + if( (ir & 0xFFFFFC00)==0x9E780000 ) { // FCVTZS Xd,Dn + rval = (long)fregs[rs1]; + } else { // SCVTF + is_f = true; + frval = (double)regs[rs1]; + } break; } diff --git a/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalRisc5.java b/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalRisc5.java index f618075d..46baf447 100644 --- a/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalRisc5.java +++ b/isa/src/test-support/java/com/seaofnodes/isa/eval/EvalRisc5.java @@ -334,7 +334,25 @@ public class EvalRisc5 { default -> throw new UnsupportedOperationException(); }; break; - case 26: frval = (double)regs[rs1]; break; // fcvt.w.d + case 24: // FCVT.L.D, RTZ + if( rs2!=2 || ((ir>>12)&7)!=1 ) throw new UnsupportedOperationException(); + is_f = false; + rval = Double.isNaN(lhs) ? Long.MAX_VALUE : (long)lhs; + break; + case 26: frval = (double)regs[rs1]; break; // fcvt.d.l + case 28: { // FCLASS.D + if( rs2!=0 || ((ir>>12)&7)!=1 ) throw new UnsupportedOperationException(); + is_f = false; + long bits = Double.doubleToRawLongBits(lhs); + boolean neg = bits<0; + int kind = Double.isNaN(lhs) ? ((bits&(1L<<51))==0 ? 8 : 9) + : Double.isInfinite(lhs) ? (neg ? 0 : 7) + : lhs==0 ? (neg ? 3 : 4) + : Math.abs(lhs)