X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FJavaSourceCompiler.java;h=499b2187b2b4f3ea776f64118a1959dd195460a3;hp=b581d22f45b81ec24f2b0375cc929086071e724f;hb=ab9be117467f7459965c61e49749b333678b6e4c;hpb=034a42fa65955289442614ef9914e5474fac62aa diff --git a/src/org/ibex/nestedvm/JavaSourceCompiler.java b/src/org/ibex/nestedvm/JavaSourceCompiler.java index b581d22..499b218 100644 --- a/src/org/ibex/nestedvm/JavaSourceCompiler.java +++ b/src/org/ibex/nestedvm/JavaSourceCompiler.java @@ -217,7 +217,7 @@ public class JavaSourceCompiler extends Compiler { private void endMethod() { endMethod(endOfMethod); } private void endMethod(int lastAddr) { if(startOfMethod == 0) return; - // FEATURE: We should be able to use if(!unreachable) here (i think) + // We should be able to use if(!unreachable) here (i think) // This isn't strictly necessary; its just here to work around unreachable code errors p("case " + toHex(lastAddr) + ":"); indent++; @@ -412,7 +412,7 @@ public class JavaSourceCompiler extends Compiler { break; case 12: // SYSCALL p("pc = " + toHex(pc) + ";"); - p( "r"+V0+" = syscall(r"+V0+",r"+A0+",r"+A1+",r"+A2+",r"+A3+");"); + p( "r"+V0+" = syscall(r"+V0+",r"+A0+",r"+A1+",r"+A2+",r"+A3+",r"+T0+",r"+T1+");"); p("if (state != RUNNING) {"); indent++; p("pc = " + toHex(pc+4) + ";"); @@ -549,17 +549,8 @@ public class JavaSourceCompiler extends Compiler { if(pc == -1) throw new Error("pc modifying insn in delay slot"); int target = (pc&0xf0000000)|(jumpTarget << 2); emitInstruction(-1,nextInsn,-1); - if(optimizedMemcpy && (target == memcpy || target == memset)) { - if(target == memcpy) - p("memcpy(r4,r5,r6);"); - else if(target == memset) - p("memset(r4,r5,r6);"); - p("r2 = r4;"); - branch(pc,pc+8); - } else { - p("r" + RA + "=" + constant(pc+8 /*skip this insn and delay slot*/) + ";"); - branch(pc, target); - } + p("r" + RA + "=" + constant(pc+8 /*skip this insn and delay slot*/) + ";"); + branch(pc, target); unreachable = true; break; } @@ -609,7 +600,7 @@ public class JavaSourceCompiler extends Compiler { p( "r"+rt+" = r"+rs+" < "+signedImmediate+" ? 1 : 0;"); break; case 11: // SLTIU - p( "r"+rt+" = (r"+rs+"&0xffffffffL) < ("+unsignedImmediate+"&0xffffffffL) ? 1 : 0;"); + p( "r"+rt+" = (r"+rs+"&0xffffffffL) < ("+signedImmediate+"&0xffffffffL) ? 1 : 0;"); break; case 12: // ANDI p( "r"+rt+" = r"+rs+" & "+unsignedImmediate+";"); @@ -878,14 +869,14 @@ public class JavaSourceCompiler extends Compiler { memWrite("addr","tmp"); break; } - // FEATURE: Need to be atomic if threads + // Need to be atomic if threads case 48: // LWC0/LL memRead("r"+rs+"+"+signedImmediate,"r"+rt); break; case 49: // LWC1 memRead("r"+rs+"+"+signedImmediate,"f"+rt); break; - // FEATURE: Needs to be atomic if threads + // Needs to be atomic if threads case 56: // SWC1/SC memWrite("r"+rs+"+"+signedImmediate,"r"+rt); p("r" + rt + "=1;");