fp fixes
authorbrian <brian@brianweb.net>
Tue, 11 May 2004 07:36:48 +0000 (00:36 -0700)
committerbrian <brian@brianweb.net>
Tue, 11 May 2004 07:36:48 +0000 (00:36 -0700)
darcs-hash:20040511073648-24bed-13d00487b9620525389dc2ada99f993ffeafd0ac.gz

src/org/ibex/nestedvm/ClassFileCompiler.java
src/org/ibex/nestedvm/Interpreter.java

index 0092c0f..451ece7 100644 (file)
@@ -1231,10 +1231,10 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const
                     break;
                 case 1: // SUB.X
                     preSetDouble(F+fd,d);
                     break;
                 case 1: // SUB.X
                     preSetDouble(F+fd,d);
-                    pushDouble(F+ft,d);
                     pushDouble(F+fs,d);
                     pushDouble(F+fs,d);
+                    pushDouble(F+ft,d);
                     a(d ? InstructionConstants.DSUB : InstructionConstants.FSUB);
                     a(d ? InstructionConstants.DSUB : InstructionConstants.FSUB);
-                    setDouble(d);                    
+                    setDouble(d);
                     break;
                 case 2: // MUL.X
                     preSetDouble(F+fd,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();
                     
                     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);
                     
                     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);
                     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);
                     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;
                     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;
                     }
                         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));
                     pushConst(0x000000);
                     b2 = a(InstructionFactory.createBranchInstruction(GOTO,null));
                     b1.setTarget(pushConst(0x800000));
index 0c7442e..437869f 100644 (file)
@@ -363,6 +363,9 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                             case 60: // C.LT.S
                                 setFC(getFloat(fs) < getFloat(ft));
                                 break;
                             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;
                             default: throw new ExecutionException("Invalid Instruction 17/" + rs + "/" + subcode + " at " + sourceLine(pc));
                         }
                         break;