Quantifiers use relations!!!
[repair.git] / Repair / RepairCompiler / MCC / IR / Opcode.java
1 package MCC.IR;
2
3 public class Opcode {
4
5     private final String name;
6     private Opcode(String name) { this.name = name; }
7     
8     public String toString() { return name; }       
9
10     public static final Opcode ADD = new Opcode("+");
11     public static final Opcode SUB = new Opcode("-");
12     public static final Opcode MULT = new Opcode("*");
13     public static final Opcode DIV = new Opcode("/");
14
15     public static final Opcode GT = new Opcode(">");
16     public static final Opcode GE = new Opcode(">=");
17     public static final Opcode LT = new Opcode("<");
18     public static final Opcode LE = new Opcode("<=");
19
20     public static final Opcode EQ = new Opcode("==");
21     public static final Opcode NE = new Opcode("!=");
22
23     public static final Opcode AND = new Opcode("&&");
24     public static final Opcode OR = new Opcode("||");
25     public static final Opcode NOT = new Opcode("!");
26     public static final Opcode RND = new Opcode("RND");
27     public static final Opcode NOP = new Opcode("NOP");
28     public static final Opcode SHL = new Opcode("<<");
29     public static final Opcode SHR = new Opcode(">>");
30     
31     static public Opcode translateOpcode(boolean neg, Opcode op) {
32         if (neg) {
33         /* remove negation through opcode translation */
34             if (op==Opcode.GT)
35                 op=Opcode.LE;
36             else if (op==Opcode.GE)
37                 op=Opcode.LT;
38             else if (op==Opcode.EQ)
39                 op=Opcode.NE;
40             else if (op==Opcode.NE)
41                 op=Opcode.EQ;
42             else if (op==Opcode.LT)
43                 op=Opcode.GE;
44             else if (op==Opcode.LE)
45                 op=Opcode.GT;
46             else throw new Error("Unrecognized Opcode");
47         }
48
49         return op;
50     }
51
52     public static Opcode decodeFromString(String opname) {
53         Opcode opcode;
54
55         if (opname.equals("add")) {
56             return Opcode.ADD;
57         } else if (opname.equals("sub")) {
58             return Opcode.SUB;
59         } else if (opname.equals("mult")) {
60             return Opcode.MULT;
61         } else if (opname.equals("div")) {
62             return Opcode.DIV;
63         } else if (opname.equals("and")) {
64             return Opcode.AND;
65         } else if (opname.equals("or")) {
66             return Opcode.OR;
67         } else if (opname.equals("not")) {
68             return Opcode.NOT;
69         } else if (opname.equals("gt")) {
70             return Opcode.GT;
71         } else if (opname.equals("ge")) {
72             return Opcode.GE;
73         } else if (opname.equals("lt")) {
74             return Opcode.LT;
75         } else if (opname.equals("le")) {
76             return Opcode.LE;
77         } else if (opname.equals("eq")) {
78             return Opcode.EQ;
79         } else if (opname.equals("ne")) {
80             return Opcode.NE;
81         } else {
82             return null;
83         }
84     }
85
86 }