@@ -151,6 +151,8 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts,
151
151
Builder.defineMacro (" _ARCH_PWR8" );
152
152
if (ArchDefs & ArchDefinePwr9)
153
153
Builder.defineMacro (" _ARCH_PWR9" );
154
+ if (ArchDefs & ArchDefinePwr10)
155
+ Builder.defineMacro (" _ARCH_PWR10" );
154
156
if (ArchDefs & ArchDefineA2)
155
157
Builder.defineMacro (" _ARCH_A2" );
156
158
if (ArchDefs & ArchDefineA2q) {
@@ -263,41 +265,51 @@ bool PPCTargetInfo::initFeatureMap(
263
265
.Case (" pwr7" , true )
264
266
.Case (" pwr8" , true )
265
267
.Case (" pwr9" , true )
268
+ .Case (" pwr10" , true )
266
269
.Case (" ppc64" , true )
267
270
.Case (" ppc64le" , true )
268
271
.Default (false );
269
272
270
273
Features[" qpx" ] = (CPU == " a2q" );
271
- Features[" power9-vector" ] = (CPU == " pwr9" );
274
+ Features[" power9-vector" ] = llvm::StringSwitch<bool >(CPU)
275
+ .Case (" pwr10" , true )
276
+ .Case (" pwr9" , true )
277
+ .Default (false );
272
278
Features[" crypto" ] = llvm::StringSwitch<bool >(CPU)
273
279
.Case (" ppc64le" , true )
280
+ .Case (" pwr10" , true )
274
281
.Case (" pwr9" , true )
275
282
.Case (" pwr8" , true )
276
283
.Default (false );
277
284
Features[" power8-vector" ] = llvm::StringSwitch<bool >(CPU)
278
285
.Case (" ppc64le" , true )
286
+ .Case (" pwr10" , true )
279
287
.Case (" pwr9" , true )
280
288
.Case (" pwr8" , true )
281
289
.Default (false );
282
290
Features[" bpermd" ] = llvm::StringSwitch<bool >(CPU)
283
291
.Case (" ppc64le" , true )
292
+ .Case (" pwr10" , true )
284
293
.Case (" pwr9" , true )
285
294
.Case (" pwr8" , true )
286
295
.Case (" pwr7" , true )
287
296
.Default (false );
288
297
Features[" extdiv" ] = llvm::StringSwitch<bool >(CPU)
289
298
.Case (" ppc64le" , true )
299
+ .Case (" pwr10" , true )
290
300
.Case (" pwr9" , true )
291
301
.Case (" pwr8" , true )
292
302
.Case (" pwr7" , true )
293
303
.Default (false );
294
304
Features[" direct-move" ] = llvm::StringSwitch<bool >(CPU)
295
305
.Case (" ppc64le" , true )
306
+ .Case (" pwr10" , true )
296
307
.Case (" pwr9" , true )
297
308
.Case (" pwr8" , true )
298
309
.Default (false );
299
310
Features[" vsx" ] = llvm::StringSwitch<bool >(CPU)
300
311
.Case (" ppc64le" , true )
312
+ .Case (" pwr10" , true )
301
313
.Case (" pwr9" , true )
302
314
.Case (" pwr8" , true )
303
315
.Case (" pwr7" , true )
@@ -313,10 +325,10 @@ bool PPCTargetInfo::initFeatureMap(
313
325
.Case (" e500" , true )
314
326
.Default (false );
315
327
316
- // Future CPU should include all of the features of Power 9 as well as any
328
+ // Future CPU should include all of the features of Power 10 as well as any
317
329
// additional features (yet to be determined) specific to it.
318
330
if (CPU == " future" ) {
319
- initFeatureMap (Features, Diags, " pwr9 " , FeaturesVec);
331
+ initFeatureMap (Features, Diags, " pwr10 " , FeaturesVec);
320
332
addFutureSpecificFeatures (Features);
321
333
}
322
334
@@ -463,18 +475,17 @@ ArrayRef<TargetInfo::AddlRegName> PPCTargetInfo::getGCCAddlRegNames() const {
463
475
}
464
476
465
477
static constexpr llvm::StringLiteral ValidCPUNames[] = {
466
- {" generic" }, {" 440" }, {" 450" }, {" 601" }, {" 602" },
467
- {" 603" }, {" 603e" }, {" 603ev" }, {" 604" }, {" 604e" },
468
- {" 620" }, {" 630" }, {" g3" }, {" 7400" }, {" g4" },
469
- {" 7450" }, {" g4+" }, {" 750" }, {" 8548" }, {" 970" },
470
- {" g5" }, {" a2" }, {" a2q" }, {" e500" }, {" e500mc" },
471
- {" e5500" }, {" power3" }, {" pwr3" }, {" power4" }, {" pwr4" },
472
- {" power5" }, {" pwr5" }, {" power5x" }, {" pwr5x" }, {" power6" },
473
- {" pwr6" }, {" power6x" }, {" pwr6x" }, {" power7" }, {" pwr7" },
474
- {" power8" }, {" pwr8" }, {" power9" }, {" pwr9" }, {" powerpc" },
475
- {" ppc" }, {" powerpc64" }, {" ppc64" }, {" powerpc64le" }, {" ppc64le" },
476
- {" future" }
477
- };
478
+ {" generic" }, {" 440" }, {" 450" }, {" 601" }, {" 602" },
479
+ {" 603" }, {" 603e" }, {" 603ev" }, {" 604" }, {" 604e" },
480
+ {" 620" }, {" 630" }, {" g3" }, {" 7400" }, {" g4" },
481
+ {" 7450" }, {" g4+" }, {" 750" }, {" 8548" }, {" 970" },
482
+ {" g5" }, {" a2" }, {" a2q" }, {" e500" }, {" e500mc" },
483
+ {" e5500" }, {" power3" }, {" pwr3" }, {" power4" }, {" pwr4" },
484
+ {" power5" }, {" pwr5" }, {" power5x" }, {" pwr5x" }, {" power6" },
485
+ {" pwr6" }, {" power6x" }, {" pwr6x" }, {" power7" }, {" pwr7" },
486
+ {" power8" }, {" pwr8" }, {" power9" }, {" pwr9" }, {" power10" },
487
+ {" pwr10" }, {" powerpc" }, {" ppc" }, {" powerpc64" }, {" ppc64" },
488
+ {" powerpc64le" }, {" ppc64le" }, {" future" }};
478
489
479
490
bool PPCTargetInfo::isValidCPUName (StringRef Name) const {
480
491
return llvm::find (ValidCPUNames, Name) != std::end (ValidCPUNames);
0 commit comments