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

Generated by: LCOV version 1.13