@@ -486,6 +486,54 @@ pub fn arePointersLogical(target: std.Target, as: AddressSpace) bool {
486
486
};
487
487
}
488
488
489
+ pub fn isDynamicAMDGCNFeature (target : std.Target , feature : std.Target.Cpu.Feature ) bool {
490
+ if (target .cpu .arch != .amdgcn ) return false ;
491
+
492
+ const sramecc_only = &[_ ]* const std.Target.Cpu.Model {
493
+ & std .Target .amdgcn .cpu .gfx1010 ,
494
+ & std .Target .amdgcn .cpu .gfx1011 ,
495
+ & std .Target .amdgcn .cpu .gfx1012 ,
496
+ & std .Target .amdgcn .cpu .gfx1013 ,
497
+ };
498
+ const xnack_or_sramecc = &[_ ]* const std.Target.Cpu.Model {
499
+ & std .Target .amdgcn .cpu .gfx1030 ,
500
+ & std .Target .amdgcn .cpu .gfx1031 ,
501
+ & std .Target .amdgcn .cpu .gfx1032 ,
502
+ & std .Target .amdgcn .cpu .gfx1033 ,
503
+ & std .Target .amdgcn .cpu .gfx1034 ,
504
+ & std .Target .amdgcn .cpu .gfx1035 ,
505
+ & std .Target .amdgcn .cpu .gfx1036 ,
506
+ & std .Target .amdgcn .cpu .gfx1100 ,
507
+ & std .Target .amdgcn .cpu .gfx1101 ,
508
+ & std .Target .amdgcn .cpu .gfx1102 ,
509
+ & std .Target .amdgcn .cpu .gfx1103 ,
510
+ & std .Target .amdgcn .cpu .gfx1150 ,
511
+ & std .Target .amdgcn .cpu .gfx1151 ,
512
+ & std .Target .amdgcn .cpu .gfx1152 ,
513
+ & std .Target .amdgcn .cpu .gfx1153 ,
514
+ & std .Target .amdgcn .cpu .gfx1200 ,
515
+ & std .Target .amdgcn .cpu .gfx1201 ,
516
+ };
517
+ const feature_tag : std.Target.amdgcn.Feature = @enumFromInt (feature .index );
518
+
519
+ if (feature_tag == .sramecc ) {
520
+ if (std .mem .indexOfScalar (
521
+ * const std .Target .Cpu .Model ,
522
+ sramecc_only ++ xnack_or_sramecc ,
523
+ target .cpu .model ,
524
+ )) | _ | return true ;
525
+ }
526
+ if (feature_tag == .xnack ) {
527
+ if (std .mem .indexOfScalar (
528
+ * const std .Target .Cpu .Model ,
529
+ xnack_or_sramecc ,
530
+ target .cpu .model ,
531
+ )) | _ | return true ;
532
+ }
533
+
534
+ return false ;
535
+ }
536
+
489
537
pub fn llvmMachineAbi (target : std.Target ) ? [:0 ]const u8 {
490
538
// LLD does not support ELFv1. Rather than having LLVM produce ELFv1 code and then linking it
491
539
// into a broken ELFv2 binary, just force LLVM to use ELFv2 as well. This will break when glibc
0 commit comments