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
22namespace llvm {
23
24// LanaiII - This namespace holds all of the target specific flags that
25// instruction info tracks.
26namespace LanaiII {
27// Target Operand Flag enum.
28enum 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
40static 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