Home | History | Annotate | Download | only in MCTargetDesc
      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 
     17 #include "RISCVMCTargetDesc.h"
     18 #include "llvm/ADT/StringRef.h"
     19 #include "llvm/ADT/StringSwitch.h"
     20 
     21 namespace llvm {
     22 
     23 // RISCVII - This namespace holds all of the target specific flags that
     24 // instruction info tracks. All definitions must match RISCVInstrFormats.td.
     25 namespace RISCVII {
     26 enum {
     27   InstFormatPseudo = 0,
     28   InstFormatR = 1,
     29   InstFormatR4 = 2,
     30   InstFormatI = 3,
     31   InstFormatS = 4,
     32   InstFormatB = 5,
     33   InstFormatU = 6,
     34   InstFormatJ = 7,
     35   InstFormatCR = 8,
     36   InstFormatCI = 9,
     37   InstFormatCSS = 10,
     38   InstFormatCIW = 11,
     39   InstFormatCL = 12,
     40   InstFormatCS = 13,
     41   InstFormatCB = 14,
     42   InstFormatCJ = 15,
     43   InstFormatOther = 16,
     44 
     45   InstFormatMask = 31
     46 };
     47 
     48 enum {
     49   MO_None,
     50   MO_LO,
     51   MO_HI,
     52   MO_PCREL_HI,
     53 };
     54 } // namespace RISCVII
     55 
     56 // Describes the predecessor/successor bits used in the FENCE instruction.
     57 namespace RISCVFenceField {
     58 enum FenceField {
     59   I = 8,
     60   O = 4,
     61   R = 2,
     62   W = 1
     63 };
     64 }
     65 
     66 // Describes the supported floating point rounding mode encodings.
     67 namespace RISCVFPRndMode {
     68 enum RoundingMode {
     69   RNE = 0,
     70   RTZ = 1,
     71   RDN = 2,
     72   RUP = 3,
     73   RMM = 4,
     74   DYN = 7,
     75   Invalid
     76 };
     77 
     78 inline static StringRef roundingModeToString(RoundingMode RndMode) {
     79   switch (RndMode) {
     80   default:
     81     llvm_unreachable("Unknown floating point rounding mode");
     82   case RISCVFPRndMode::RNE:
     83     return "rne";
     84   case RISCVFPRndMode::RTZ:
     85     return "rtz";
     86   case RISCVFPRndMode::RDN:
     87     return "rdn";
     88   case RISCVFPRndMode::RUP:
     89     return "rup";
     90   case RISCVFPRndMode::RMM:
     91     return "rmm";
     92   case RISCVFPRndMode::DYN:
     93     return "dyn";
     94   }
     95 }
     96 
     97 inline static RoundingMode stringToRoundingMode(StringRef Str) {
     98   return StringSwitch<RoundingMode>(Str)
     99       .Case("rne", RISCVFPRndMode::RNE)
    100       .Case("rtz", RISCVFPRndMode::RTZ)
    101       .Case("rdn", RISCVFPRndMode::RDN)
    102       .Case("rup", RISCVFPRndMode::RUP)
    103       .Case("rmm", RISCVFPRndMode::RMM)
    104       .Case("dyn", RISCVFPRndMode::DYN)
    105       .Default(RISCVFPRndMode::Invalid);
    106 }
    107 } // namespace RISCVFPRndMode
    108 } // namespace llvm
    109 
    110 #endif
    111