xref: /freebsd/contrib/llvm-project/llvm/lib/Target/Lanai/MCTargetDesc/LanaiBaseInfo.h (revision 6ba2210ee039f2f12878c217bcf058e9c8b26b29)
1 //===-- LanaiBaseInfo.h - Top level definitions for Lanai MC ----*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file contains small standalone helper functions and enum definitions for
10 // the Lanai target useful for the compiler back-end and the MC libraries.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIBASEINFO_H
15 #define LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIBASEINFO_H
16 
17 #include "LanaiMCTargetDesc.h"
18 #include "llvm/MC/MCExpr.h"
19 #include "llvm/Support/DataTypes.h"
20 #include "llvm/Support/ErrorHandling.h"
21 
22 namespace llvm {
23 
24 // LanaiII - This namespace holds all of the target specific flags that
25 // instruction info tracks.
26 namespace LanaiII {
27 // Target Operand Flag enum.
28 enum TOF {
29   //===------------------------------------------------------------------===//
30   // Lanai Specific MachineOperand flags.
31   MO_NO_FLAG,
32 
33   // MO_ABS_HI/LO - Represents the hi or low part of an absolute symbol
34   // address.
35   MO_ABS_HI,
36   MO_ABS_LO,
37 };
38 } // namespace LanaiII
39 
40 static inline unsigned getLanaiRegisterNumbering(unsigned Reg) {
41   switch (Reg) {
42   case Lanai::R0:
43     return 0;
44   case Lanai::R1:
45     return 1;
46   case Lanai::R2:
47   case Lanai::PC:
48     return 2;
49   case Lanai::R3:
50     return 3;
51   case Lanai::R4:
52   case Lanai::SP:
53     return 4;
54   case Lanai::R5:
55   case Lanai::FP:
56     return 5;
57   case Lanai::R6:
58     return 6;
59   case Lanai::R7:
60     return 7;
61   case Lanai::R8:
62   case Lanai::RV:
63     return 8;
64   case Lanai::R9:
65     return 9;
66   case Lanai::R10:
67   case Lanai::RR1:
68     return 10;
69   case Lanai::R11:
70   case Lanai::RR2:
71     return 11;
72   case Lanai::R12:
73     return 12;
74   case Lanai::R13:
75     return 13;
76   case Lanai::R14:
77     return 14;
78   case Lanai::R15:
79   case Lanai::RCA:
80     return 15;
81   case Lanai::R16:
82     return 16;
83   case Lanai::R17:
84     return 17;
85   case Lanai::R18:
86     return 18;
87   case Lanai::R19:
88     return 19;
89   case Lanai::R20:
90     return 20;
91   case Lanai::R21:
92     return 21;
93   case Lanai::R22:
94     return 22;
95   case Lanai::R23:
96     return 23;
97   case Lanai::R24:
98     return 24;
99   case Lanai::R25:
100     return 25;
101   case Lanai::R26:
102     return 26;
103   case Lanai::R27:
104     return 27;
105   case Lanai::R28:
106     return 28;
107   case Lanai::R29:
108     return 29;
109   case Lanai::R30:
110     return 30;
111   case Lanai::R31:
112     return 31;
113   default:
114     llvm_unreachable("Unknown register number!");
115   }
116 }
117 } // namespace llvm
118 #endif // LLVM_LIB_TARGET_LANAI_MCTARGETDESC_LANAIBASEINFO_H
119