Home | History | Annotate | Download | only in Lanai
      1 // The encoding used for conditional codes used in BR instructions
      2 
      3 #ifndef LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H
      4 #define LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H
      5 
      6 #include "llvm/ADT/StringSwitch.h"
      7 
      8 namespace llvm {
      9 namespace LPCC {
     10 enum CondCode {
     11   ICC_T = 0,   //  true
     12   ICC_F = 1,   //  false
     13   ICC_HI = 2,  //  high
     14   ICC_UGT = 2, //  unsigned greater than
     15   ICC_LS = 3,  //  low or same
     16   ICC_ULE = 3, //  unsigned less than or equal
     17   ICC_CC = 4,  //  carry cleared
     18   ICC_ULT = 4, //  unsigned less than
     19   ICC_CS = 5,  //  carry set
     20   ICC_UGE = 5, //  unsigned greater than or equal
     21   ICC_NE = 6,  //  not equal
     22   ICC_EQ = 7,  //  equal
     23   ICC_VC = 8,  //  oVerflow cleared
     24   ICC_VS = 9,  //  oVerflow set
     25   ICC_PL = 10, //  plus
     26   ICC_MI = 11, //  minus
     27   ICC_GE = 12, //  greater than or equal
     28   ICC_LT = 13, //  less than
     29   ICC_GT = 14, //  greater than
     30   ICC_LE = 15, //  less than or equal
     31   UNKNOWN
     32 };
     33 
     34 inline static StringRef lanaiCondCodeToString(LPCC::CondCode CC) {
     35   switch (CC) {
     36   case LPCC::ICC_T:
     37     return "t"; // true
     38   case LPCC::ICC_F:
     39     return "f"; // false
     40   case LPCC::ICC_NE:
     41     return "ne"; // not equal
     42   case LPCC::ICC_EQ:
     43     return "eq"; // equal
     44   case LPCC::ICC_VC:
     45     return "vc"; // oVerflow cleared
     46   case LPCC::ICC_VS:
     47     return "vs"; // oVerflow set
     48   case LPCC::ICC_PL:
     49     return "pl"; // plus
     50   case LPCC::ICC_MI:
     51     return "mi"; // minus
     52   case LPCC::ICC_GE:
     53     return "ge"; // greater than or equal
     54   case LPCC::ICC_LT:
     55     return "lt"; // less than
     56   case LPCC::ICC_GT:
     57     return "gt"; // greater than
     58   case LPCC::ICC_LE:
     59     return "le"; // less than or equal
     60   case LPCC::ICC_UGT:
     61     return "ugt"; // high | unsigned greater than
     62   case LPCC::ICC_ULE:
     63     return "ule"; // low or same | unsigned less or equal
     64   case LPCC::ICC_ULT:
     65     return "ult"; // carry cleared | unsigned less than
     66   case LPCC::ICC_UGE:
     67     return "uge"; // carry set | unsigned than or equal
     68   default:
     69     llvm_unreachable("Invalid cond code");
     70   }
     71 }
     72 
     73 inline static CondCode suffixToLanaiCondCode(StringRef S) {
     74   return StringSwitch<CondCode>(S)
     75       .EndsWith("f", LPCC::ICC_F)
     76       .EndsWith("hi", LPCC::ICC_HI)
     77       .EndsWith("ugt", LPCC::ICC_UGT)
     78       .EndsWith("ls", LPCC::ICC_LS)
     79       .EndsWith("ule", LPCC::ICC_ULE)
     80       .EndsWith("cc", LPCC::ICC_CC)
     81       .EndsWith("ult", LPCC::ICC_ULT)
     82       .EndsWith("cs", LPCC::ICC_CS)
     83       .EndsWith("uge", LPCC::ICC_UGE)
     84       .EndsWith("ne", LPCC::ICC_NE)
     85       .EndsWith("eq", LPCC::ICC_EQ)
     86       .EndsWith("vc", LPCC::ICC_VC)
     87       .EndsWith("vs", LPCC::ICC_VS)
     88       .EndsWith("pl", LPCC::ICC_PL)
     89       .EndsWith("mi", LPCC::ICC_MI)
     90       .EndsWith("ge", LPCC::ICC_GE)
     91       .EndsWith("lt", LPCC::ICC_LT)
     92       .EndsWith("gt", LPCC::ICC_GT)
     93       .EndsWith("le", LPCC::ICC_LE)
     94       .EndsWith("t", LPCC::ICC_T) // Has to be after others with suffix t
     95       .Default(LPCC::UNKNOWN);
     96 }
     97 } // namespace LPCC
     98 } // namespace llvm
     99 
    100 #endif // LLVM_LIB_TARGET_LANAI_LANAICONDCODE_H
    101