From 86ce5bc5d5018dcb62054d214b23f7a59b9c0d7d Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 28 Oct 2026 13:39:05 -0700 Subject: Fix bugs x86 storing only 32bits of a large constant Missed field narrowing in a few cases --- .../test-support/java/com/seaofnodes/isa/eval/EvalRisc5.java | 2 +- isa/src/test/java/com/seaofnodes/isa/RiscTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'isa/src') 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 e6860ccd..6c3659ef 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 @@ -176,7 +176,7 @@ public class EvalRisc5 { case 3: rval = ld8 ( rsval ); break; case 4: rval = ld1z( rsval ); break; case 5: rval = ld2z( rsval ); break; - case 6: rval = ld4s( rsval ); break; + case 6: rval = ld4s( rsval ) & 0xFFFFFFFFL; break; default: trap = (2+1); } } diff --git a/isa/src/test/java/com/seaofnodes/isa/RiscTest.java b/isa/src/test/java/com/seaofnodes/isa/RiscTest.java index 5b354036..4f49cdd2 100644 --- a/isa/src/test/java/com/seaofnodes/isa/RiscTest.java +++ b/isa/src/test/java/com/seaofnodes/isa/RiscTest.java @@ -44,6 +44,16 @@ public class RiscTest { assert unsigned.step(1)==0; assert unsigned.regs[3]==(value==0 ? 1 : 0); } + for( int value : new int[]{0,1,Integer.MAX_VALUE,Integer.MIN_VALUE,-1} ) { + var loads = new EvalRisc5(new byte[1024],512); + loads.st4(4,0x00012183); // lw x3,0(x2) + loads.st4(8,0x00016203); // lwu x4,0(x2) + loads.st4(512,value); + loads._pc = 4; + assert loads.step(2)==0; + assert loads.regs[3]==value; + assert loads.regs[4]==(value & 0xFFFFFFFFL); + } var logical=new EvalArm64(new byte[1024],512); logical.st4(4,0xB27F0020); // orr x0,x1,#2 logical.st4(8,0x9A9F17E2); // cset x2,eq; false must not retain prior result -- cgit v1.2.3