|  | // The encoding used for conditional codes used in BR instructions | 
|  |  | 
|  | #ifndef LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H | 
|  | #define LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H | 
|  |  | 
|  | #include "llvm/ADT/StringSwitch.h" | 
|  |  | 
|  | namespace llvm { | 
|  | namespace LPCC { | 
|  | enum CondCode { | 
|  | ICC_T = 0,   //  true | 
|  | ICC_F = 1,   //  false | 
|  | ICC_HI = 2,  //  high | 
|  | ICC_UGT = 2, //  unsigned greater than | 
|  | ICC_LS = 3,  //  low or same | 
|  | ICC_ULE = 3, //  unsigned less than or equal | 
|  | ICC_CC = 4,  //  carry cleared | 
|  | ICC_ULT = 4, //  unsigned less than | 
|  | ICC_CS = 5,  //  carry set | 
|  | ICC_UGE = 5, //  unsigned greater than or equal | 
|  | ICC_NE = 6,  //  not equal | 
|  | ICC_EQ = 7,  //  equal | 
|  | ICC_VC = 8,  //  oVerflow cleared | 
|  | ICC_VS = 9,  //  oVerflow set | 
|  | ICC_PL = 10, //  plus | 
|  | ICC_MI = 11, //  minus | 
|  | ICC_GE = 12, //  greater than or equal | 
|  | ICC_LT = 13, //  less than | 
|  | ICC_GT = 14, //  greater than | 
|  | ICC_LE = 15, //  less than or equal | 
|  | UNKNOWN | 
|  | }; | 
|  |  | 
|  | inline static StringRef lanaiCondCodeToString(LPCC::CondCode CC) { | 
|  | switch (CC) { | 
|  | case LPCC::ICC_T: | 
|  | return "t"; // true | 
|  | case LPCC::ICC_F: | 
|  | return "f"; // false | 
|  | case LPCC::ICC_NE: | 
|  | return "ne"; // not equal | 
|  | case LPCC::ICC_EQ: | 
|  | return "eq"; // equal | 
|  | case LPCC::ICC_VC: | 
|  | return "vc"; // oVerflow cleared | 
|  | case LPCC::ICC_VS: | 
|  | return "vs"; // oVerflow set | 
|  | case LPCC::ICC_PL: | 
|  | return "pl"; // plus | 
|  | case LPCC::ICC_MI: | 
|  | return "mi"; // minus | 
|  | case LPCC::ICC_GE: | 
|  | return "ge"; // greater than or equal | 
|  | case LPCC::ICC_LT: | 
|  | return "lt"; // less than | 
|  | case LPCC::ICC_GT: | 
|  | return "gt"; // greater than | 
|  | case LPCC::ICC_LE: | 
|  | return "le"; // less than or equal | 
|  | case LPCC::ICC_UGT: | 
|  | return "ugt"; // high | unsigned greater than | 
|  | case LPCC::ICC_ULE: | 
|  | return "ule"; // low or same | unsigned less or equal | 
|  | case LPCC::ICC_ULT: | 
|  | return "ult"; // carry cleared | unsigned less than | 
|  | case LPCC::ICC_UGE: | 
|  | return "uge"; // carry set | unsigned than or equal | 
|  | default: | 
|  | llvm_unreachable("Invalid cond code"); | 
|  | } | 
|  | } | 
|  |  | 
|  | inline static CondCode suffixToLanaiCondCode(StringRef S) { | 
|  | return StringSwitch<CondCode>(S) | 
|  | .EndsWith("f", LPCC::ICC_F) | 
|  | .EndsWith("hi", LPCC::ICC_HI) | 
|  | .EndsWith("ugt", LPCC::ICC_UGT) | 
|  | .EndsWith("ls", LPCC::ICC_LS) | 
|  | .EndsWith("ule", LPCC::ICC_ULE) | 
|  | .EndsWith("cc", LPCC::ICC_CC) | 
|  | .EndsWith("ult", LPCC::ICC_ULT) | 
|  | .EndsWith("cs", LPCC::ICC_CS) | 
|  | .EndsWith("uge", LPCC::ICC_UGE) | 
|  | .EndsWith("ne", LPCC::ICC_NE) | 
|  | .EndsWith("eq", LPCC::ICC_EQ) | 
|  | .EndsWith("vc", LPCC::ICC_VC) | 
|  | .EndsWith("vs", LPCC::ICC_VS) | 
|  | .EndsWith("pl", LPCC::ICC_PL) | 
|  | .EndsWith("mi", LPCC::ICC_MI) | 
|  | .EndsWith("ge", LPCC::ICC_GE) | 
|  | .EndsWith("lt", LPCC::ICC_LT) | 
|  | .EndsWith("gt", LPCC::ICC_GT) | 
|  | .EndsWith("le", LPCC::ICC_LE) | 
|  | .EndsWith("t", LPCC::ICC_T) // Has to be after others with suffix t | 
|  | .Default(LPCC::UNKNOWN); | 
|  | } | 
|  | } // namespace LPCC | 
|  | } // namespace llvm | 
|  |  | 
|  | #endif // LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H |