make Runtime._syscall() protected so it can be overridden from outside the package
[nestedvm.git] / src / org / ibex / nestedvm / Interpreter.java
index b6b3424..2e8252f 100644 (file)
@@ -1,5 +1,5 @@
 // Copyright 2000-2005 the Contributors, as shown in the revision logs.
-// Licensed under the Apache Public Source License 2.0 ("the License").
+// Licensed under the Apache License 2.0 ("the License").
 // You may not use this file except in compliance with the License.
 
 // Copyright 2003 Brian Alliet
@@ -470,9 +470,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: tmp = (tmp>>>16)&0xffff; break;
                     case 2: tmp = (tmp>>> 0)&0xffff; break;
+                    default: throw new ReadFaultException(addr);
                 }
                 if((tmp&0x8000)!=0) tmp |= 0xffff0000; // sign extend
                 r[rt] = tmp;
@@ -523,9 +524,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: r[rt] = (tmp>>>16)&0xffff; break;
                     case 2: r[rt] = (tmp>>> 0)&0xffff; break;
+                    default: throw new ReadFaultException(addr);
                 }
                 break;
             }
@@ -571,9 +573,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: tmp = (tmp&0x0000ffff) | ((r[rt]&0xffff)<<16); break;
                     case 2: tmp = (tmp&0xffff0000) | ((r[rt]&0xffff)<< 0); break;
+                    default: throw new WriteFaultException(addr);
                 }
                 try {
                     writePages[addr>>>pageShift][(addr>>>2)&(PAGE_WORDS-1)] = tmp;