| //===-- RISCVBaseInfo.h - Top level definitions for RISCV MC ----*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains small standalone enum definitions for the RISCV target |
| // useful for the compiler back-end and the MC libraries. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H |
| #define LLVM_LIB_TARGET_RISCV_MCTARGETDESC_RISCVBASEINFO_H |
| |
| #include "RISCVMCTargetDesc.h" |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/ADT/StringSwitch.h" |
| |
| namespace llvm { |
| |
| // RISCVII - This namespace holds all of the target specific flags that |
| // instruction info tracks. All definitions must match RISCVInstrFormats.td. |
| namespace RISCVII { |
| enum { |
| InstFormatPseudo = 0, |
| InstFormatR = 1, |
| InstFormatR4 = 2, |
| InstFormatI = 3, |
| InstFormatS = 4, |
| InstFormatB = 5, |
| InstFormatU = 6, |
| InstFormatJ = 7, |
| InstFormatCR = 8, |
| InstFormatCI = 9, |
| InstFormatCSS = 10, |
| InstFormatCIW = 11, |
| InstFormatCL = 12, |
| InstFormatCS = 13, |
| InstFormatCB = 14, |
| InstFormatCJ = 15, |
| InstFormatOther = 16, |
| |
| InstFormatMask = 31 |
| }; |
| |
| enum { |
| MO_None, |
| MO_LO, |
| MO_HI, |
| MO_PCREL_HI, |
| }; |
| } // namespace RISCVII |
| |
| // Describes the predecessor/successor bits used in the FENCE instruction. |
| namespace RISCVFenceField { |
| enum FenceField { |
| I = 8, |
| O = 4, |
| R = 2, |
| W = 1 |
| }; |
| } |
| |
| // Describes the supported floating point rounding mode encodings. |
| namespace RISCVFPRndMode { |
| enum RoundingMode { |
| RNE = 0, |
| RTZ = 1, |
| RDN = 2, |
| RUP = 3, |
| RMM = 4, |
| DYN = 7, |
| Invalid |
| }; |
| |
| inline static StringRef roundingModeToString(RoundingMode RndMode) { |
| switch (RndMode) { |
| default: |
| llvm_unreachable("Unknown floating point rounding mode"); |
| case RISCVFPRndMode::RNE: |
| return "rne"; |
| case RISCVFPRndMode::RTZ: |
| return "rtz"; |
| case RISCVFPRndMode::RDN: |
| return "rdn"; |
| case RISCVFPRndMode::RUP: |
| return "rup"; |
| case RISCVFPRndMode::RMM: |
| return "rmm"; |
| case RISCVFPRndMode::DYN: |
| return "dyn"; |
| } |
| } |
| |
| inline static RoundingMode stringToRoundingMode(StringRef Str) { |
| return StringSwitch<RoundingMode>(Str) |
| .Case("rne", RISCVFPRndMode::RNE) |
| .Case("rtz", RISCVFPRndMode::RTZ) |
| .Case("rdn", RISCVFPRndMode::RDN) |
| .Case("rup", RISCVFPRndMode::RUP) |
| .Case("rmm", RISCVFPRndMode::RMM) |
| .Case("dyn", RISCVFPRndMode::DYN) |
| .Default(RISCVFPRndMode::Invalid); |
| } |
| } // namespace RISCVFPRndMode |
| } // namespace llvm |
| |
| #endif |