From ba5f49b65c5b2586de9b03a14a7842da143f3031 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 11 May 2004 00:36:48 -0700 Subject: [PATCH] fp fixes darcs-hash:20040511073648-24bed-13d00487b9620525389dc2ada99f993ffeafd0ac.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 20 +++++++++++--------- src/org/ibex/nestedvm/Interpreter.java | 3 +++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 0092c0f..451ece7 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -1231,10 +1231,10 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const break; case 1: // SUB.X preSetDouble(F+fd,d); - pushDouble(F+ft,d); pushDouble(F+fs,d); + pushDouble(F+ft,d); a(d ? InstructionConstants.DSUB : InstructionConstants.FSUB); - setDouble(d); + setDouble(d); break; case 2: // MUL.X preSetDouble(F+fd,d); @@ -1277,26 +1277,28 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const pushReg(F+fs); setReg(); - preSetReg(F+fd+1); - pushReg(F+fs+1); - setReg(); + if(d) { + preSetReg(F+fd+1); + pushReg(F+fs+1); + setReg(); + } break; case 7: // NEG.X preSetDouble(F+fd,d); pushDouble(F+fs,d); a(d ? InstructionConstants.DNEG : InstructionConstants.FNEG); - setDouble(d); + setDouble(d); break; case 32: // CVT.S.X preSetFloat(F+fd); - pushDouble(F+fd,d); + pushDouble(F+fs,d); if(d) a(InstructionConstants.D2F); setFloat(); break; case 33: // CVT.D.X preSetDouble(F+fd); - pushDouble(F+fd,d); + pushDouble(F+fs,d); if(!d) a(InstructionConstants.F2D); setDouble(); break; @@ -1356,7 +1358,7 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const case 62: b1 = a(InstructionFactory.createBranchInstruction(IFLE,null)); break; default: b1 = null; } - + // FIXME: We probably don't need to pushConst(0x00000) pushConst(0x000000); b2 = a(InstructionFactory.createBranchInstruction(GOTO,null)); b1.setTarget(pushConst(0x800000)); diff --git a/src/org/ibex/nestedvm/Interpreter.java b/src/org/ibex/nestedvm/Interpreter.java index 0c7442e..437869f 100644 --- a/src/org/ibex/nestedvm/Interpreter.java +++ b/src/org/ibex/nestedvm/Interpreter.java @@ -363,6 +363,9 @@ public class Interpreter extends UnixRuntime implements Cloneable { case 60: // C.LT.S setFC(getFloat(fs) < getFloat(ft)); break; + case 62: // C.LE.S + setFC(getFloat(fs) <= getFloat(ft)); + break; default: throw new ExecutionException("Invalid Instruction 17/" + rs + "/" + subcode + " at " + sourceLine(pc)); } break; -- 1.7.10.4