Mercurial > hg > CbC > CbC_llvm
comparison lib/Target/Lanai/LanaiCondCode.h @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
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 |