1 //===-- CSKYBaseInfo.h - Top level definitions for CSKY ---*- 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 CSKY target useful for the compiler back-end and the MC libraries.
11 // As such, it deliberately does not include references to LLVM core
12 // code gen types, passes, etc..
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYBASEINFO_H
17 #define LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYBASEINFO_H
18 
19 #include "MCTargetDesc/CSKYMCTargetDesc.h"
20 #include "llvm/MC/MCInstrDesc.h"
21 
22 namespace llvm {
23 
24 // CSKYII - This namespace holds all of the target specific flags that
25 // instruction info tracks. All definitions must match CSKYInstrFormats.td.
26 namespace CSKYII {
27 
28 enum AddrMode {
29   AddrModeNone = 0,
30   AddrMode32B = 1,   // ld32.b, ld32.bs, st32.b, st32.bs, +4kb
31   AddrMode32H = 2,   // ld32.h, ld32.hs, st32.h, st32.hs, +8kb
32   AddrMode32WD = 3,  // ld32.w, st32.w, ld32.d, st32.d, +16kb
33   AddrMode16B = 4,   // ld16.b, +32b
34   AddrMode16H = 5,   // ld16.h, +64b
35   AddrMode16W = 6,   // ld16.w, +128b or +1kb
36   AddrMode32SDF = 7, // flds, fldd, +1kb
37 };
38 
39 // CSKY Specific MachineOperand Flags.
40 enum TOF {
41   MO_None = 0,
42   MO_ADDR32,
43   MO_GOT32,
44   MO_GOTOFF,
45   MO_PLT32,
46   MO_ADDR_HI16,
47   MO_ADDR_LO16,
48 
49   // Used to differentiate between target-specific "direct" flags and "bitmask"
50   // flags. A machine operand can only have one "direct" flag, but can have
51   // multiple "bitmask" flags.
52   MO_DIRECT_FLAG_MASK = 15
53 };
54 
55 enum {
56   AddrModeMask = 0x1f,
57 };
58 
59 } // namespace CSKYII
60 
61 namespace CSKYOp {
62 enum OperandType : unsigned {
63   OPERAND_BARESYMBOL = MCOI::OPERAND_FIRST_TARGET,
64   OPERAND_CONSTPOOL
65 };
66 } // namespace CSKYOp
67 
68 } // namespace llvm
69 
70 #endif // LLVM_LIB_TARGET_CSKY_MCTARGETDESC_CSKYBASEINFO_H
71