package synthesijer.ast; import synthesijer.hdl.HDLOp; public enum Op{ ASSIGN("=", HDLOp.UNDEFINED), PLUS("+", HDLOp.ADD), MINUS("-", HDLOp.SUB), MMMINUS("---", HDLOp.SUB), // SIGN_MINUS("---", HDLOp.SUB), // SIGN_MINUS("---", HDLOp.SIGNFLAP), MUL("*", HDLOp.MUL), DIV("/", HDLOp.UNDEFINED), MOD("%", HDLOp.UNDEFINED), COMPEQ("==", HDLOp.EQ), NEQ("!=", HDLOp.NEQ), GT(">", HDLOp.GT), GEQ(">=", HDLOp.GEQ), LT("<", HDLOp.LT), LEQ("<=", HDLOp.LEQ), LSHIFT("<<", HDLOp.LSHIFT32), LOGIC_RSHIFT(">>>", HDLOp.LOGIC_RSHIFT32), ARITH_RSHIFT(">>", HDLOp.ARITH_RSHIFT32), AND("&", HDLOp.AND), NOT("~", HDLOp.NOT), LAND("&&", HDLOp.AND), LOR("||", HDLOp.OR), OR("|", HDLOp.OR), XOR("^", HDLOp.XOR), LNOT("!", HDLOp.NOT), INC("++", HDLOp.ADD), DEC("--", HDLOp.SUB), RETURN("return", HDLOp.UNDEFINED), MULTI_RETURN("multi_return", HDLOp.UNDEFINED), CALL("call", HDLOp.UNDEFINED), JC("jc", HDLOp.UNDEFINED), JEQ("jeq", HDLOp.UNDEFINED), J("j", HDLOp.UNDEFINED), SELECT("select", HDLOp.UNDEFINED), UNDEFINED("UNDEFINED", HDLOp.UNDEFINED); private final String name; private final HDLOp hdlOp; Op(String name, HDLOp hdlOp){ this.name = name; this.hdlOp = hdlOp; } public HDLOp getHDLOp(){ return hdlOp; } public static Op getOp(String opName){ if(ASSIGN.name.equals(opName)) return Op.ASSIGN; else if(PLUS.name.equals(opName)) return Op.PLUS; else if(MINUS.name.equals(opName)) return Op.MINUS; else if(MMMINUS.name.equals(opName)) return Op.MINUS; else if(MUL.name.equals(opName)) return Op.MUL; else if(DIV.name.equals(opName)) return Op.DIV; else if(MOD.name.equals(opName)) return Op.MOD; else if(COMPEQ.name.equals(opName)) return Op.COMPEQ; else if(NEQ.name.equals(opName)) return Op.NEQ; else if(GT.name.equals(opName)) return Op.GT; else if(GEQ.name.equals(opName)) return Op.GEQ; else if(LT.name.equals(opName)) return Op.LT; else if(LEQ.name.equals(opName)) return Op.LEQ; else if(LSHIFT.name.equals(opName)) return Op.LSHIFT; else if(LOGIC_RSHIFT.name.equals(opName)) return Op.LOGIC_RSHIFT; else if(ARITH_RSHIFT.name.equals(opName)) return Op.ARITH_RSHIFT; else if(AND.name.equals(opName)) return Op.AND; else if(NOT.name.equals(opName)) return Op.NOT; else if(LAND.name.equals(opName)) return Op.LAND; else if(LOR.name.equals(opName)) return Op.LOR; else if(OR.name.equals(opName)) return Op.OR; else if(XOR.name.equals(opName)) return Op.XOR; else if(LNOT.name.equals(opName)) return Op.LNOT; else if(INC.name.equals(opName)) return Op.INC; else if(DEC.name.equals(opName)) return Op.DEC; else return Op.UNDEFINED; } }