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

Generated by: LCOV version 1.13