package synthesijer.hdl;
public enum HDLOp {
ADD(KIND.INFIX, 2, "+"),
SUB(KIND.INFIX, 2, "-"),
MUL(KIND.INFIX, 2, "*"),
AND(KIND.INFIX, 2, "and", "&"),
OR(KIND.INFIX, 2, "or", "|"),
XOR(KIND.INFIX, 2, "xor", "^"),
NOT(KIND.OTHER, 1, "not", "~"),
EQ(KIND.COMP, 2, "=", "=="),
LT(KIND.COMP, 2, "<", "<"),
GT(KIND.COMP, 2, ">", ">"),
LEQ(KIND.COMP, 2, "<=", "<="),
GEQ(KIND.COMP, 2, ">=", ">="),
NEQ(KIND.COMP, 2, "/=", "!="),
REF(KIND.OTHER, 2),
IF(KIND.OTHER, 3),
CONCAT(KIND.OTHER, 2),
DROPHEAD(KIND.OTHER, 2),
TAKE(KIND.OTHER, 2),
PADDINGHEAD(KIND.OTHER, 2),
PADDINGHEAD_ZERO(KIND.OTHER, 2),
ID(KIND.OTHER, 1),
ARITH_RSHIFT(KIND.OTHER, 2),
LOGIC_RSHIFT(KIND.OTHER, 2),
LSHIFT(KIND.OTHER, 2),
ARITH_RSHIFT32(KIND.OTHER, 2),
LOGIC_RSHIFT32(KIND.OTHER, 2),
LSHIFT32(KIND.OTHER, 2),
ARITH_RSHIFT64(KIND.OTHER, 2),
LOGIC_RSHIFT64(KIND.OTHER, 2),
LSHIFT64(KIND.OTHER, 2),
MSB_FLAP(KIND.OTHER, 1),
HDLMUL(KIND.OTHER, 2, "*"),
UNDEFINED(KIND.OTHER, 0),
;
enum KIND{
INFIX, COMP, OTHER
};
private final String vhdlSym, verilogSym;
private final KIND kind;
private final int argc;
private HDLOp(KIND kind, int argc, String vhdlSym, String verilogSym){
this.kind = kind;
this.argc = argc;
this.vhdlSym = vhdlSym;
this.verilogSym = verilogSym;
}
private HDLOp(KIND kind, int argc, String sym){
this(kind, argc, sym, sym);
}
private HDLOp(KIND kind, int argc){
this(kind, argc, "", "");
}
public boolean isInfix(){
return kind == KIND.INFIX;
}
public boolean isCompare(){
return kind == KIND.COMP;
}
public int getArgNums(){
return argc;
}
public String getVHDL(){
return vhdlSym;
}
public String getVerilogHDL(){
return verilogSym;
}
}