1*0fca6ea1SDimitry Andricclass ProcNoItin<string Name, list<SubtargetFeature> Features> 2*0fca6ea1SDimitry Andric : Processor<Name, NoItineraries, Features>; 3*0fca6ea1SDimitry Andric 4*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 5*0fca6ea1SDimitry Andric// ARM Processor subtarget features. 6*0fca6ea1SDimitry Andric// 7*0fca6ea1SDimitry Andric 8*0fca6ea1SDimitry Andricdef ProcA5 : SubtargetFeature<"a5", "ARMProcFamily", "CortexA5", 9*0fca6ea1SDimitry Andric "Cortex-A5 ARM processors", []>; 10*0fca6ea1SDimitry Andricdef ProcA7 : SubtargetFeature<"a7", "ARMProcFamily", "CortexA7", 11*0fca6ea1SDimitry Andric "Cortex-A7 ARM processors", []>; 12*0fca6ea1SDimitry Andricdef ProcA8 : SubtargetFeature<"a8", "ARMProcFamily", "CortexA8", 13*0fca6ea1SDimitry Andric "Cortex-A8 ARM processors", []>; 14*0fca6ea1SDimitry Andricdef ProcA9 : SubtargetFeature<"a9", "ARMProcFamily", "CortexA9", 15*0fca6ea1SDimitry Andric "Cortex-A9 ARM processors", []>; 16*0fca6ea1SDimitry Andricdef ProcA12 : SubtargetFeature<"a12", "ARMProcFamily", "CortexA12", 17*0fca6ea1SDimitry Andric "Cortex-A12 ARM processors", []>; 18*0fca6ea1SDimitry Andricdef ProcA15 : SubtargetFeature<"a15", "ARMProcFamily", "CortexA15", 19*0fca6ea1SDimitry Andric "Cortex-A15 ARM processors", []>; 20*0fca6ea1SDimitry Andricdef ProcA17 : SubtargetFeature<"a17", "ARMProcFamily", "CortexA17", 21*0fca6ea1SDimitry Andric "Cortex-A17 ARM processors", []>; 22*0fca6ea1SDimitry Andricdef ProcA32 : SubtargetFeature<"a32", "ARMProcFamily", "CortexA32", 23*0fca6ea1SDimitry Andric "Cortex-A32 ARM processors", []>; 24*0fca6ea1SDimitry Andricdef ProcA35 : SubtargetFeature<"a35", "ARMProcFamily", "CortexA35", 25*0fca6ea1SDimitry Andric "Cortex-A35 ARM processors", []>; 26*0fca6ea1SDimitry Andricdef ProcA53 : SubtargetFeature<"a53", "ARMProcFamily", "CortexA53", 27*0fca6ea1SDimitry Andric "Cortex-A53 ARM processors", []>; 28*0fca6ea1SDimitry Andricdef ProcA55 : SubtargetFeature<"a55", "ARMProcFamily", "CortexA55", 29*0fca6ea1SDimitry Andric "Cortex-A55 ARM processors", []>; 30*0fca6ea1SDimitry Andricdef ProcA57 : SubtargetFeature<"a57", "ARMProcFamily", "CortexA57", 31*0fca6ea1SDimitry Andric "Cortex-A57 ARM processors", []>; 32*0fca6ea1SDimitry Andricdef ProcA72 : SubtargetFeature<"a72", "ARMProcFamily", "CortexA72", 33*0fca6ea1SDimitry Andric "Cortex-A72 ARM processors", []>; 34*0fca6ea1SDimitry Andricdef ProcA73 : SubtargetFeature<"a73", "ARMProcFamily", "CortexA73", 35*0fca6ea1SDimitry Andric "Cortex-A73 ARM processors", []>; 36*0fca6ea1SDimitry Andricdef ProcA75 : SubtargetFeature<"a75", "ARMProcFamily", "CortexA75", 37*0fca6ea1SDimitry Andric "Cortex-A75 ARM processors", []>; 38*0fca6ea1SDimitry Andricdef ProcA76 : SubtargetFeature<"a76", "ARMProcFamily", "CortexA76", 39*0fca6ea1SDimitry Andric "Cortex-A76 ARM processors", []>; 40*0fca6ea1SDimitry Andricdef ProcA77 : SubtargetFeature<"a77", "ARMProcFamily", "CortexA77", 41*0fca6ea1SDimitry Andric "Cortex-A77 ARM processors", []>; 42*0fca6ea1SDimitry Andricdef ProcA78 : SubtargetFeature<"cortex-a78", "ARMProcFamily", "CortexA78", 43*0fca6ea1SDimitry Andric "Cortex-A78 ARM processors", []>; 44*0fca6ea1SDimitry Andricdef ProcA78AE : SubtargetFeature<"cortex-a78ae", "ARMProcFamily", "CortexA78AE", 45*0fca6ea1SDimitry Andric "Cortex-A78AE ARM processors", []>; 46*0fca6ea1SDimitry Andricdef ProcA78C : SubtargetFeature<"a78c", "ARMProcFamily", "CortexA78C", 47*0fca6ea1SDimitry Andric "Cortex-A78C ARM processors", []>; 48*0fca6ea1SDimitry Andricdef ProcA710 : SubtargetFeature<"cortex-a710", "ARMProcFamily", 49*0fca6ea1SDimitry Andric "CortexA710", "Cortex-A710 ARM processors", []>; 50*0fca6ea1SDimitry Andricdef ProcX1 : SubtargetFeature<"cortex-x1", "ARMProcFamily", "CortexX1", 51*0fca6ea1SDimitry Andric "Cortex-X1 ARM processors", []>; 52*0fca6ea1SDimitry Andricdef ProcX1C : SubtargetFeature<"cortex-x1c", "ARMProcFamily", "CortexX1C", 53*0fca6ea1SDimitry Andric "Cortex-X1C ARM processors", []>; 54*0fca6ea1SDimitry Andric 55*0fca6ea1SDimitry Andricdef ProcV1 : SubtargetFeature<"neoverse-v1", "ARMProcFamily", 56*0fca6ea1SDimitry Andric "NeoverseV1", "Neoverse-V1 ARM processors", []>; 57*0fca6ea1SDimitry Andric 58*0fca6ea1SDimitry Andricdef ProcKrait : SubtargetFeature<"krait", "ARMProcFamily", "Krait", 59*0fca6ea1SDimitry Andric "Qualcomm Krait processors", []>; 60*0fca6ea1SDimitry Andricdef ProcKryo : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo", 61*0fca6ea1SDimitry Andric "Qualcomm Kryo processors", []>; 62*0fca6ea1SDimitry Andricdef ProcSwift : SubtargetFeature<"swift", "ARMProcFamily", "Swift", 63*0fca6ea1SDimitry Andric "Swift ARM processors", []>; 64*0fca6ea1SDimitry Andric 65*0fca6ea1SDimitry Andricdef ProcExynos : SubtargetFeature<"exynos", "ARMProcFamily", "Exynos", 66*0fca6ea1SDimitry Andric "Samsung Exynos processors", 67*0fca6ea1SDimitry Andric [FeatureZCZeroing, 68*0fca6ea1SDimitry Andric FeatureUseWideStrideVFP, 69*0fca6ea1SDimitry Andric FeatureSplatVFPToNeon, 70*0fca6ea1SDimitry Andric FeatureSlowVGETLNi32, 71*0fca6ea1SDimitry Andric FeatureSlowVDUP32, 72*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 73*0fca6ea1SDimitry Andric FeatureProfUnpredicate, 74*0fca6ea1SDimitry Andric FeatureHWDivThumb, 75*0fca6ea1SDimitry Andric FeatureHWDivARM, 76*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 77*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 78*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 79*0fca6ea1SDimitry Andric FeatureFuseLiterals, 80*0fca6ea1SDimitry Andric FeatureFuseAES, 81*0fca6ea1SDimitry Andric FeatureExpandMLx, 82*0fca6ea1SDimitry Andric FeatureCrypto, 83*0fca6ea1SDimitry Andric FeatureCRC]>; 84*0fca6ea1SDimitry Andric 85*0fca6ea1SDimitry Andricdef ProcR4 : SubtargetFeature<"r4", "ARMProcFamily", "CortexR4", 86*0fca6ea1SDimitry Andric "Cortex-R4 ARM processors", []>; 87*0fca6ea1SDimitry Andricdef ProcR5 : SubtargetFeature<"r5", "ARMProcFamily", "CortexR5", 88*0fca6ea1SDimitry Andric "Cortex-R5 ARM processors", []>; 89*0fca6ea1SDimitry Andricdef ProcR7 : SubtargetFeature<"r7", "ARMProcFamily", "CortexR7", 90*0fca6ea1SDimitry Andric "Cortex-R7 ARM processors", []>; 91*0fca6ea1SDimitry Andricdef ProcR52 : SubtargetFeature<"r52", "ARMProcFamily", "CortexR52", 92*0fca6ea1SDimitry Andric "Cortex-R52 ARM processors", []>; 93*0fca6ea1SDimitry Andricdef ProcR52plus : SubtargetFeature<"r52plus", "ARMProcFamily", "CortexR52plus", 94*0fca6ea1SDimitry Andric "Cortex-R52plus ARM processors", []>; 95*0fca6ea1SDimitry Andric 96*0fca6ea1SDimitry Andricdef ProcM3 : SubtargetFeature<"m3", "ARMProcFamily", "CortexM3", 97*0fca6ea1SDimitry Andric "Cortex-M3 ARM processors", []>; 98*0fca6ea1SDimitry Andricdef ProcM7 : SubtargetFeature<"m7", "ARMProcFamily", "CortexM7", 99*0fca6ea1SDimitry Andric "Cortex-M7 ARM processors", []>; 100*0fca6ea1SDimitry Andric 101*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===// 102*0fca6ea1SDimitry Andric// ARM processors 103*0fca6ea1SDimitry Andric// 104*0fca6ea1SDimitry Andric// Dummy CPU, used to target architectures 105*0fca6ea1SDimitry Andricdef : ProcessorModel<"generic", CortexA8Model, []>; 106*0fca6ea1SDimitry Andric 107*0fca6ea1SDimitry Andric// FIXME: Several processors below are not using their own scheduler 108*0fca6ea1SDimitry Andric// model, but one of similar/previous processor. These should be fixed. 109*0fca6ea1SDimitry Andric 110*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm8", [ARMv4]>; 111*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm810", [ARMv4]>; 112*0fca6ea1SDimitry Andricdef : ProcNoItin<"strongarm", [ARMv4]>; 113*0fca6ea1SDimitry Andricdef : ProcNoItin<"strongarm110", [ARMv4]>; 114*0fca6ea1SDimitry Andricdef : ProcNoItin<"strongarm1100", [ARMv4]>; 115*0fca6ea1SDimitry Andricdef : ProcNoItin<"strongarm1110", [ARMv4]>; 116*0fca6ea1SDimitry Andric 117*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm7tdmi", [ARMv4t]>; 118*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm7tdmi-s", [ARMv4t]>; 119*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm710t", [ARMv4t]>; 120*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm720t", [ARMv4t]>; 121*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm9", [ARMv4t]>; 122*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm9tdmi", [ARMv4t]>; 123*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm920", [ARMv4t]>; 124*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm920t", [ARMv4t]>; 125*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm922t", [ARMv4t]>; 126*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm940t", [ARMv4t]>; 127*0fca6ea1SDimitry Andricdef : ProcNoItin<"ep9312", [ARMv4t]>; 128*0fca6ea1SDimitry Andric 129*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm10tdmi", [ARMv5t]>; 130*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm1020t", [ARMv5t]>; 131*0fca6ea1SDimitry Andric 132*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm9e", [ARMv5te]>; 133*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm926ej-s", [ARMv5te]>; 134*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm946e-s", [ARMv5te]>; 135*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm966e-s", [ARMv5te]>; 136*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm968e-s", [ARMv5te]>; 137*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm10e", [ARMv5te]>; 138*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm1020e", [ARMv5te]>; 139*0fca6ea1SDimitry Andricdef : ProcNoItin<"arm1022e", [ARMv5te]>; 140*0fca6ea1SDimitry Andricdef : ProcNoItin<"xscale", [ARMv5te]>; 141*0fca6ea1SDimitry Andricdef : ProcNoItin<"iwmmxt", [ARMv5te]>; 142*0fca6ea1SDimitry Andric 143*0fca6ea1SDimitry Andricdef : Processor<"arm1136j-s", ARMV6Itineraries, [ARMv6]>; 144*0fca6ea1SDimitry Andricdef : Processor<"arm1136jf-s", ARMV6Itineraries, [ARMv6, 145*0fca6ea1SDimitry Andric FeatureVFP2, 146*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx]>; 147*0fca6ea1SDimitry Andric 148*0fca6ea1SDimitry Andricdef : Processor<"cortex-m0", ARMV6Itineraries, [ARMv6m, 149*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 150*0fca6ea1SDimitry Andricdef : Processor<"cortex-m0plus", ARMV6Itineraries, [ARMv6m, 151*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 152*0fca6ea1SDimitry Andricdef : Processor<"cortex-m1", ARMV6Itineraries, [ARMv6m, 153*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 154*0fca6ea1SDimitry Andricdef : Processor<"sc000", ARMV6Itineraries, [ARMv6m, 155*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 156*0fca6ea1SDimitry Andric 157*0fca6ea1SDimitry Andricdef : Processor<"arm1176jz-s", ARMV6Itineraries, [ARMv6kz]>; 158*0fca6ea1SDimitry Andricdef : Processor<"arm1176jzf-s", ARMV6Itineraries, [ARMv6kz, 159*0fca6ea1SDimitry Andric FeatureVFP2, 160*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx]>; 161*0fca6ea1SDimitry Andric 162*0fca6ea1SDimitry Andricdef : Processor<"mpcorenovfp", ARMV6Itineraries, [ARMv6k]>; 163*0fca6ea1SDimitry Andricdef : Processor<"mpcore", ARMV6Itineraries, [ARMv6k, 164*0fca6ea1SDimitry Andric FeatureVFP2, 165*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx]>; 166*0fca6ea1SDimitry Andric 167*0fca6ea1SDimitry Andricdef : Processor<"arm1156t2-s", ARMV6Itineraries, [ARMv6t2]>; 168*0fca6ea1SDimitry Andricdef : Processor<"arm1156t2f-s", ARMV6Itineraries, [ARMv6t2, 169*0fca6ea1SDimitry Andric FeatureVFP2, 170*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx]>; 171*0fca6ea1SDimitry Andric 172*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a5", CortexA8Model, [ARMv7a, ProcA5, 173*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 174*0fca6ea1SDimitry Andric FeatureTrustZone, 175*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 176*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 177*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 178*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 179*0fca6ea1SDimitry Andric FeatureMP, 180*0fca6ea1SDimitry Andric FeatureVFP4]>; 181*0fca6ea1SDimitry Andric 182*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a7", CortexA8Model, [ARMv7a, ProcA7, 183*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 184*0fca6ea1SDimitry Andric FeatureTrustZone, 185*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 186*0fca6ea1SDimitry Andric FeatureHasVMLxHazards, 187*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 188*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 189*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 190*0fca6ea1SDimitry Andric FeatureMP, 191*0fca6ea1SDimitry Andric FeatureVFP4, 192*0fca6ea1SDimitry Andric FeatureVirtualization]>; 193*0fca6ea1SDimitry Andric 194*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a8", CortexA8Model, [ARMv7a, ProcA8, 195*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 196*0fca6ea1SDimitry Andric FeatureNonpipelinedVFP, 197*0fca6ea1SDimitry Andric FeatureTrustZone, 198*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 199*0fca6ea1SDimitry Andric FeatureHasVMLxHazards, 200*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 201*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 202*0fca6ea1SDimitry Andric FeatureVMLxForwarding]>; 203*0fca6ea1SDimitry Andric 204*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a9", CortexA9Model, [ARMv7a, ProcA9, 205*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 206*0fca6ea1SDimitry Andric FeatureTrustZone, 207*0fca6ea1SDimitry Andric FeatureHasVMLxHazards, 208*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 209*0fca6ea1SDimitry Andric FeatureFP16, 210*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 211*0fca6ea1SDimitry Andric FeatureExpandMLx, 212*0fca6ea1SDimitry Andric FeaturePreferVMOVSR, 213*0fca6ea1SDimitry Andric FeatureMuxedUnits, 214*0fca6ea1SDimitry Andric FeatureNEONForFPMovs, 215*0fca6ea1SDimitry Andric FeatureCheckVLDnAlign, 216*0fca6ea1SDimitry Andric FeatureMP]>; 217*0fca6ea1SDimitry Andric 218*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a12", CortexA9Model, [ARMv7a, ProcA12, 219*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 220*0fca6ea1SDimitry Andric FeatureTrustZone, 221*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 222*0fca6ea1SDimitry Andric FeatureVFP4, 223*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 224*0fca6ea1SDimitry Andric FeatureVirtualization, 225*0fca6ea1SDimitry Andric FeatureMP]>; 226*0fca6ea1SDimitry Andric 227*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a15", CortexA9Model, [ARMv7a, ProcA15, 228*0fca6ea1SDimitry Andric FeatureDontWidenVMOVS, 229*0fca6ea1SDimitry Andric FeatureSplatVFPToNeon, 230*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 231*0fca6ea1SDimitry Andric FeatureMuxedUnits, 232*0fca6ea1SDimitry Andric FeatureTrustZone, 233*0fca6ea1SDimitry Andric FeatureVFP4, 234*0fca6ea1SDimitry Andric FeatureMP, 235*0fca6ea1SDimitry Andric FeatureCheckVLDnAlign, 236*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 237*0fca6ea1SDimitry Andric FeatureVirtualization]>; 238*0fca6ea1SDimitry Andric 239*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a17", CortexA9Model, [ARMv7a, ProcA17, 240*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 241*0fca6ea1SDimitry Andric FeatureTrustZone, 242*0fca6ea1SDimitry Andric FeatureMP, 243*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 244*0fca6ea1SDimitry Andric FeatureVFP4, 245*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 246*0fca6ea1SDimitry Andric FeatureVirtualization]>; 247*0fca6ea1SDimitry Andric 248*0fca6ea1SDimitry Andric// FIXME: krait has currently the same features as A9 plus VFP4 and HWDiv 249*0fca6ea1SDimitry Andricdef : ProcessorModel<"krait", CortexA9Model, [ARMv7a, ProcKrait, 250*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 251*0fca6ea1SDimitry Andric FeatureMuxedUnits, 252*0fca6ea1SDimitry Andric FeatureCheckVLDnAlign, 253*0fca6ea1SDimitry Andric FeatureVMLxForwarding, 254*0fca6ea1SDimitry Andric FeatureFP16, 255*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 256*0fca6ea1SDimitry Andric FeatureVFP4, 257*0fca6ea1SDimitry Andric FeatureHWDivThumb, 258*0fca6ea1SDimitry Andric FeatureHWDivARM]>; 259*0fca6ea1SDimitry Andric 260*0fca6ea1SDimitry Andricdef : ProcessorModel<"swift", SwiftModel, [ARMv7a, ProcSwift, 261*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 262*0fca6ea1SDimitry Andric FeatureNEONForFP, 263*0fca6ea1SDimitry Andric FeatureVFP4, 264*0fca6ea1SDimitry Andric FeatureUseWideStrideVFP, 265*0fca6ea1SDimitry Andric FeatureMP, 266*0fca6ea1SDimitry Andric FeatureHWDivThumb, 267*0fca6ea1SDimitry Andric FeatureHWDivARM, 268*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 269*0fca6ea1SDimitry Andric FeatureAvoidMOVsShOp, 270*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 271*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 272*0fca6ea1SDimitry Andric FeatureHasVMLxHazards, 273*0fca6ea1SDimitry Andric FeatureProfUnpredicate, 274*0fca6ea1SDimitry Andric FeaturePrefISHSTBarrier, 275*0fca6ea1SDimitry Andric FeatureSlowOddRegister, 276*0fca6ea1SDimitry Andric FeatureSlowLoadDSubreg, 277*0fca6ea1SDimitry Andric FeatureSlowVGETLNi32, 278*0fca6ea1SDimitry Andric FeatureSlowVDUP32, 279*0fca6ea1SDimitry Andric FeatureUseMISched, 280*0fca6ea1SDimitry Andric FeatureNoPostRASched]>; 281*0fca6ea1SDimitry Andric 282*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r4", CortexA8Model, [ARMv7r, ProcR4, 283*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 284*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR]>; 285*0fca6ea1SDimitry Andric 286*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r4f", CortexA8Model, [ARMv7r, ProcR4, 287*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 288*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 289*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 290*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 291*0fca6ea1SDimitry Andric FeatureVFP3_D16, 292*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR]>; 293*0fca6ea1SDimitry Andric 294*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r5", CortexA8Model, [ARMv7r, ProcR5, 295*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 296*0fca6ea1SDimitry Andric FeatureVFP3_D16, 297*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 298*0fca6ea1SDimitry Andric FeatureHWDivARM, 299*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 300*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 301*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR]>; 302*0fca6ea1SDimitry Andric 303*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r7", CortexA8Model, [ARMv7r, ProcR7, 304*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 305*0fca6ea1SDimitry Andric FeatureVFP3_D16, 306*0fca6ea1SDimitry Andric FeatureFP16, 307*0fca6ea1SDimitry Andric FeatureMP, 308*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 309*0fca6ea1SDimitry Andric FeatureHWDivARM, 310*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 311*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 312*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR]>; 313*0fca6ea1SDimitry Andric 314*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r8", CortexA8Model, [ARMv7r, 315*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 316*0fca6ea1SDimitry Andric FeatureVFP3_D16, 317*0fca6ea1SDimitry Andric FeatureFP16, 318*0fca6ea1SDimitry Andric FeatureMP, 319*0fca6ea1SDimitry Andric FeatureSlowFPBrcc, 320*0fca6ea1SDimitry Andric FeatureHWDivARM, 321*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 322*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 323*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR]>; 324*0fca6ea1SDimitry Andric 325*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m3", CortexM4Model, [ARMv7m, 326*0fca6ea1SDimitry Andric ProcM3, 327*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 328*0fca6ea1SDimitry Andric FeatureUseMISched, 329*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 330*0fca6ea1SDimitry Andric 331*0fca6ea1SDimitry Andricdef : ProcessorModel<"sc300", CortexM4Model, [ARMv7m, 332*0fca6ea1SDimitry Andric ProcM3, 333*0fca6ea1SDimitry Andric FeatureUseMISched, 334*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 335*0fca6ea1SDimitry Andric 336*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m4", CortexM4Model, [ARMv7em, 337*0fca6ea1SDimitry Andric FeatureVFP4_D16_SP, 338*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 339*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 340*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 341*0fca6ea1SDimitry Andric FeatureUseMISched, 342*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 343*0fca6ea1SDimitry Andric 344*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m7", CortexM7Model, [ARMv7em, 345*0fca6ea1SDimitry Andric ProcM7, 346*0fca6ea1SDimitry Andric FeatureFPARMv8_D16, 347*0fca6ea1SDimitry Andric FeatureUseMIPipeliner, 348*0fca6ea1SDimitry Andric FeatureUseMISched]>; 349*0fca6ea1SDimitry Andric 350*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-m23", [ARMv8mBaseline, 351*0fca6ea1SDimitry Andric FeatureNoMovt, 352*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor]>; 353*0fca6ea1SDimitry Andric 354*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m33", CortexM4Model, [ARMv8mMainline, 355*0fca6ea1SDimitry Andric FeatureDSP, 356*0fca6ea1SDimitry Andric FeatureFPARMv8_D16_SP, 357*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 358*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 359*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 360*0fca6ea1SDimitry Andric FeatureUseMISched, 361*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor, 362*0fca6ea1SDimitry Andric FeatureFixCMSE_CVE_2021_35465]>; 363*0fca6ea1SDimitry Andric 364*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m35p", CortexM4Model, [ARMv8mMainline, 365*0fca6ea1SDimitry Andric FeatureDSP, 366*0fca6ea1SDimitry Andric FeatureFPARMv8_D16_SP, 367*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 368*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 369*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 370*0fca6ea1SDimitry Andric FeatureUseMISched, 371*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor, 372*0fca6ea1SDimitry Andric FeatureFixCMSE_CVE_2021_35465]>; 373*0fca6ea1SDimitry Andric 374*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m55", CortexM55Model, [ARMv81mMainline, 375*0fca6ea1SDimitry Andric FeatureDSP, 376*0fca6ea1SDimitry Andric FeatureFPARMv8_D16, 377*0fca6ea1SDimitry Andric FeatureUseMISched, 378*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor, 379*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 380*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 381*0fca6ea1SDimitry Andric HasMVEFloatOps, 382*0fca6ea1SDimitry Andric FeatureFixCMSE_CVE_2021_35465]>; 383*0fca6ea1SDimitry Andric 384*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m85", CortexM85Model, [ARMv81mMainline, 385*0fca6ea1SDimitry Andric FeatureDSP, 386*0fca6ea1SDimitry Andric FeatureFPARMv8_D16, 387*0fca6ea1SDimitry Andric FeaturePACBTI, 388*0fca6ea1SDimitry Andric FeatureUseMISched, 389*0fca6ea1SDimitry Andric HasMVEFloatOps]>; 390*0fca6ea1SDimitry Andric 391*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-m52", CortexM55Model, [ARMv81mMainline, 392*0fca6ea1SDimitry Andric FeatureDSP, 393*0fca6ea1SDimitry Andric FeatureFPARMv8_D16, 394*0fca6ea1SDimitry Andric FeatureHasNoBranchPredictor, 395*0fca6ea1SDimitry Andric FeaturePACBTI, 396*0fca6ea1SDimitry Andric FeatureUseMISched, 397*0fca6ea1SDimitry Andric FeaturePrefLoopAlign32, 398*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 399*0fca6ea1SDimitry Andric FeatureMVEVectorCostFactor1, 400*0fca6ea1SDimitry Andric HasMVEFloatOps]>; 401*0fca6ea1SDimitry Andric 402*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a32", [ARMv8a, 403*0fca6ea1SDimitry Andric FeatureHWDivThumb, 404*0fca6ea1SDimitry Andric FeatureHWDivARM, 405*0fca6ea1SDimitry Andric FeatureCrypto, 406*0fca6ea1SDimitry Andric FeatureCRC]>; 407*0fca6ea1SDimitry Andric 408*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a35", [ARMv8a, ProcA35, 409*0fca6ea1SDimitry Andric FeatureHWDivThumb, 410*0fca6ea1SDimitry Andric FeatureHWDivARM, 411*0fca6ea1SDimitry Andric FeatureCrypto, 412*0fca6ea1SDimitry Andric FeatureCRC]>; 413*0fca6ea1SDimitry Andric 414*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a53", [ARMv8a, ProcA53, 415*0fca6ea1SDimitry Andric FeatureHWDivThumb, 416*0fca6ea1SDimitry Andric FeatureHWDivARM, 417*0fca6ea1SDimitry Andric FeatureCrypto, 418*0fca6ea1SDimitry Andric FeatureCRC, 419*0fca6ea1SDimitry Andric FeatureFPAO]>; 420*0fca6ea1SDimitry Andric 421*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a55", [ARMv82a, ProcA55, 422*0fca6ea1SDimitry Andric FeatureHWDivThumb, 423*0fca6ea1SDimitry Andric FeatureHWDivARM, 424*0fca6ea1SDimitry Andric FeatureDotProd]>; 425*0fca6ea1SDimitry Andric 426*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a57", CortexA57Model, [ARMv8a, ProcA57, 427*0fca6ea1SDimitry Andric FeatureHWDivThumb, 428*0fca6ea1SDimitry Andric FeatureHWDivARM, 429*0fca6ea1SDimitry Andric FeatureCrypto, 430*0fca6ea1SDimitry Andric FeatureCRC, 431*0fca6ea1SDimitry Andric FeatureFPAO, 432*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 433*0fca6ea1SDimitry Andric FeatureCheapPredicableCPSR, 434*0fca6ea1SDimitry Andric FeatureFixCortexA57AES1742098]>; 435*0fca6ea1SDimitry Andric 436*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-a72", CortexA57Model, [ARMv8a, ProcA72, 437*0fca6ea1SDimitry Andric FeatureHWDivThumb, 438*0fca6ea1SDimitry Andric FeatureHWDivARM, 439*0fca6ea1SDimitry Andric FeatureCrypto, 440*0fca6ea1SDimitry Andric FeatureCRC, 441*0fca6ea1SDimitry Andric FeatureFixCortexA57AES1742098]>; 442*0fca6ea1SDimitry Andric 443*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a73", [ARMv8a, ProcA73, 444*0fca6ea1SDimitry Andric FeatureHWDivThumb, 445*0fca6ea1SDimitry Andric FeatureHWDivARM, 446*0fca6ea1SDimitry Andric FeatureCrypto, 447*0fca6ea1SDimitry Andric FeatureCRC]>; 448*0fca6ea1SDimitry Andric 449*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a75", [ARMv82a, ProcA75, 450*0fca6ea1SDimitry Andric FeatureHWDivThumb, 451*0fca6ea1SDimitry Andric FeatureHWDivARM, 452*0fca6ea1SDimitry Andric FeatureDotProd]>; 453*0fca6ea1SDimitry Andric 454*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a76", [ARMv82a, ProcA76, 455*0fca6ea1SDimitry Andric FeatureHWDivThumb, 456*0fca6ea1SDimitry Andric FeatureHWDivARM, 457*0fca6ea1SDimitry Andric FeatureCrypto, 458*0fca6ea1SDimitry Andric FeatureCRC, 459*0fca6ea1SDimitry Andric FeatureFullFP16, 460*0fca6ea1SDimitry Andric FeatureDotProd]>; 461*0fca6ea1SDimitry Andric 462*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a76ae", [ARMv82a, ProcA76, 463*0fca6ea1SDimitry Andric FeatureHWDivThumb, 464*0fca6ea1SDimitry Andric FeatureHWDivARM, 465*0fca6ea1SDimitry Andric FeatureCrypto, 466*0fca6ea1SDimitry Andric FeatureCRC, 467*0fca6ea1SDimitry Andric FeatureFullFP16, 468*0fca6ea1SDimitry Andric FeatureDotProd]>; 469*0fca6ea1SDimitry Andric 470*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a77", [ARMv82a, ProcA77, 471*0fca6ea1SDimitry Andric FeatureHWDivThumb, 472*0fca6ea1SDimitry Andric FeatureHWDivARM, 473*0fca6ea1SDimitry Andric FeatureCrypto, 474*0fca6ea1SDimitry Andric FeatureCRC, 475*0fca6ea1SDimitry Andric FeatureFullFP16, 476*0fca6ea1SDimitry Andric FeatureDotProd]>; 477*0fca6ea1SDimitry Andric 478*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a78", [ARMv82a, ProcA78, 479*0fca6ea1SDimitry Andric FeatureHWDivThumb, 480*0fca6ea1SDimitry Andric FeatureHWDivARM, 481*0fca6ea1SDimitry Andric FeatureCrypto, 482*0fca6ea1SDimitry Andric FeatureCRC, 483*0fca6ea1SDimitry Andric FeatureFullFP16, 484*0fca6ea1SDimitry Andric FeatureDotProd]>; 485*0fca6ea1SDimitry Andric 486*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a78ae", [ARMv82a, ProcA78AE, 487*0fca6ea1SDimitry Andric FeatureHWDivThumb, 488*0fca6ea1SDimitry Andric FeatureHWDivARM, 489*0fca6ea1SDimitry Andric FeatureCrypto, 490*0fca6ea1SDimitry Andric FeatureCRC, 491*0fca6ea1SDimitry Andric FeatureFullFP16, 492*0fca6ea1SDimitry Andric FeatureDotProd]>; 493*0fca6ea1SDimitry Andric 494*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a78c", [ARMv82a, ProcA78C, 495*0fca6ea1SDimitry Andric FeatureHWDivThumb, 496*0fca6ea1SDimitry Andric FeatureHWDivARM, 497*0fca6ea1SDimitry Andric FeatureCrypto, 498*0fca6ea1SDimitry Andric FeatureCRC, 499*0fca6ea1SDimitry Andric FeatureDotProd, 500*0fca6ea1SDimitry Andric FeatureFullFP16]>; 501*0fca6ea1SDimitry Andric 502*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-a710", [ARMv9a, ProcA710, 503*0fca6ea1SDimitry Andric FeatureHWDivThumb, 504*0fca6ea1SDimitry Andric FeatureHWDivARM, 505*0fca6ea1SDimitry Andric FeatureFP16FML, 506*0fca6ea1SDimitry Andric FeatureBF16, 507*0fca6ea1SDimitry Andric FeatureMatMulInt8, 508*0fca6ea1SDimitry Andric FeatureSB]>; 509*0fca6ea1SDimitry Andric 510*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-x1", [ARMv82a, ProcX1, 511*0fca6ea1SDimitry Andric FeatureHWDivThumb, 512*0fca6ea1SDimitry Andric FeatureHWDivARM, 513*0fca6ea1SDimitry Andric FeatureCrypto, 514*0fca6ea1SDimitry Andric FeatureCRC, 515*0fca6ea1SDimitry Andric FeatureFullFP16, 516*0fca6ea1SDimitry Andric FeatureDotProd]>; 517*0fca6ea1SDimitry Andric 518*0fca6ea1SDimitry Andricdef : ProcNoItin<"cortex-x1c", [ARMv82a, ProcX1C, 519*0fca6ea1SDimitry Andric FeatureHWDivThumb, 520*0fca6ea1SDimitry Andric FeatureHWDivARM, 521*0fca6ea1SDimitry Andric FeatureCrypto, 522*0fca6ea1SDimitry Andric FeatureCRC, 523*0fca6ea1SDimitry Andric FeatureFullFP16, 524*0fca6ea1SDimitry Andric FeatureDotProd]>; 525*0fca6ea1SDimitry Andric 526*0fca6ea1SDimitry Andricdef : ProcNoItin<"neoverse-v1", [ARMv84a, 527*0fca6ea1SDimitry Andric FeatureHWDivThumb, 528*0fca6ea1SDimitry Andric FeatureHWDivARM, 529*0fca6ea1SDimitry Andric FeatureCrypto, 530*0fca6ea1SDimitry Andric FeatureCRC, 531*0fca6ea1SDimitry Andric FeatureFullFP16, 532*0fca6ea1SDimitry Andric FeatureBF16, 533*0fca6ea1SDimitry Andric FeatureMatMulInt8]>; 534*0fca6ea1SDimitry Andric 535*0fca6ea1SDimitry Andricdef : ProcNoItin<"neoverse-n1", [ARMv82a, 536*0fca6ea1SDimitry Andric FeatureHWDivThumb, 537*0fca6ea1SDimitry Andric FeatureHWDivARM, 538*0fca6ea1SDimitry Andric FeatureCrypto, 539*0fca6ea1SDimitry Andric FeatureCRC, 540*0fca6ea1SDimitry Andric FeatureDotProd]>; 541*0fca6ea1SDimitry Andric 542*0fca6ea1SDimitry Andricdef : ProcNoItin<"neoverse-n2", [ARMv9a, 543*0fca6ea1SDimitry Andric FeatureBF16, 544*0fca6ea1SDimitry Andric FeatureFP16FML, 545*0fca6ea1SDimitry Andric FeatureMatMulInt8]>; 546*0fca6ea1SDimitry Andric 547*0fca6ea1SDimitry Andricdef : ProcessorModel<"cyclone", SwiftModel, [ARMv8a, ProcSwift, 548*0fca6ea1SDimitry Andric FeatureHasRetAddrStack, 549*0fca6ea1SDimitry Andric FeatureNEONForFP, 550*0fca6ea1SDimitry Andric FeatureVFP4, 551*0fca6ea1SDimitry Andric FeatureMP, 552*0fca6ea1SDimitry Andric FeatureHWDivThumb, 553*0fca6ea1SDimitry Andric FeatureHWDivARM, 554*0fca6ea1SDimitry Andric FeatureAvoidPartialCPSR, 555*0fca6ea1SDimitry Andric FeatureAvoidMOVsShOp, 556*0fca6ea1SDimitry Andric FeatureHasSlowFPVMLx, 557*0fca6ea1SDimitry Andric FeatureHasSlowFPVFMx, 558*0fca6ea1SDimitry Andric FeatureCrypto, 559*0fca6ea1SDimitry Andric FeatureUseMISched, 560*0fca6ea1SDimitry Andric FeatureZCZeroing, 561*0fca6ea1SDimitry Andric FeatureNoPostRASched]>; 562*0fca6ea1SDimitry Andric 563*0fca6ea1SDimitry Andricdef : ProcNoItin<"exynos-m3", [ARMv8a, ProcExynos]>; 564*0fca6ea1SDimitry Andricdef : ProcNoItin<"exynos-m4", [ARMv82a, ProcExynos, 565*0fca6ea1SDimitry Andric FeatureFullFP16, 566*0fca6ea1SDimitry Andric FeatureDotProd]>; 567*0fca6ea1SDimitry Andricdef : ProcNoItin<"exynos-m5", [ARMv82a, ProcExynos, 568*0fca6ea1SDimitry Andric FeatureFullFP16, 569*0fca6ea1SDimitry Andric FeatureDotProd]>; 570*0fca6ea1SDimitry Andric 571*0fca6ea1SDimitry Andricdef : ProcNoItin<"kryo", [ARMv8a, ProcKryo, 572*0fca6ea1SDimitry Andric FeatureHWDivThumb, 573*0fca6ea1SDimitry Andric FeatureHWDivARM, 574*0fca6ea1SDimitry Andric FeatureCrypto, 575*0fca6ea1SDimitry Andric FeatureCRC]>; 576*0fca6ea1SDimitry Andric 577*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r52", CortexR52Model, [ARMv8r, ProcR52, 578*0fca6ea1SDimitry Andric FeatureFPARMv8, 579*0fca6ea1SDimitry Andric FeatureNEON, 580*0fca6ea1SDimitry Andric FeatureUseMISched, 581*0fca6ea1SDimitry Andric FeatureFPAO]>; 582*0fca6ea1SDimitry Andric 583*0fca6ea1SDimitry Andricdef : ProcessorModel<"cortex-r52plus", CortexR52Model, [ARMv8r, ProcR52plus, 584*0fca6ea1SDimitry Andric FeatureFPARMv8, 585*0fca6ea1SDimitry Andric FeatureNEON, 586*0fca6ea1SDimitry Andric FeatureUseMISched, 587*0fca6ea1SDimitry Andric FeatureFPAO]>; 588