Update:
[repair.git] / Repair / RepairCompiler / MCC / IR / Opcode.java
index 79a1666a7346d073b0ce152287307c10bedd49e1..a1dfac7217f8e0d81e5847ecdf74a78209ed1b0e 100755 (executable)
@@ -23,5 +23,64 @@ public class Opcode {
     public static final Opcode AND = new Opcode("&&");
     public static final Opcode OR = new Opcode("||");
     public static final Opcode NOT = new Opcode("!");
+    public static final Opcode RND = new Opcode("RND");
+    public static final Opcode NOP = new Opcode("NOP");
+    public static final Opcode SHL = new Opcode("<<");
+    public static final Opcode SHR = new Opcode(">>");
+    
+    static public Opcode translateOpcode(boolean neg, Opcode op) {
+       if (neg) {
+        /* remove negation through opcode translation */
+            if (op==Opcode.GT)
+                op=Opcode.LE;
+            else if (op==Opcode.GE)
+                op=Opcode.LT;
+            else if (op==Opcode.EQ)
+                op=Opcode.NE;
+            else if (op==Opcode.NE)
+                op=Opcode.EQ;
+            else if (op==Opcode.LT)
+                op=Opcode.GE;
+            else if (op==Opcode.LE)
+                op=Opcode.GT;
+           else throw new Error("Unrecognized Opcode");
+        }
+
+       return op;
+    }
+
+    public static Opcode decodeFromString(String opname) {
+        Opcode opcode;
+
+        if (opname.equals("add")) {
+            return Opcode.ADD;
+        } else if (opname.equals("sub")) {
+            return Opcode.SUB;
+        } else if (opname.equals("mult")) {
+            return Opcode.MULT;
+        } else if (opname.equals("div")) {
+            return Opcode.DIV;
+        } else if (opname.equals("and")) {
+            return Opcode.AND;
+        } else if (opname.equals("or")) {
+            return Opcode.OR;
+        } else if (opname.equals("not")) {
+            return Opcode.NOT;
+        } else if (opname.equals("gt")) {
+            return Opcode.GT;
+        } else if (opname.equals("ge")) {
+            return Opcode.GE;
+        } else if (opname.equals("lt")) {
+            return Opcode.LT;
+        } else if (opname.equals("le")) {
+            return Opcode.LE;
+        } else if (opname.equals("eq")) {
+            return Opcode.EQ;
+        } else if (opname.equals("ne")) {
+            return Opcode.NE;
+        } else {
+            return null;
+        }
+    }
 
 }