summaryrefslogtreecommitdiff
path: root/isa/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'isa/src/test')
-rw-r--r--isa/src/test/java/com/seaofnodes/isa/RiscTest.java22
-rw-r--r--isa/src/test/java/com/seaofnodes/isa/X86Test.java4
2 files changed, 26 insertions, 0 deletions
diff --git a/isa/src/test/java/com/seaofnodes/isa/RiscTest.java b/isa/src/test/java/com/seaofnodes/isa/RiscTest.java
index e26eb20b..0cef8531 100644
--- a/isa/src/test/java/com/seaofnodes/isa/RiscTest.java
+++ b/isa/src/test/java/com/seaofnodes/isa/RiscTest.java
@@ -9,6 +9,28 @@ public class RiscTest {
assert expected==actual : String.format("Expected %08x, got %08x",expected,actual);
}
public static void main(String[] args) {
+ word(0x9E780020,Arm64.floatToInteger(1,0)); // FCVTZS x0,d1
+ for( double value : new double[]{0.0,-0.0,6.92,-6.92,0.99,-0.99,
+ 0x1p63,Math.nextDown(0x1p63),-0x1p63,Math.nextDown(-0x1p63),
+ Double.POSITIVE_INFINITY,Double.NEGATIVE_INFINITY,Double.NaN,
+ Double.longBitsToDouble(0xFFF0000000000001L)} ) {
+ var a=new EvalArm64(new byte[1024],512);
+ a.st4(4,0x9E780020);
+ a._pc=4;
+ a.fregs[1]=value;
+ a.step(1);
+ assert a.regs[0]==(long)value : "ARM conversion: "+value;
+
+ var bytes=new X86Test.Bytes();
+ RiscV.floatToInteger(bytes,10,1);
+ var r=new EvalRisc5(new byte[1024],512);
+ System.arraycopy(bytes.toByteArray(),0,r._buf,4,bytes.size());
+ r._pc=4;
+ r.fregs[1]=value;
+ // NaN takes four instructions; a finite value takes five.
+ r.step(Double.isNaN(value) ? 4 : 5);
+ assert r.regs[10]==(long)value : "RISC-V conversion: "+value;
+ }
word(0x8B020020,Arm64.r_reg(Arm64.OP_ADD,0,2,0,1,0)); // add x0,x1,x2
word(0x9100A420,Arm64.imm_inst(Arm64.OPI_ADD,41,1,0));
word(0xD2800540,Arm64.mov(Arm64.OP_MOVZ,0,42,0));
diff --git a/isa/src/test/java/com/seaofnodes/isa/X86Test.java b/isa/src/test/java/com/seaofnodes/isa/X86Test.java
index e3aa2699..8af84ae8 100644
--- a/isa/src/test/java/com/seaofnodes/isa/X86Test.java
+++ b/isa/src/test/java/com/seaofnodes/isa/X86Test.java
@@ -16,6 +16,10 @@ public class X86Test {
assert expected.equals(actual) : "Expected "+expected+", got "+actual;
}
public static void main(String[] args) {
+ check("f2480f2cc04883f801711c660f2ec07a1366480f7ec048c1f83f48f7d0480fbaf83feb034833c0",
+ b -> X86.floatToInteger(b,0,0));
+ check("f24d0f2cca4983f901711d66450f2ed27a13664d0f7ed149c1f93f49f7d1490fbaf93feb034d33c9",
+ b -> X86.floatToInteger(b,9,10));
check("4d03ca", b -> X86.reg(b,0x03,9,10));
check("4d0fafca", b -> X86.reg(b,0x0FAF,9,10));
check("4981c17fffffff", b -> X86.imm(b,0x81,0,9,-129));