LLVM  8.0.0svn
RISCVBaseInfo.h
Go to the documentation of this file.
1 //===-- RISCVBaseInfo.h - Top level definitions for RISCV MC ----*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file contains small standalone enum definitions for the RISCV target
11 // useful for the compiler back-end and the MC libraries.
12 //
13 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H
15 #define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H
16 
18 #include "llvm/ADT/StringRef.h"
19 #include "llvm/ADT/StringSwitch.h"
21 
22 namespace llvm {
23 
24 // RISCVII - This namespace holds all of the target specific flags that
25 // instruction info tracks. All definitions must match RISCVInstrFormats.td.
26 namespace RISCVII {
27 enum {
46 
48 };
49 
50 enum {
55 };
56 } // namespace RISCVII
57 
58 // Describes the predecessor/successor bits used in the FENCE instruction.
59 namespace RISCVFenceField {
60 enum FenceField {
61  I = 8,
62  O = 4,
63  R = 2,
64  W = 1
65 };
66 }
67 
68 // Describes the supported floating point rounding mode encodings.
69 namespace RISCVFPRndMode {
71  RNE = 0,
72  RTZ = 1,
73  RDN = 2,
74  RUP = 3,
75  RMM = 4,
76  DYN = 7,
77  Invalid
78 };
79 
81  switch (RndMode) {
82  default:
83  llvm_unreachable("Unknown floating point rounding mode");
85  return "rne";
87  return "rtz";
89  return "rdn";
91  return "rup";
93  return "rmm";
95  return "dyn";
96  }
97 }
98 
100  return StringSwitch<RoundingMode>(Str)
101  .Case("rne", RISCVFPRndMode::RNE)
102  .Case("rtz", RISCVFPRndMode::RTZ)
103  .Case("rdn", RISCVFPRndMode::RDN)
104  .Case("rup", RISCVFPRndMode::RUP)
105  .Case("rmm", RISCVFPRndMode::RMM)
106  .Case("dyn", RISCVFPRndMode::DYN)
108 }
109 
110 inline static bool isValidRoundingMode(unsigned Mode) {
111  switch (Mode) {
112  default:
113  return false;
114  case RISCVFPRndMode::RNE:
115  case RISCVFPRndMode::RTZ:
116  case RISCVFPRndMode::RDN:
117  case RISCVFPRndMode::RUP:
118  case RISCVFPRndMode::RMM:
119  case RISCVFPRndMode::DYN:
120  return true;
121  }
122 }
123 } // namespace RISCVFPRndMode
124 
125 namespace RISCVSysReg {
126 struct SysReg {
127  const char *Name;
128  unsigned Encoding;
129  // FIXME: add these additional fields when needed.
130  // Privilege Access: Read, Write, Read-Only.
131  // unsigned ReadWrite;
132  // Privilege Mode: User, System or Machine.
133  // unsigned Mode;
134  // Check field name.
135  // unsigned Extra;
136  // Register number without the privilege bits.
137  // unsigned Number;
140 
141  bool haveRequiredFeatures(FeatureBitset ActiveFeatures) const {
142  // Not in 32-bit mode.
143  if (isRV32Only && ActiveFeatures[RISCV::Feature64Bit])
144  return false;
145  // No required feature associated with the system register.
146  if (FeaturesRequired.none())
147  return true;
148  return (FeaturesRequired & ActiveFeatures) == FeaturesRequired;
149  }
150 };
151 
152 #define GET_SysRegsList_DECL
153 #include "RISCVGenSystemOperands.inc"
154 } // end namespace RISCVSysReg
155 
156 } // namespace llvm
157 
158 #endif
static bool isValidRoundingMode(unsigned Mode)
SI Whole Quad Mode
This class represents lattice values for constants.
Definition: AllocatorList.h:24
static RoundingMode stringToRoundingMode(StringRef Str)
Definition: RISCVBaseInfo.h:99
bool haveRequiredFeatures(FeatureBitset ActiveFeatures) const
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE R Default(T Value)
Definition: StringSwitch.h:203
FeatureBitset FeaturesRequired
A switch()-like statement whose cases are string literals.
Definition: StringSwitch.h:43
Container class for subtarget features.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
LLVM_ATTRIBUTE_ALWAYS_INLINE StringSwitch & Case(StringLiteral S, T Value)
Definition: StringSwitch.h:70
#define I(x, y, z)
Definition: MD5.cpp:58
static StringRef roundingModeToString(RoundingMode RndMode)
Definition: RISCVBaseInfo.h:80
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49