621 lines
24 KiB
C++
621 lines
24 KiB
C++
//===- TableGen'erated file -------------------------------------*- C++ -*-===//
|
|
//
|
|
// Subtarget Enumeration Source Fragment
|
|
//
|
|
// Automatically generated file, do not edit!
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/Debug.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
#include "llvm/Target/SubtargetFeature.h"
|
|
#include "llvm/Target/TargetInstrItineraries.h"
|
|
|
|
enum {
|
|
Directive32 = 1 << 0,
|
|
Directive64 = 1 << 1,
|
|
Directive601 = 1 << 2,
|
|
Directive602 = 1 << 3,
|
|
Directive603 = 1 << 4,
|
|
Directive604 = 1 << 5,
|
|
Directive620 = 1 << 6,
|
|
Directive750 = 1 << 7,
|
|
Directive970 = 1 << 8,
|
|
Directive7400 = 1 << 9,
|
|
Feature64Bit = 1 << 10,
|
|
Feature64BitRegs = 1 << 11,
|
|
FeatureAltivec = 1 << 12,
|
|
FeatureFSqrt = 1 << 13,
|
|
FeatureGPUL = 1 << 14,
|
|
FeatureSTFIWX = 1 << 15
|
|
};
|
|
|
|
// Sorted (by key) array of values for CPU features.
|
|
static const llvm::SubtargetFeatureKV FeatureKV[] = {
|
|
{ "64bit", "Enable 64-bit instructions", Feature64Bit, 0 },
|
|
{ "64bitregs", "Enable 64-bit registers usage for ppc32 [beta]", Feature64BitRegs, 0 },
|
|
{ "altivec", "Enable Altivec instructions", FeatureAltivec, 0 },
|
|
{ "fsqrt", "Enable the fsqrt instruction", FeatureFSqrt, 0 },
|
|
{ "gpul", "Enable GPUL instructions", FeatureGPUL, 0 },
|
|
{ "stfiwx", "Enable the stfiwx instruction", FeatureSTFIWX, 0 }
|
|
};
|
|
|
|
enum {
|
|
FeatureKVSize = sizeof(FeatureKV)/sizeof(llvm::SubtargetFeatureKV)
|
|
};
|
|
|
|
// Sorted (by key) array of values for CPU subtype.
|
|
static const llvm::SubtargetFeatureKV SubTypeKV[] = {
|
|
{ "601", "Select the 601 processor", Directive601, 0 },
|
|
{ "602", "Select the 602 processor", Directive602, 0 },
|
|
{ "603", "Select the 603 processor", Directive603, 0 },
|
|
{ "603e", "Select the 603e processor", Directive603, 0 },
|
|
{ "603ev", "Select the 603ev processor", Directive603, 0 },
|
|
{ "604", "Select the 604 processor", Directive604, 0 },
|
|
{ "604e", "Select the 604e processor", Directive604, 0 },
|
|
{ "620", "Select the 620 processor", Directive620, 0 },
|
|
{ "7400", "Select the 7400 processor", Directive7400 | FeatureAltivec, 0 },
|
|
{ "7450", "Select the 7450 processor", Directive7400 | FeatureAltivec, 0 },
|
|
{ "750", "Select the 750 processor", Directive750 | FeatureAltivec, 0 },
|
|
{ "970", "Select the 970 processor", Directive970 | FeatureAltivec | FeatureGPUL | FeatureFSqrt | FeatureSTFIWX | Feature64Bit, 0 },
|
|
{ "g3", "Select the g3 processor", Directive7400, 0 },
|
|
{ "g4", "Select the g4 processor", Directive7400 | FeatureAltivec, 0 },
|
|
{ "g4+", "Select the g4+ processor", Directive750 | FeatureAltivec, 0 },
|
|
{ "g5", "Select the g5 processor", Directive970 | FeatureAltivec | FeatureGPUL | FeatureFSqrt | FeatureSTFIWX | Feature64Bit, 0 },
|
|
{ "generic", "Select the generic processor", Directive32, 0 },
|
|
{ "ppc", "Select the ppc processor", Directive32, 0 },
|
|
{ "ppc64", "Select the ppc64 processor", Directive64 | FeatureAltivec | FeatureGPUL | FeatureFSqrt | FeatureSTFIWX | Feature64Bit, 0 }
|
|
};
|
|
|
|
enum {
|
|
SubTypeKVSize = sizeof(SubTypeKV)/sizeof(llvm::SubtargetFeatureKV)
|
|
};
|
|
|
|
|
|
enum {
|
|
ItinClassesSize = 74
|
|
};
|
|
|
|
// Functional units for itineraries "G3Itineraries"
|
|
namespace G3ItinerariesFU {
|
|
const unsigned IU1 = 1 << 0;
|
|
const unsigned IU2 = 1 << 1;
|
|
const unsigned FPU1 = 1 << 2;
|
|
const unsigned BPU = 1 << 3;
|
|
const unsigned SRU = 1 << 4;
|
|
const unsigned SLU = 1 << 5;
|
|
}
|
|
|
|
// Functional units for itineraries "G4Itineraries"
|
|
namespace G4ItinerariesFU {
|
|
const unsigned IU1 = 1 << 0;
|
|
const unsigned IU2 = 1 << 1;
|
|
const unsigned SLU = 1 << 2;
|
|
const unsigned SRU = 1 << 3;
|
|
const unsigned BPU = 1 << 4;
|
|
const unsigned FPU1 = 1 << 5;
|
|
const unsigned VIU1 = 1 << 6;
|
|
const unsigned VIU2 = 1 << 7;
|
|
const unsigned VPU = 1 << 8;
|
|
const unsigned VFPU = 1 << 9;
|
|
}
|
|
|
|
// Functional units for itineraries "G4PlusItineraries"
|
|
namespace G4PlusItinerariesFU {
|
|
const unsigned IU1 = 1 << 0;
|
|
const unsigned IU2 = 1 << 1;
|
|
const unsigned IU3 = 1 << 2;
|
|
const unsigned IU4 = 1 << 3;
|
|
const unsigned BPU = 1 << 4;
|
|
const unsigned SLU = 1 << 5;
|
|
const unsigned FPU1 = 1 << 6;
|
|
const unsigned VFPU = 1 << 7;
|
|
const unsigned VIU1 = 1 << 8;
|
|
const unsigned VIU2 = 1 << 9;
|
|
const unsigned VPU = 1 << 10;
|
|
}
|
|
|
|
// Functional units for itineraries "G5Itineraries"
|
|
namespace G5ItinerariesFU {
|
|
const unsigned IU1 = 1 << 0;
|
|
const unsigned IU2 = 1 << 1;
|
|
const unsigned SLU = 1 << 2;
|
|
const unsigned BPU = 1 << 3;
|
|
const unsigned FPU1 = 1 << 4;
|
|
const unsigned FPU2 = 1 << 5;
|
|
const unsigned VFPU = 1 << 6;
|
|
const unsigned VIU1 = 1 << 7;
|
|
const unsigned VIU2 = 1 << 8;
|
|
const unsigned VPU = 1 << 9;
|
|
}
|
|
|
|
static const llvm::InstrStage Stages[] = {
|
|
{ 0, 0, 0, llvm::InstrStage::Required }, // No itinerary
|
|
{ 1, G3ItinerariesFU::IU1 | G3ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 1
|
|
{ 19, G3ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 2
|
|
{ 1, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 3
|
|
{ 3, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 4
|
|
{ 5, G3ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 5
|
|
{ 6, G3ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 6
|
|
{ 3, G3ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 7
|
|
{ 2, G3ItinerariesFU::IU1 | G3ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 8
|
|
{ 1, G3ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 9
|
|
{ 1, G3ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 10
|
|
{ 2, G3ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 11
|
|
{ 3, G3ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 12
|
|
{ 34, G3ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 13
|
|
{ 8, G3ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 14
|
|
{ 2, G3ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 15
|
|
{ 3, G3ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 16
|
|
{ 31, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 17
|
|
{ 17, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 18
|
|
{ 2, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 19
|
|
{ 10, G3ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 20
|
|
{ 1, G4ItinerariesFU::IU1 | G4ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 21
|
|
{ 19, G4ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 22
|
|
{ 3, G4ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 23
|
|
{ 1, G4ItinerariesFU::VIU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 24
|
|
{ 5, G4ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 25
|
|
{ 6, G4ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 26
|
|
{ 3, G4ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 27
|
|
{ 2, G4ItinerariesFU::IU1 | G4ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 28
|
|
{ 1, G4ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 29
|
|
{ 1, G4ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 30
|
|
{ 2, G4ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 31
|
|
{ 34, G4ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 32
|
|
{ 3, G4ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 33
|
|
{ 5, G4ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 34
|
|
{ 8, G4ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 35
|
|
{ 2, G4ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 36
|
|
{ 3, G4ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 37
|
|
{ 8, G4ItinerariesFU::SRU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 38
|
|
{ 1, G4ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 39
|
|
{ 31, G4ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 40
|
|
{ 17, G4ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 41
|
|
{ 10, G4ItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 42
|
|
{ 4, G4ItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 43
|
|
{ 3, G4ItinerariesFU::VIU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 44
|
|
{ 1, G4ItinerariesFU::VPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 45
|
|
{ 1, G4PlusItinerariesFU::IU1 | G4PlusItinerariesFU::IU2 | G4PlusItinerariesFU::IU3 | G4PlusItinerariesFU::IU4, -1, (llvm::InstrStage::ReservationKinds)0 }, // 46
|
|
{ 23, G4PlusItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 47
|
|
{ 5, G4PlusItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 48
|
|
{ 2, G4PlusItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 49
|
|
{ 4, G4PlusItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 50
|
|
{ 3, G4PlusItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 51
|
|
{ 2, G4PlusItinerariesFU::IU1 | G4PlusItinerariesFU::IU2 | G4PlusItinerariesFU::IU3 | G4PlusItinerariesFU::IU4, -1, (llvm::InstrStage::ReservationKinds)0 }, // 52
|
|
{ 1, G4PlusItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 53
|
|
{ 2, G4PlusItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 54
|
|
{ 3, G4PlusItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 55
|
|
{ 4, G4PlusItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 56
|
|
{ 37, G4PlusItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 57
|
|
{ 35, G4PlusItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 58
|
|
{ 0, G4PlusItinerariesFU::IU1 | G4PlusItinerariesFU::IU2 | G4PlusItinerariesFU::IU3 | G4PlusItinerariesFU::IU4, -1, (llvm::InstrStage::ReservationKinds)0 }, // 59
|
|
{ 5, G4PlusItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 60
|
|
{ 35, G4PlusItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 61
|
|
{ 21, G4PlusItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 62
|
|
{ 14, G4PlusItinerariesFU::FPU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 63
|
|
{ 1, G4PlusItinerariesFU::VIU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 64
|
|
{ 4, G4PlusItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 65
|
|
{ 4, G4PlusItinerariesFU::VIU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 66
|
|
{ 2, G4PlusItinerariesFU::VPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 67
|
|
{ 4, G4PlusItinerariesFU::VIU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 68
|
|
{ 2, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 69
|
|
{ 3, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 70
|
|
{ 68, G5ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 71
|
|
{ 36, G5ItinerariesFU::IU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 72
|
|
{ 6, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 73
|
|
{ 1, G5ItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 74
|
|
{ 6, G5ItinerariesFU::FPU1 | G5ItinerariesFU::FPU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 75
|
|
{ 7, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 76
|
|
{ 5, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 77
|
|
{ 4, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 78
|
|
{ 1, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 79
|
|
{ 1, G5ItinerariesFU::IU1 | G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 80
|
|
{ 1, G5ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 81
|
|
{ 4, G5ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 82
|
|
{ 2, G5ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 83
|
|
{ 3, G5ItinerariesFU::BPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 84
|
|
{ 3, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 85
|
|
{ 10, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 86
|
|
{ 40, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 87
|
|
{ 4, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 88
|
|
{ 11, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 89
|
|
{ 5, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 90
|
|
{ 64, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 91
|
|
{ 2, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 92
|
|
{ 35, G5ItinerariesFU::SLU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 93
|
|
{ 2, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 94
|
|
{ 3, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 95
|
|
{ 10, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 96
|
|
{ 8, G5ItinerariesFU::IU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 97
|
|
{ 8, G5ItinerariesFU::FPU1 | G5ItinerariesFU::FPU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 98
|
|
{ 33, G5ItinerariesFU::FPU1 | G5ItinerariesFU::FPU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 99
|
|
{ 40, G5ItinerariesFU::FPU1 | G5ItinerariesFU::FPU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 100
|
|
{ 2, G5ItinerariesFU::VIU1, -1, (llvm::InstrStage::ReservationKinds)0 }, // 101
|
|
{ 8, G5ItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 102
|
|
{ 2, G5ItinerariesFU::VFPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 103
|
|
{ 5, G5ItinerariesFU::VIU2, -1, (llvm::InstrStage::ReservationKinds)0 }, // 104
|
|
{ 3, G5ItinerariesFU::VPU, -1, (llvm::InstrStage::ReservationKinds)0 }, // 105
|
|
{ 0, 0, 0, llvm::InstrStage::Required } // End itinerary
|
|
};
|
|
static const unsigned OperandCycles[] = {
|
|
0, // No itinerary
|
|
0 // End itinerary
|
|
};
|
|
|
|
enum {
|
|
StagesSize = sizeof(Stages)/sizeof(llvm::InstrStage),
|
|
OperandCyclesSize = sizeof(OperandCycles)/sizeof(unsigned)
|
|
};
|
|
|
|
static const llvm::InstrItinerary G3Itineraries[] = {
|
|
{ 9, 10, 0, 0 }, // 0
|
|
{ 10, 11, 0, 0 }, // 1
|
|
{ 10, 11, 0, 0 }, // 2
|
|
{ 10, 11, 0, 0 }, // 3
|
|
{ 3, 4, 0, 0 }, // 4
|
|
{ 17, 18, 0, 0 }, // 5
|
|
{ 18, 19, 0, 0 }, // 6
|
|
{ 19, 20, 0, 0 }, // 7
|
|
{ 3, 4, 0, 0 }, // 8
|
|
{ 20, 21, 0, 0 }, // 9
|
|
{ 0, 0, 0, 0 }, // 10
|
|
{ 1, 2, 0, 0 }, // 11
|
|
{ 0, 0, 0, 0 }, // 12
|
|
{ 2, 3, 0, 0 }, // 13
|
|
{ 1, 2, 0, 0 }, // 14
|
|
{ 3, 4, 0, 0 }, // 15
|
|
{ 0, 0, 0, 0 }, // 16
|
|
{ 4, 5, 0, 0 }, // 17
|
|
{ 0, 0, 0, 0 }, // 18
|
|
{ 0, 0, 0, 0 }, // 19
|
|
{ 5, 6, 0, 0 }, // 20
|
|
{ 6, 7, 0, 0 }, // 21
|
|
{ 7, 8, 0, 0 }, // 22
|
|
{ 0, 0, 0, 0 }, // 23
|
|
{ 1, 2, 0, 0 }, // 24
|
|
{ 0, 0, 0, 0 }, // 25
|
|
{ 1, 2, 0, 0 }, // 26
|
|
{ 0, 0, 0, 0 }, // 27
|
|
{ 8, 9, 0, 0 }, // 28
|
|
{ 11, 12, 0, 0 }, // 29
|
|
{ 12, 13, 0, 0 }, // 30
|
|
{ 12, 13, 0, 0 }, // 31
|
|
{ 0, 0, 0, 0 }, // 32
|
|
{ 11, 12, 0, 0 }, // 33
|
|
{ 12, 13, 0, 0 }, // 34
|
|
{ 0, 0, 0, 0 }, // 35
|
|
{ 0, 0, 0, 0 }, // 36
|
|
{ 11, 12, 0, 0 }, // 37
|
|
{ 11, 12, 0, 0 }, // 38
|
|
{ 11, 12, 0, 0 }, // 39
|
|
{ 13, 14, 0, 0 }, // 40
|
|
{ 0, 0, 0, 0 }, // 41
|
|
{ 0, 0, 0, 0 }, // 42
|
|
{ 12, 13, 0, 0 }, // 43
|
|
{ 0, 0, 0, 0 }, // 44
|
|
{ 0, 0, 0, 0 }, // 45
|
|
{ 0, 0, 0, 0 }, // 46
|
|
{ 0, 0, 0, 0 }, // 47
|
|
{ 0, 0, 0, 0 }, // 48
|
|
{ 14, 15, 0, 0 }, // 49
|
|
{ 12, 13, 0, 0 }, // 50
|
|
{ 11, 12, 0, 0 }, // 51
|
|
{ 0, 0, 0, 0 }, // 52
|
|
{ 15, 16, 0, 0 }, // 53
|
|
{ 10, 11, 0, 0 }, // 54
|
|
{ 10, 11, 0, 0 }, // 55
|
|
{ 16, 17, 0, 0 }, // 56
|
|
{ 16, 17, 0, 0 }, // 57
|
|
{ 16, 17, 0, 0 }, // 58
|
|
{ 10, 11, 0, 0 }, // 59
|
|
{ 15, 16, 0, 0 }, // 60
|
|
{ 15, 16, 0, 0 }, // 61
|
|
{ 15, 16, 0, 0 }, // 62
|
|
{ 15, 16, 0, 0 }, // 63
|
|
{ 15, 16, 0, 0 }, // 64
|
|
{ 16, 17, 0, 0 }, // 65
|
|
{ 0, 0, 0, 0 }, // 66
|
|
{ 0, 0, 0, 0 }, // 67
|
|
{ 0, 0, 0, 0 }, // 68
|
|
{ 0, 0, 0, 0 }, // 69
|
|
{ 0, 0, 0, 0 }, // 70
|
|
{ 0, 0, 0, 0 }, // 71
|
|
{ 0, 0, 0, 0 }, // 72
|
|
{ 0, 0, 0, 0 }, // 73
|
|
{ ~0U, ~0U, ~0U, ~0U } // end marker
|
|
};
|
|
|
|
static const llvm::InstrItinerary G4Itineraries[] = {
|
|
{ 29, 30, 0, 0 }, // 0
|
|
{ 30, 31, 0, 0 }, // 1
|
|
{ 30, 31, 0, 0 }, // 2
|
|
{ 30, 31, 0, 0 }, // 3
|
|
{ 39, 40, 0, 0 }, // 4
|
|
{ 40, 41, 0, 0 }, // 5
|
|
{ 41, 42, 0, 0 }, // 6
|
|
{ 39, 40, 0, 0 }, // 7
|
|
{ 39, 40, 0, 0 }, // 8
|
|
{ 42, 43, 0, 0 }, // 9
|
|
{ 0, 0, 0, 0 }, // 10
|
|
{ 21, 22, 0, 0 }, // 11
|
|
{ 0, 0, 0, 0 }, // 12
|
|
{ 22, 23, 0, 0 }, // 13
|
|
{ 21, 22, 0, 0 }, // 14
|
|
{ 23, 24, 0, 0 }, // 15
|
|
{ 24, 25, 0, 0 }, // 16
|
|
{ 23, 24, 0, 0 }, // 17
|
|
{ 0, 0, 0, 0 }, // 18
|
|
{ 0, 0, 0, 0 }, // 19
|
|
{ 25, 26, 0, 0 }, // 20
|
|
{ 26, 27, 0, 0 }, // 21
|
|
{ 27, 28, 0, 0 }, // 22
|
|
{ 0, 0, 0, 0 }, // 23
|
|
{ 21, 22, 0, 0 }, // 24
|
|
{ 0, 0, 0, 0 }, // 25
|
|
{ 21, 22, 0, 0 }, // 26
|
|
{ 0, 0, 0, 0 }, // 27
|
|
{ 28, 29, 0, 0 }, // 28
|
|
{ 0, 0, 0, 0 }, // 29
|
|
{ 31, 32, 0, 0 }, // 30
|
|
{ 31, 32, 0, 0 }, // 31
|
|
{ 31, 32, 0, 0 }, // 32
|
|
{ 31, 32, 0, 0 }, // 33
|
|
{ 31, 32, 0, 0 }, // 34
|
|
{ 0, 0, 0, 0 }, // 35
|
|
{ 0, 0, 0, 0 }, // 36
|
|
{ 31, 32, 0, 0 }, // 37
|
|
{ 31, 32, 0, 0 }, // 38
|
|
{ 31, 32, 0, 0 }, // 39
|
|
{ 32, 33, 0, 0 }, // 40
|
|
{ 31, 32, 0, 0 }, // 41
|
|
{ 0, 0, 0, 0 }, // 42
|
|
{ 33, 34, 0, 0 }, // 43
|
|
{ 0, 0, 0, 0 }, // 44
|
|
{ 0, 0, 0, 0 }, // 45
|
|
{ 0, 0, 0, 0 }, // 46
|
|
{ 0, 0, 0, 0 }, // 47
|
|
{ 31, 32, 0, 0 }, // 48
|
|
{ 34, 35, 0, 0 }, // 49
|
|
{ 35, 36, 0, 0 }, // 50
|
|
{ 31, 32, 0, 0 }, // 51
|
|
{ 0, 0, 0, 0 }, // 52
|
|
{ 36, 37, 0, 0 }, // 53
|
|
{ 30, 31, 0, 0 }, // 54
|
|
{ 30, 31, 0, 0 }, // 55
|
|
{ 37, 38, 0, 0 }, // 56
|
|
{ 37, 38, 0, 0 }, // 57
|
|
{ 30, 31, 0, 0 }, // 58
|
|
{ 30, 31, 0, 0 }, // 59
|
|
{ 36, 37, 0, 0 }, // 60
|
|
{ 36, 37, 0, 0 }, // 61
|
|
{ 36, 37, 0, 0 }, // 62
|
|
{ 36, 37, 0, 0 }, // 63
|
|
{ 36, 37, 0, 0 }, // 64
|
|
{ 38, 39, 0, 0 }, // 65
|
|
{ 44, 45, 0, 0 }, // 66
|
|
{ 43, 44, 0, 0 }, // 67
|
|
{ 24, 25, 0, 0 }, // 68
|
|
{ 43, 44, 0, 0 }, // 69
|
|
{ 24, 25, 0, 0 }, // 70
|
|
{ 45, 46, 0, 0 }, // 71
|
|
{ 24, 25, 0, 0 }, // 72
|
|
{ 24, 25, 0, 0 }, // 73
|
|
{ ~0U, ~0U, ~0U, ~0U } // end marker
|
|
};
|
|
|
|
static const llvm::InstrItinerary G4PlusItineraries[] = {
|
|
{ 53, 54, 0, 0 }, // 0
|
|
{ 54, 55, 0, 0 }, // 1
|
|
{ 54, 55, 0, 0 }, // 2
|
|
{ 54, 55, 0, 0 }, // 3
|
|
{ 48, 49, 0, 0 }, // 4
|
|
{ 61, 62, 0, 0 }, // 5
|
|
{ 62, 63, 0, 0 }, // 6
|
|
{ 48, 49, 0, 0 }, // 7
|
|
{ 48, 49, 0, 0 }, // 8
|
|
{ 63, 64, 0, 0 }, // 9
|
|
{ 0, 0, 0, 0 }, // 10
|
|
{ 46, 47, 0, 0 }, // 11
|
|
{ 0, 0, 0, 0 }, // 12
|
|
{ 47, 48, 0, 0 }, // 13
|
|
{ 46, 47, 0, 0 }, // 14
|
|
{ 48, 49, 0, 0 }, // 15
|
|
{ 49, 50, 0, 0 }, // 16
|
|
{ 48, 49, 0, 0 }, // 17
|
|
{ 0, 0, 0, 0 }, // 18
|
|
{ 0, 0, 0, 0 }, // 19
|
|
{ 50, 51, 0, 0 }, // 20
|
|
{ 50, 51, 0, 0 }, // 21
|
|
{ 51, 52, 0, 0 }, // 22
|
|
{ 0, 0, 0, 0 }, // 23
|
|
{ 46, 47, 0, 0 }, // 24
|
|
{ 0, 0, 0, 0 }, // 25
|
|
{ 52, 53, 0, 0 }, // 26
|
|
{ 0, 0, 0, 0 }, // 27
|
|
{ 52, 53, 0, 0 }, // 28
|
|
{ 0, 0, 0, 0 }, // 29
|
|
{ 55, 56, 0, 0 }, // 30
|
|
{ 55, 56, 0, 0 }, // 31
|
|
{ 55, 56, 0, 0 }, // 32
|
|
{ 55, 56, 0, 0 }, // 33
|
|
{ 51, 52, 0, 0 }, // 34
|
|
{ 0, 0, 0, 0 }, // 35
|
|
{ 0, 0, 0, 0 }, // 36
|
|
{ 56, 57, 0, 0 }, // 37
|
|
{ 56, 57, 0, 0 }, // 38
|
|
{ 55, 56, 0, 0 }, // 39
|
|
{ 57, 58, 0, 0 }, // 40
|
|
{ 55, 56, 0, 0 }, // 41
|
|
{ 55, 56, 0, 0 }, // 42
|
|
{ 55, 56, 0, 0 }, // 43
|
|
{ 0, 0, 0, 0 }, // 44
|
|
{ 0, 0, 0, 0 }, // 45
|
|
{ 55, 56, 0, 0 }, // 46
|
|
{ 55, 56, 0, 0 }, // 47
|
|
{ 55, 56, 0, 0 }, // 48
|
|
{ 55, 56, 0, 0 }, // 49
|
|
{ 58, 59, 0, 0 }, // 50
|
|
{ 55, 56, 0, 0 }, // 51
|
|
{ 0, 0, 0, 0 }, // 52
|
|
{ 59, 60, 0, 0 }, // 53
|
|
{ 54, 55, 0, 0 }, // 54
|
|
{ 51, 52, 0, 0 }, // 55
|
|
{ 50, 51, 0, 0 }, // 56
|
|
{ 50, 51, 0, 0 }, // 57
|
|
{ 60, 61, 0, 0 }, // 58
|
|
{ 54, 55, 0, 0 }, // 59
|
|
{ 54, 55, 0, 0 }, // 60
|
|
{ 54, 55, 0, 0 }, // 61
|
|
{ 54, 55, 0, 0 }, // 62
|
|
{ 46, 47, 0, 0 }, // 63
|
|
{ 59, 60, 0, 0 }, // 64
|
|
{ 55, 56, 0, 0 }, // 65
|
|
{ 66, 67, 0, 0 }, // 66
|
|
{ 65, 66, 0, 0 }, // 67
|
|
{ 49, 50, 0, 0 }, // 68
|
|
{ 68, 69, 0, 0 }, // 69
|
|
{ 64, 65, 0, 0 }, // 70
|
|
{ 67, 68, 0, 0 }, // 71
|
|
{ 67, 68, 0, 0 }, // 72
|
|
{ 67, 68, 0, 0 }, // 73
|
|
{ ~0U, ~0U, ~0U, ~0U } // end marker
|
|
};
|
|
|
|
static const llvm::InstrItinerary G5Itineraries[] = {
|
|
{ 81, 82, 0, 0 }, // 0
|
|
{ 82, 83, 0, 0 }, // 1
|
|
{ 83, 84, 0, 0 }, // 2
|
|
{ 84, 85, 0, 0 }, // 3
|
|
{ 98, 99, 0, 0 }, // 4
|
|
{ 99, 100, 0, 0 }, // 5
|
|
{ 99, 100, 0, 0 }, // 6
|
|
{ 75, 76, 0, 0 }, // 7
|
|
{ 75, 76, 0, 0 }, // 8
|
|
{ 75, 76, 0, 0 }, // 9
|
|
{ 100, 101, 0, 0 }, // 10
|
|
{ 70, 71, 0, 0 }, // 11
|
|
{ 71, 72, 0, 0 }, // 12
|
|
{ 72, 73, 0, 0 }, // 13
|
|
{ 69, 70, 0, 0 }, // 14
|
|
{ 73, 74, 0, 0 }, // 15
|
|
{ 74, 75, 0, 0 }, // 16
|
|
{ 75, 76, 0, 0 }, // 17
|
|
{ 0, 0, 0, 0 }, // 18
|
|
{ 76, 77, 0, 0 }, // 19
|
|
{ 77, 78, 0, 0 }, // 20
|
|
{ 77, 78, 0, 0 }, // 21
|
|
{ 78, 79, 0, 0 }, // 22
|
|
{ 79, 80, 0, 0 }, // 23
|
|
{ 78, 79, 0, 0 }, // 24
|
|
{ 69, 70, 0, 0 }, // 25
|
|
{ 69, 70, 0, 0 }, // 26
|
|
{ 80, 81, 0, 0 }, // 27
|
|
{ 80, 81, 0, 0 }, // 28
|
|
{ 0, 0, 0, 0 }, // 29
|
|
{ 85, 86, 0, 0 }, // 30
|
|
{ 0, 0, 0, 0 }, // 31
|
|
{ 86, 87, 0, 0 }, // 32
|
|
{ 85, 86, 0, 0 }, // 33
|
|
{ 87, 88, 0, 0 }, // 34
|
|
{ 85, 86, 0, 0 }, // 35
|
|
{ 89, 90, 0, 0 }, // 36
|
|
{ 85, 86, 0, 0 }, // 37
|
|
{ 90, 91, 0, 0 }, // 38
|
|
{ 90, 91, 0, 0 }, // 39
|
|
{ 91, 92, 0, 0 }, // 40
|
|
{ 85, 86, 0, 0 }, // 41
|
|
{ 90, 91, 0, 0 }, // 42
|
|
{ 89, 90, 0, 0 }, // 43
|
|
{ 87, 88, 0, 0 }, // 44
|
|
{ 92, 93, 0, 0 }, // 45
|
|
{ 85, 86, 0, 0 }, // 46
|
|
{ 89, 90, 0, 0 }, // 47
|
|
{ 90, 91, 0, 0 }, // 48
|
|
{ 89, 90, 0, 0 }, // 49
|
|
{ 93, 94, 0, 0 }, // 50
|
|
{ 88, 89, 0, 0 }, // 51
|
|
{ 0, 0, 0, 0 }, // 52
|
|
{ 87, 88, 0, 0 }, // 53
|
|
{ 94, 95, 0, 0 }, // 54
|
|
{ 95, 96, 0, 0 }, // 55
|
|
{ 95, 96, 0, 0 }, // 56
|
|
{ 85, 86, 0, 0 }, // 57
|
|
{ 96, 97, 0, 0 }, // 58
|
|
{ 85, 86, 0, 0 }, // 59
|
|
{ 97, 98, 0, 0 }, // 60
|
|
{ 85, 86, 0, 0 }, // 61
|
|
{ 0, 0, 0, 0 }, // 62
|
|
{ 0, 0, 0, 0 }, // 63
|
|
{ 79, 80, 0, 0 }, // 64
|
|
{ 85, 86, 0, 0 }, // 65
|
|
{ 104, 105, 0, 0 }, // 66
|
|
{ 102, 103, 0, 0 }, // 67
|
|
{ 103, 104, 0, 0 }, // 68
|
|
{ 102, 103, 0, 0 }, // 69
|
|
{ 101, 102, 0, 0 }, // 70
|
|
{ 105, 106, 0, 0 }, // 71
|
|
{ 101, 102, 0, 0 }, // 72
|
|
{ 105, 106, 0, 0 }, // 73
|
|
{ ~0U, ~0U, ~0U, ~0U } // end marker
|
|
};
|
|
|
|
// Sorted (by key) array of itineraries for CPU subtype.
|
|
static const llvm::SubtargetInfoKV ProcItinKV[] = {
|
|
{ "601", (void *)&G3Itineraries },
|
|
{ "602", (void *)&G3Itineraries },
|
|
{ "603", (void *)&G3Itineraries },
|
|
{ "603e", (void *)&G3Itineraries },
|
|
{ "603ev", (void *)&G3Itineraries },
|
|
{ "604", (void *)&G3Itineraries },
|
|
{ "604e", (void *)&G3Itineraries },
|
|
{ "620", (void *)&G3Itineraries },
|
|
{ "7400", (void *)&G4Itineraries },
|
|
{ "7450", (void *)&G4PlusItineraries },
|
|
{ "750", (void *)&G4Itineraries },
|
|
{ "970", (void *)&G5Itineraries },
|
|
{ "g3", (void *)&G3Itineraries },
|
|
{ "g4", (void *)&G4Itineraries },
|
|
{ "g4+", (void *)&G4PlusItineraries },
|
|
{ "g5", (void *)&G5Itineraries },
|
|
{ "generic", (void *)&G3Itineraries },
|
|
{ "ppc", (void *)&G3Itineraries },
|
|
{ "ppc64", (void *)&G5Itineraries }
|
|
};
|
|
|
|
enum {
|
|
ProcItinKVSize = sizeof(ProcItinKV)/sizeof(llvm::SubtargetInfoKV)
|
|
};
|
|
|
|
// ParseSubtargetFeatures - Parses features string setting specified
|
|
// subtarget options.
|
|
std::string llvm::PPCSubtarget::ParseSubtargetFeatures(const std::string &FS,
|
|
const std::string &CPU) {
|
|
DEBUG(dbgs() << "\nFeatures:" << FS);
|
|
DEBUG(dbgs() << "\nCPU:" << CPU);
|
|
SubtargetFeatures Features(FS);
|
|
Features.setCPUIfNone(CPU);
|
|
uint32_t Bits = Features.getBits(SubTypeKV, SubTypeKVSize,
|
|
FeatureKV, FeatureKVSize);
|
|
if ((Bits & Directive32) != 0 && DarwinDirective < PPC::DIR_32) DarwinDirective = PPC::DIR_32;
|
|
if ((Bits & Directive64) != 0 && DarwinDirective < PPC::DIR_64) DarwinDirective = PPC::DIR_64;
|
|
if ((Bits & Directive601) != 0 && DarwinDirective < PPC::DIR_601) DarwinDirective = PPC::DIR_601;
|
|
if ((Bits & Directive602) != 0 && DarwinDirective < PPC::DIR_602) DarwinDirective = PPC::DIR_602;
|
|
if ((Bits & Directive603) != 0 && DarwinDirective < PPC::DIR_603) DarwinDirective = PPC::DIR_603;
|
|
if ((Bits & Directive604) != 0 && DarwinDirective < PPC::DIR_603) DarwinDirective = PPC::DIR_603;
|
|
if ((Bits & Directive620) != 0 && DarwinDirective < PPC::DIR_603) DarwinDirective = PPC::DIR_603;
|
|
if ((Bits & Directive750) != 0 && DarwinDirective < PPC::DIR_750) DarwinDirective = PPC::DIR_750;
|
|
if ((Bits & Directive970) != 0 && DarwinDirective < PPC::DIR_970) DarwinDirective = PPC::DIR_970;
|
|
if ((Bits & Directive7400) != 0 && DarwinDirective < PPC::DIR_7400) DarwinDirective = PPC::DIR_7400;
|
|
if ((Bits & Feature64Bit) != 0) Has64BitSupport = true;
|
|
if ((Bits & Feature64BitRegs) != 0) Use64BitRegs = true;
|
|
if ((Bits & FeatureAltivec) != 0) HasAltivec = true;
|
|
if ((Bits & FeatureFSqrt) != 0) HasFSQRT = true;
|
|
if ((Bits & FeatureGPUL) != 0) IsGigaProcessor = true;
|
|
if ((Bits & FeatureSTFIWX) != 0) HasSTFIWX = true;
|
|
|
|
InstrItinerary *Itinerary = (InstrItinerary *)Features.getInfo(ProcItinKV, ProcItinKVSize);
|
|
InstrItins = InstrItineraryData(Stages, OperandCycles, Itinerary);
|
|
return Features.getCPU();
|
|
}
|