X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FClassFileCompiler.java;h=f0b9153f7e0ee2edda35a0fe7338024cd7a990f7;hp=0092c0fae70b0bebb35c6aa559d33e4aa007006b;hb=abe7c48fc6762412703430702e60db9cd834b55a;hpb=53fc7f5243b96e2e1b3bfae99168bc38b71765ea diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 0092c0f..f0b9153 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -265,8 +265,9 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const a(fac.createCheckCast(new ObjectType("java.lang.Integer"))); a(fac.createInvoke("java.lang.Integer","intValue",Type.INT,Type.NO_ARGS,INVOKEVIRTUAL)); a(InstructionConstants.IRETURN); - bh.setTarget(a(InstructionConstants.ICONST_M1)); - a(InstructionConstants.IRETURN); + bh.setTarget(a(InstructionConstants.POP)); + a(InstructionConstants.ICONST_M1); + a(InstructionConstants.IRETURN); lookupSymbol.setMaxLocals(); lookupSymbol.setMaxStack(); cl.addMethod(lookupSymbol.getMethod()); @@ -1231,10 +1232,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 +1278,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 +1359,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));