LCOV - code coverage report
Current view: top level - build-llvm/lib/Target/Sparc - SparcGenSubtargetInfo.inc (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 27 29 93.1 %
Date: 2018-05-20 00:06:23 Functions: 3 6 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
       2             : |*                                                                            *|
       3             : |* Subtarget Enumeration Source Fragment                                      *|
       4             : |*                                                                            *|
       5             : |* Automatically generated file, do not edit!                                 *|
       6             : |*                                                                            *|
       7             : \*===----------------------------------------------------------------------===*/
       8             : 
       9             : 
      10             : #ifdef GET_SUBTARGETINFO_ENUM
      11             : #undef GET_SUBTARGETINFO_ENUM
      12             : 
      13             : namespace llvm {
      14             : namespace Sparc {
      15             : enum {
      16             :   DetectRoundChange = 0,
      17             :   FeatureHardQuad = 1,
      18             :   FeatureLeon = 2,
      19             :   FeatureNoFMULS = 3,
      20             :   FeatureNoFSMULD = 4,
      21             :   FeatureSoftFloat = 5,
      22             :   FeatureSoftMulDiv = 6,
      23             :   FeatureV8Deprecated = 7,
      24             :   FeatureV9 = 8,
      25             :   FeatureVIS = 9,
      26             :   FeatureVIS2 = 10,
      27             :   FeatureVIS3 = 11,
      28             :   FixAllFDIVSQRT = 12,
      29             :   InsertNOPLoad = 13,
      30             :   LeonCASA = 14,
      31             :   UMACSMACSupport = 15,
      32             :   UsePopc = 16,
      33             : };
      34             : } // end namespace Sparc
      35             : } // end namespace llvm
      36             : 
      37             : #endif // GET_SUBTARGETINFO_ENUM
      38             : 
      39             : 
      40             : #ifdef GET_SUBTARGETINFO_MC_DESC
      41             : #undef GET_SUBTARGETINFO_MC_DESC
      42             : 
      43             : namespace llvm {
      44             : // Sorted (by key) array of values for CPU features.
      45             : extern const llvm::SubtargetFeatureKV SparcFeatureKV[] = {
      46             :   { "deprecated-v8", "Enable deprecated V8 instructions in V9 mode", { Sparc::FeatureV8Deprecated }, { } },
      47             :   { "detectroundchange", "LEON3 erratum detection: Detects any rounding mode change request: use only the round-to-nearest rounding mode", { Sparc::DetectRoundChange }, { } },
      48             :   { "fixallfdivsqrt", "LEON erratum fix: Fix FDIVS/FDIVD/FSQRTS/FSQRTD instructions with NOPs and floating-point store", { Sparc::FixAllFDIVSQRT }, { } },
      49             :   { "hard-quad-float", "Enable quad-word floating point instructions", { Sparc::FeatureHardQuad }, { } },
      50             :   { "hasleoncasa", "Enable CASA instruction for LEON3 and LEON4 processors", { Sparc::LeonCASA }, { } },
      51             :   { "hasumacsmac", "Enable UMAC and SMAC for LEON3 and LEON4 processors", { Sparc::UMACSMACSupport }, { } },
      52             :   { "insertnopload", "LEON3 erratum fix: Insert a NOP instruction after every single-cycle load instruction when the next instruction is another load/store instruction", { Sparc::InsertNOPLoad }, { } },
      53             :   { "leon", "Enable LEON extensions", { Sparc::FeatureLeon }, { } },
      54             :   { "no-fmuls", "Disable the fmuls instruction.", { Sparc::FeatureNoFMULS }, { } },
      55             :   { "no-fsmuld", "Disable the fsmuld instruction.", { Sparc::FeatureNoFSMULD }, { } },
      56             :   { "popc", "Use the popc (population count) instruction", { Sparc::UsePopc }, { } },
      57             :   { "soft-float", "Use software emulation for floating point", { Sparc::FeatureSoftFloat }, { } },
      58             :   { "soft-mul-div", "Use software emulation for integer multiply and divide", { Sparc::FeatureSoftMulDiv }, { } },
      59             :   { "v9", "Enable SPARC-V9 instructions", { Sparc::FeatureV9 }, { } },
      60             :   { "vis", "Enable UltraSPARC Visual Instruction Set extensions", { Sparc::FeatureVIS }, { } },
      61             :   { "vis2", "Enable Visual Instruction Set extensions II", { Sparc::FeatureVIS2 }, { } },
      62             :   { "vis3", "Enable Visual Instruction Set extensions III", { Sparc::FeatureVIS3 }, { } },
      63       99237 : };
      64             : 
      65             : // Sorted (by key) array of values for CPU subtype.
      66             : extern const llvm::SubtargetFeatureKV SparcSubTypeKV[] = {
      67             :   { "at697e", "Select the at697e processor", { Sparc::FeatureLeon, Sparc::InsertNOPLoad }, { } },
      68             :   { "at697f", "Select the at697f processor", { Sparc::FeatureLeon, Sparc::InsertNOPLoad }, { } },
      69             :   { "f934", "Select the f934 processor", { }, { } },
      70             :   { "generic", "Select the generic processor", { }, { } },
      71             :   { "gr712rc", "Select the gr712rc processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      72             :   { "gr740", "Select the gr740 processor", { Sparc::FeatureLeon, Sparc::UMACSMACSupport, Sparc::LeonCASA }, { } },
      73             :   { "hypersparc", "Select the hypersparc processor", { }, { } },
      74             :   { "leon2", "Select the leon2 processor", { Sparc::FeatureLeon }, { } },
      75             :   { "leon3", "Select the leon3 processor", { Sparc::FeatureLeon, Sparc::UMACSMACSupport }, { } },
      76             :   { "leon4", "Select the leon4 processor", { Sparc::FeatureLeon, Sparc::UMACSMACSupport, Sparc::LeonCASA }, { } },
      77             :   { "ma2080", "Select the ma2080 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      78             :   { "ma2085", "Select the ma2085 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      79             :   { "ma2100", "Select the ma2100 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      80             :   { "ma2150", "Select the ma2150 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      81             :   { "ma2155", "Select the ma2155 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      82             :   { "ma2450", "Select the ma2450 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      83             :   { "ma2455", "Select the ma2455 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      84             :   { "ma2480", "Select the ma2480 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      85             :   { "ma2485", "Select the ma2485 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      86             :   { "ma2x5x", "Select the ma2x5x processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      87             :   { "ma2x8x", "Select the ma2x8x processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      88             :   { "myriad2", "Select the myriad2 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      89             :   { "myriad2.1", "Select the myriad2.1 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      90             :   { "myriad2.2", "Select the myriad2.2 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      91             :   { "myriad2.3", "Select the myriad2.3 processor", { Sparc::FeatureLeon, Sparc::LeonCASA }, { } },
      92             :   { "niagara", "Select the niagara processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::FeatureVIS, Sparc::FeatureVIS2 }, { } },
      93             :   { "niagara2", "Select the niagara2 processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::UsePopc, Sparc::FeatureVIS, Sparc::FeatureVIS2 }, { } },
      94             :   { "niagara3", "Select the niagara3 processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::UsePopc, Sparc::FeatureVIS, Sparc::FeatureVIS2 }, { } },
      95             :   { "niagara4", "Select the niagara4 processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::UsePopc, Sparc::FeatureVIS, Sparc::FeatureVIS2, Sparc::FeatureVIS3 }, { } },
      96             :   { "sparclet", "Select the sparclet processor", { }, { } },
      97             :   { "sparclite", "Select the sparclite processor", { }, { } },
      98             :   { "sparclite86x", "Select the sparclite86x processor", { }, { } },
      99             :   { "supersparc", "Select the supersparc processor", { }, { } },
     100             :   { "tsc701", "Select the tsc701 processor", { }, { } },
     101             :   { "ultrasparc", "Select the ultrasparc processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::FeatureVIS }, { } },
     102             :   { "ultrasparc3", "Select the ultrasparc3 processor", { Sparc::FeatureV9, Sparc::FeatureV8Deprecated, Sparc::FeatureVIS, Sparc::FeatureVIS2 }, { } },
     103             :   { "ut699", "Select the ut699 processor", { Sparc::FeatureLeon, Sparc::InsertNOPLoad, Sparc::FeatureNoFSMULD, Sparc::FeatureNoFMULS, Sparc::FixAllFDIVSQRT }, { } },
     104             :   { "v7", "Select the v7 processor", { Sparc::FeatureSoftMulDiv, Sparc::FeatureNoFSMULD }, { } },
     105             :   { "v8", "Select the v8 processor", { }, { } },
     106             :   { "v9", "Select the v9 processor", { Sparc::FeatureV9 }, { } },
     107       99237 : };
     108             : 
     109             : #ifdef DBGFIELD
     110             : #error "<target>GenSubtargetInfo.inc requires a DBGFIELD macro"
     111             : #endif
     112             : #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
     113             : #define DBGFIELD(x) x,
     114             : #else
     115             : #define DBGFIELD(x)
     116             : #endif
     117             : 
     118             : // Functional units for "LEON2Itineraries"
     119             : namespace LEON2ItinerariesFU {
     120             :   const unsigned LEONIU = 1 << 0;
     121             :   const unsigned LEONFPU = 1 << 1;
     122             : } // end namespace LEON2ItinerariesFU
     123             : 
     124             : // Functional units for "LEON3Itineraries"
     125             : namespace LEON3ItinerariesFU {
     126             :   const unsigned LEONIU = 1 << 0;
     127             :   const unsigned LEONFPU = 1 << 1;
     128             : } // end namespace LEON3ItinerariesFU
     129             : 
     130             : // Functional units for "LEON4Itineraries"
     131             : namespace LEON4ItinerariesFU {
     132             :   const unsigned LEONIU = 1 << 0;
     133             :   const unsigned LEONFPU = 1 << 1;
     134             : } // end namespace LEON4ItinerariesFU
     135             : 
     136             : extern const llvm::InstrStage SparcStages[] = {
     137             :   { 0, 0, 0, llvm::InstrStage::Required }, // No itinerary
     138             :   { 1, LEON2ItinerariesFU::LEONIU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 1
     139             :   { 1, LEON2ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 2
     140             :   { 1, LEON2ItinerariesFU::LEONIU | LEON2ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 3
     141             :   { 1, LEON3ItinerariesFU::LEONIU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 4
     142             :   { 1, LEON3ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 5
     143             :   { 1, LEON3ItinerariesFU::LEONIU | LEON3ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 6
     144             :   { 1, LEON4ItinerariesFU::LEONIU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 7
     145             :   { 1, LEON4ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 8
     146             :   { 1, LEON4ItinerariesFU::LEONIU | LEON4ItinerariesFU::LEONFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 9
     147             :   { 0, 0, 0, llvm::InstrStage::Required } // End stages
     148             : };
     149             : extern const unsigned SparcOperandCycles[] = {
     150             :   0, // No itinerary
     151             :   1,   1, // 1-2
     152             :   7,   1, // 3-4
     153             :   2,   1, // 5-6
     154             :   2,   1, // 7-8
     155             :   7,   1, // 9-10
     156             :   36,   1, // 11-12
     157             :   20,   1, // 13-14
     158             :   21,   1, // 15-16
     159             :   16,   1, // 17-18
     160             :   2,   1, // 19-20
     161             :   65,   1, // 21-22
     162             :   37,   1, // 23-24
     163             :   2,   1, // 25-26
     164             :   2,   1, // 27-28
     165             :   1,   1, // 29-30
     166             :   35,   1, // 31-32
     167             :   5,   1, // 33-34
     168             :   2,   1, // 35-36
     169             :   3,   1, // 37-38
     170             :   5,   1, // 39-40
     171             :   1,   1, // 41-42
     172             :   7,   1, // 43-44
     173             :   3,   1, // 45-46
     174             :   2,   1, // 47-48
     175             :   4,   1, // 49-50
     176             :   17,   1, // 51-52
     177             :   16,   1, // 53-54
     178             :   4,   1, // 55-56
     179             :   4,   1, // 57-58
     180             :   2,   1, // 59-60
     181             :   25,   1, // 61-62
     182             :   24,   1, // 63-64
     183             :   4,   1, // 65-66
     184             :   2,   1, // 67-68
     185             :   1,   1, // 69-70
     186             :   35,   1, // 71-72
     187             :   2,   1, // 73-74
     188             :   1,   1, // 75-76
     189             :   4,   1, // 77-78
     190             :   5,   1, // 79-80
     191             :   4,   1, // 81-82
     192             :   1,   1, // 83-84
     193             :   7,   1, // 85-86
     194             :   3,   1, // 87-88
     195             :   2,   1, // 89-90
     196             :   4,   1, // 91-92
     197             :   17,   1, // 93-94
     198             :   16,   1, // 95-96
     199             :   4,   1, // 97-98
     200             :   4,   1, // 99-100
     201             :   2,   1, // 101-102
     202             :   25,   1, // 103-104
     203             :   24,   1, // 105-106
     204             :   4,   1, // 107-108
     205             :   1,   1, // 109-110
     206             :   1,   1, // 111-112
     207             :   35,   1, // 113-114
     208             :   2,   1, // 115-116
     209             :   1,   1, // 117-118
     210             :   1,   1, // 119-120
     211             :   1,   1, // 121-122
     212             :   4,   1, // 123-124
     213             :   0 // End operand cycles
     214             : };
     215             : extern const unsigned SparcForwardingPaths[] = {
     216             :  0, // No itinerary
     217             :  0,  0, // 1-2
     218             :  0,  0, // 3-4
     219             :  0,  0, // 5-6
     220             :  0,  0, // 7-8
     221             :  0,  0, // 9-10
     222             :  0,  0, // 11-12
     223             :  0,  0, // 13-14
     224             :  0,  0, // 15-16
     225             :  0,  0, // 17-18
     226             :  0,  0, // 19-20
     227             :  0,  0, // 21-22
     228             :  0,  0, // 23-24
     229             :  0,  0, // 25-26
     230             :  0,  0, // 27-28
     231             :  0,  0, // 29-30
     232             :  0,  0, // 31-32
     233             :  0,  0, // 33-34
     234             :  0,  0, // 35-36
     235             :  0,  0, // 37-38
     236             :  0,  0, // 39-40
     237             :  0,  0, // 41-42
     238             :  0,  0, // 43-44
     239             :  0,  0, // 45-46
     240             :  0,  0, // 47-48
     241             :  0,  0, // 49-50
     242             :  0,  0, // 51-52
     243             :  0,  0, // 53-54
     244             :  0,  0, // 55-56
     245             :  0,  0, // 57-58
     246             :  0,  0, // 59-60
     247             :  0,  0, // 61-62
     248             :  0,  0, // 63-64
     249             :  0,  0, // 65-66
     250             :  0,  0, // 67-68
     251             :  0,  0, // 69-70
     252             :  0,  0, // 71-72
     253             :  0,  0, // 73-74
     254             :  0,  0, // 75-76
     255             :  0,  0, // 77-78
     256             :  0,  0, // 79-80
     257             :  0,  0, // 81-82
     258             :  0,  0, // 83-84
     259             :  0,  0, // 85-86
     260             :  0,  0, // 87-88
     261             :  0,  0, // 89-90
     262             :  0,  0, // 91-92
     263             :  0,  0, // 93-94
     264             :  0,  0, // 95-96
     265             :  0,  0, // 97-98
     266             :  0,  0, // 99-100
     267             :  0,  0, // 101-102
     268             :  0,  0, // 103-104
     269             :  0,  0, // 105-106
     270             :  0,  0, // 107-108
     271             :  0,  0, // 109-110
     272             :  0,  0, // 111-112
     273             :  0,  0, // 113-114
     274             :  0,  0, // 115-116
     275             :  0,  0, // 117-118
     276             :  0,  0, // 119-120
     277             :  0,  0, // 121-122
     278             :  0,  0, // 123-124
     279             :  0 // End bypass tables
     280             : };
     281             : 
     282             : static const llvm::InstrItinerary LEON2Itineraries[] = {
     283             :   { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
     284             :   { 1, 1, 2, 1, 3 }, // 1 IIC_iu_instr
     285             :   { 1, 2, 3, 3, 5 }, // 2 IIC_fpu_normal_instr
     286             :   { 1, 3, 4, 5, 7 }, // 3 IIC_jmp_or_call
     287             :   { 1, 2, 3, 7, 9 }, // 4 IIC_fpu_abs
     288             :   { 1, 2, 3, 9, 11 }, // 5 IIC_fpu_fast_instr
     289             :   { 1, 2, 3, 11, 13 }, // 6 IIC_fpu_divd
     290             :   { 1, 2, 3, 13, 15 }, // 7 IIC_fpu_divs
     291             :   { 1, 2, 3, 15, 17 }, // 8 IIC_fpu_muld
     292             :   { 1, 2, 3, 17, 19 }, // 9 IIC_fpu_muls
     293             :   { 1, 2, 3, 19, 21 }, // 10 IIC_fpu_negs
     294             :   { 1, 2, 3, 21, 23 }, // 11 IIC_fpu_sqrtd
     295             :   { 1, 2, 3, 23, 25 }, // 12 IIC_fpu_sqrts
     296             :   { 1, 2, 3, 25, 27 }, // 13 IIC_fpu_stod
     297             :   { 1, 3, 4, 27, 29 }, // 14 IIC_ldd
     298             :   { 1, 3, 4, 29, 31 }, // 15 IIC_iu_or_fpu_instr
     299             :   { 1, 1, 2, 31, 33 }, // 16 IIC_iu_div
     300             :   { 0, 0, 0, 0, 0 }, // 17 IIC_smac_umac
     301             :   { 1, 1, 2, 33, 35 }, // 18 IIC_iu_smul
     302             :   { 1, 3, 4, 35, 37 }, // 19 IIC_st
     303             :   { 1, 3, 4, 37, 39 }, // 20 IIC_std
     304             :   { 1, 1, 2, 39, 41 }, // 21 IIC_iu_umul
     305             :   { 0, uint16_t(~0U), uint16_t(~0U), uint16_t(~0U), uint16_t(~0U) }// end marker
     306             : };
     307             : 
     308             : static const llvm::InstrItinerary LEON3Itineraries[] = {
     309             :   { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
     310             :   { 1, 4, 5, 41, 43 }, // 1 IIC_iu_instr
     311             :   { 1, 5, 6, 43, 45 }, // 2 IIC_fpu_normal_instr
     312             :   { 1, 6, 7, 45, 47 }, // 3 IIC_jmp_or_call
     313             :   { 1, 5, 6, 47, 49 }, // 4 IIC_fpu_abs
     314             :   { 1, 5, 6, 49, 51 }, // 5 IIC_fpu_fast_instr
     315             :   { 1, 5, 6, 51, 53 }, // 6 IIC_fpu_divd
     316             :   { 1, 5, 6, 53, 55 }, // 7 IIC_fpu_divs
     317             :   { 1, 5, 6, 55, 57 }, // 8 IIC_fpu_muld
     318             :   { 1, 5, 6, 57, 59 }, // 9 IIC_fpu_muls
     319             :   { 1, 5, 6, 59, 61 }, // 10 IIC_fpu_negs
     320             :   { 1, 5, 6, 61, 63 }, // 11 IIC_fpu_sqrtd
     321             :   { 1, 5, 6, 63, 65 }, // 12 IIC_fpu_sqrts
     322             :   { 1, 5, 6, 65, 67 }, // 13 IIC_fpu_stod
     323             :   { 1, 6, 7, 67, 69 }, // 14 IIC_ldd
     324             :   { 1, 6, 7, 69, 71 }, // 15 IIC_iu_or_fpu_instr
     325             :   { 1, 4, 5, 71, 73 }, // 16 IIC_iu_div
     326             :   { 1, 4, 5, 73, 75 }, // 17 IIC_smac_umac
     327             :   { 1, 4, 5, 75, 77 }, // 18 IIC_iu_smul
     328             :   { 1, 6, 7, 77, 79 }, // 19 IIC_st
     329             :   { 1, 6, 7, 79, 81 }, // 20 IIC_std
     330             :   { 1, 4, 5, 81, 83 }, // 21 IIC_iu_umul
     331             :   { 0, uint16_t(~0U), uint16_t(~0U), uint16_t(~0U), uint16_t(~0U) }// end marker
     332             : };
     333             : 
     334             : static const llvm::InstrItinerary LEON4Itineraries[] = {
     335             :   { 0, 0, 0, 0, 0 }, // 0 NoInstrModel
     336             :   { 1, 7, 8, 83, 85 }, // 1 IIC_iu_instr
     337             :   { 1, 8, 9, 85, 87 }, // 2 IIC_fpu_normal_instr
     338             :   { 1, 9, 10, 87, 89 }, // 3 IIC_jmp_or_call
     339             :   { 1, 8, 9, 89, 91 }, // 4 IIC_fpu_abs
     340             :   { 1, 8, 9, 91, 93 }, // 5 IIC_fpu_fast_instr
     341             :   { 1, 8, 9, 93, 95 }, // 6 IIC_fpu_divd
     342             :   { 1, 8, 9, 95, 97 }, // 7 IIC_fpu_divs
     343             :   { 1, 8, 9, 97, 99 }, // 8 IIC_fpu_muld
     344             :   { 1, 8, 9, 99, 101 }, // 9 IIC_fpu_muls
     345             :   { 1, 8, 9, 101, 103 }, // 10 IIC_fpu_negs
     346             :   { 1, 8, 9, 103, 105 }, // 11 IIC_fpu_sqrtd
     347             :   { 1, 8, 9, 105, 107 }, // 12 IIC_fpu_sqrts
     348             :   { 1, 8, 9, 107, 109 }, // 13 IIC_fpu_stod
     349             :   { 1, 9, 10, 109, 111 }, // 14 IIC_ldd
     350             :   { 1, 9, 10, 111, 113 }, // 15 IIC_iu_or_fpu_instr
     351             :   { 1, 7, 8, 113, 115 }, // 16 IIC_iu_div
     352             :   { 1, 7, 8, 115, 117 }, // 17 IIC_smac_umac
     353             :   { 1, 7, 8, 117, 119 }, // 18 IIC_iu_smul
     354             :   { 1, 9, 10, 119, 121 }, // 19 IIC_st
     355             :   { 1, 9, 10, 121, 123 }, // 20 IIC_std
     356             :   { 1, 7, 8, 123, 125 }, // 21 IIC_iu_umul
     357             :   { 0, uint16_t(~0U), uint16_t(~0U), uint16_t(~0U), uint16_t(~0U) }// end marker
     358             : };
     359             : 
     360             : // ===============================================================
     361             : // Data tables for the new per-operand machine model.
     362             : 
     363             : // {ProcResourceIdx, Cycles}
     364             : extern const llvm::MCWriteProcResEntry SparcWriteProcResTable[] = {
     365             :   { 0,  0}, // Invalid
     366             : }; // SparcWriteProcResTable
     367             : 
     368             : // {Cycles, WriteResourceID}
     369             : extern const llvm::MCWriteLatencyEntry SparcWriteLatencyTable[] = {
     370             :   { 0,  0}, // Invalid
     371             : }; // SparcWriteLatencyTable
     372             : 
     373             : // {UseIdx, WriteResourceID, Cycles}
     374             : extern const llvm::MCReadAdvanceEntry SparcReadAdvanceTable[] = {
     375             :   {0,  0,  0}, // Invalid
     376             : }; // SparcReadAdvanceTable
     377             : 
     378             : static const llvm::MCSchedModel NoSchedModel = {
     379             :   MCSchedModel::DefaultIssueWidth,
     380             :   MCSchedModel::DefaultMicroOpBufferSize,
     381             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     382             :   MCSchedModel::DefaultLoadLatency,
     383             :   MCSchedModel::DefaultHighLatency,
     384             :   MCSchedModel::DefaultMispredictPenalty,
     385             :   false, // PostRAScheduler
     386             :   false, // CompleteModel
     387             :   0, // Processor ID
     388             :   nullptr, nullptr, 0, 0, // No instruction-level machine model.
     389             :   nullptr, // No Itinerary
     390             :   nullptr // No extra processor descriptor
     391             : };
     392             : 
     393             : static const llvm::MCSchedModel LEON2ItinerariesModel = {
     394             :   MCSchedModel::DefaultIssueWidth,
     395             :   MCSchedModel::DefaultMicroOpBufferSize,
     396             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     397             :   MCSchedModel::DefaultLoadLatency,
     398             :   MCSchedModel::DefaultHighLatency,
     399             :   MCSchedModel::DefaultMispredictPenalty,
     400             :   false, // PostRAScheduler
     401             :   false, // CompleteModel
     402             :   1, // Processor ID
     403             :   nullptr, nullptr, 0, 0, // No instruction-level machine model.
     404             :   LEON2Itineraries,
     405             :   nullptr // No extra processor descriptor
     406             : };
     407             : 
     408             : static const llvm::MCSchedModel LEON3ItinerariesModel = {
     409             :   MCSchedModel::DefaultIssueWidth,
     410             :   MCSchedModel::DefaultMicroOpBufferSize,
     411             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     412             :   MCSchedModel::DefaultLoadLatency,
     413             :   MCSchedModel::DefaultHighLatency,
     414             :   MCSchedModel::DefaultMispredictPenalty,
     415             :   false, // PostRAScheduler
     416             :   false, // CompleteModel
     417             :   2, // Processor ID
     418             :   nullptr, nullptr, 0, 0, // No instruction-level machine model.
     419             :   LEON3Itineraries,
     420             :   nullptr // No extra processor descriptor
     421             : };
     422             : 
     423             : static const llvm::MCSchedModel LEON4ItinerariesModel = {
     424             :   MCSchedModel::DefaultIssueWidth,
     425             :   MCSchedModel::DefaultMicroOpBufferSize,
     426             :   MCSchedModel::DefaultLoopMicroOpBufferSize,
     427             :   MCSchedModel::DefaultLoadLatency,
     428             :   MCSchedModel::DefaultHighLatency,
     429             :   MCSchedModel::DefaultMispredictPenalty,
     430             :   false, // PostRAScheduler
     431             :   false, // CompleteModel
     432             :   3, // Processor ID
     433             :   nullptr, nullptr, 0, 0, // No instruction-level machine model.
     434             :   LEON4Itineraries,
     435             :   nullptr // No extra processor descriptor
     436             : };
     437             : 
     438             : // Sorted (by key) array of itineraries for CPU subtype.
     439             : extern const llvm::SubtargetInfoKV SparcProcSchedKV[] = {
     440             :   { "at697e", (const void *)&LEON2ItinerariesModel },
     441             :   { "at697f", (const void *)&LEON2ItinerariesModel },
     442             :   { "f934", (const void *)&NoSchedModel },
     443             :   { "generic", (const void *)&NoSchedModel },
     444             :   { "gr712rc", (const void *)&LEON3ItinerariesModel },
     445             :   { "gr740", (const void *)&LEON4ItinerariesModel },
     446             :   { "hypersparc", (const void *)&NoSchedModel },
     447             :   { "leon2", (const void *)&LEON2ItinerariesModel },
     448             :   { "leon3", (const void *)&LEON3ItinerariesModel },
     449             :   { "leon4", (const void *)&LEON4ItinerariesModel },
     450             :   { "ma2080", (const void *)&NoSchedModel },
     451             :   { "ma2085", (const void *)&NoSchedModel },
     452             :   { "ma2100", (const void *)&NoSchedModel },
     453             :   { "ma2150", (const void *)&NoSchedModel },
     454             :   { "ma2155", (const void *)&NoSchedModel },
     455             :   { "ma2450", (const void *)&NoSchedModel },
     456             :   { "ma2455", (const void *)&NoSchedModel },
     457             :   { "ma2480", (const void *)&NoSchedModel },
     458             :   { "ma2485", (const void *)&NoSchedModel },
     459             :   { "ma2x5x", (const void *)&NoSchedModel },
     460             :   { "ma2x8x", (const void *)&NoSchedModel },
     461             :   { "myriad2", (const void *)&NoSchedModel },
     462             :   { "myriad2.1", (const void *)&NoSchedModel },
     463             :   { "myriad2.2", (const void *)&NoSchedModel },
     464             :   { "myriad2.3", (const void *)&NoSchedModel },
     465             :   { "niagara", (const void *)&NoSchedModel },
     466             :   { "niagara2", (const void *)&NoSchedModel },
     467             :   { "niagara3", (const void *)&NoSchedModel },
     468             :   { "niagara4", (const void *)&NoSchedModel },
     469             :   { "sparclet", (const void *)&NoSchedModel },
     470             :   { "sparclite", (const void *)&NoSchedModel },
     471             :   { "sparclite86x", (const void *)&NoSchedModel },
     472             :   { "supersparc", (const void *)&NoSchedModel },
     473             :   { "tsc701", (const void *)&NoSchedModel },
     474             :   { "ultrasparc", (const void *)&NoSchedModel },
     475             :   { "ultrasparc3", (const void *)&NoSchedModel },
     476             :   { "ut699", (const void *)&LEON3ItinerariesModel },
     477             :   { "v7", (const void *)&NoSchedModel },
     478             :   { "v8", (const void *)&NoSchedModel },
     479             :   { "v9", (const void *)&NoSchedModel },
     480             : };
     481             : 
     482             : #undef DBGFIELD
     483             : 
     484         283 : static inline MCSubtargetInfo *createSparcMCSubtargetInfoImpl(const Triple &TT, StringRef CPU, StringRef FS) {
     485             :   return new MCSubtargetInfo(TT, CPU, FS, SparcFeatureKV, SparcSubTypeKV, 
     486             :                       SparcProcSchedKV, SparcWriteProcResTable, SparcWriteLatencyTable, SparcReadAdvanceTable, 
     487         566 :                       SparcStages, SparcOperandCycles, SparcForwardingPaths);
     488             : }
     489             : 
     490             : } // end namespace llvm
     491             : 
     492             : #endif // GET_SUBTARGETINFO_MC_DESC
     493             : 
     494             : 
     495             : #ifdef GET_SUBTARGETINFO_TARGET_DESC
     496             : #undef GET_SUBTARGETINFO_TARGET_DESC
     497             : 
     498             : #include "llvm/Support/Debug.h"
     499             : #include "llvm/Support/raw_ostream.h"
     500             : 
     501             : // ParseSubtargetFeatures - Parses features string setting specified
     502             : // subtarget options.
     503         406 : void llvm::SparcSubtarget::ParseSubtargetFeatures(StringRef CPU, StringRef FS) {
     504             :   LLVM_DEBUG(dbgs() << "\nFeatures:" << FS);
     505             :   LLVM_DEBUG(dbgs() << "\nCPU:" << CPU << "\n\n");
     506         406 :   InitMCProcessorInfo(CPU, FS);
     507             :   const FeatureBitset& Bits = getFeatureBits();
     508         406 :   if (Bits[Sparc::DetectRoundChange]) DetectRoundChange = true;
     509         406 :   if (Bits[Sparc::FeatureHardQuad]) HasHardQuad = true;
     510         406 :   if (Bits[Sparc::FeatureLeon]) IsLeon = true;
     511         406 :   if (Bits[Sparc::FeatureNoFMULS]) HasNoFMULS = true;
     512         406 :   if (Bits[Sparc::FeatureNoFSMULD]) HasNoFSMULD = true;
     513         406 :   if (Bits[Sparc::FeatureSoftFloat]) UseSoftFloat = true;
     514         406 :   if (Bits[Sparc::FeatureSoftMulDiv]) UseSoftMulDiv = true;
     515         406 :   if (Bits[Sparc::FeatureV8Deprecated]) V8DeprecatedInsts = true;
     516         406 :   if (Bits[Sparc::FeatureV9]) IsV9 = true;
     517         406 :   if (Bits[Sparc::FeatureVIS]) IsVIS = true;
     518         406 :   if (Bits[Sparc::FeatureVIS2]) IsVIS2 = true;
     519         406 :   if (Bits[Sparc::FeatureVIS3]) IsVIS3 = true;
     520         406 :   if (Bits[Sparc::FixAllFDIVSQRT]) FixAllFDIVSQRT = true;
     521         406 :   if (Bits[Sparc::InsertNOPLoad]) InsertNOPLoad = true;
     522         406 :   if (Bits[Sparc::LeonCASA]) HasLeonCasa = true;
     523         406 :   if (Bits[Sparc::UMACSMACSupport]) HasUmacSmac = true;
     524         406 :   if (Bits[Sparc::UsePopc]) UsePopc = true;
     525         406 : }
     526             : #endif // GET_SUBTARGETINFO_TARGET_DESC
     527             : 
     528             : 
     529             : #ifdef GET_SUBTARGETINFO_HEADER
     530             : #undef GET_SUBTARGETINFO_HEADER
     531             : 
     532             : namespace llvm {
     533             : class DFAPacketizer;
     534         400 : struct SparcGenSubtargetInfo : public TargetSubtargetInfo {
     535             :   explicit SparcGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS);
     536             : public:
     537             :   unsigned resolveSchedClass(unsigned SchedClass,  const MachineInstr *DefMI, const TargetSchedModel *SchedModel) const override;
     538             :   DFAPacketizer *createDFAPacketizer(const InstrItineraryData *IID) const;
     539             : };
     540             : } // end namespace llvm
     541             : 
     542             : #endif // GET_SUBTARGETINFO_HEADER
     543             : 
     544             : 
     545             : #ifdef GET_SUBTARGETINFO_CTOR
     546             : #undef GET_SUBTARGETINFO_CTOR
     547             : 
     548             : #include "llvm/CodeGen/TargetSchedule.h"
     549             : 
     550             : namespace llvm {
     551             : extern const llvm::SubtargetFeatureKV SparcFeatureKV[];
     552             : extern const llvm::SubtargetFeatureKV SparcSubTypeKV[];
     553             : extern const llvm::SubtargetInfoKV SparcProcSchedKV[];
     554             : extern const llvm::MCWriteProcResEntry SparcWriteProcResTable[];
     555             : extern const llvm::MCWriteLatencyEntry SparcWriteLatencyTable[];
     556             : extern const llvm::MCReadAdvanceEntry SparcReadAdvanceTable[];
     557             : extern const llvm::InstrStage SparcStages[];
     558             : extern const unsigned SparcOperandCycles[];
     559             : extern const unsigned SparcForwardingPaths[];
     560         406 : SparcGenSubtargetInfo::SparcGenSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS)
     561             :   : TargetSubtargetInfo(TT, CPU, FS, makeArrayRef(SparcFeatureKV, 17), makeArrayRef(SparcSubTypeKV, 40), 
     562             :                         SparcProcSchedKV, SparcWriteProcResTable, SparcWriteLatencyTable, SparcReadAdvanceTable, 
     563         406 :                         SparcStages, SparcOperandCycles, SparcForwardingPaths) {}
     564             : 
     565           0 : unsigned SparcGenSubtargetInfo
     566             : ::resolveSchedClass(unsigned SchedClass, const MachineInstr *MI, const TargetSchedModel *SchedModel) const {
     567           0 :   report_fatal_error("Expected a variant SchedClass");
     568             : } // SparcGenSubtargetInfo::resolveSchedClass
     569             : } // end namespace llvm
     570             : 
     571             : #endif // GET_SUBTARGETINFO_CTOR
     572             : 

Generated by: LCOV version 1.13