@@ -603,33 +603,6 @@ extension Triple {
603
603
}
604
604
}
605
605
606
- enum ARMProfile {
607
- case a, r, m
608
-
609
- init ? < S: StringProtocol > ( _ archName: S ) {
610
- switch Triple . SubArch. parse ( Substring ( Triple . Arch. cannonicalARMArchName ( from: archName) ) ) {
611
- case . armSubArch_v6m, . armSubArch_v7m, . armSubArch_v7em,
612
- . armSubArch_v8m_mainline, . armSubArch_v8m_baseline,
613
- . armSubArch_v8_1m_mainline:
614
- self = . m
615
- case . armSubArch_v7r, . armSubArch_v8r:
616
- self = . r
617
- case . armSubArch_v7, . armSubArch_v7ve, . armSubArch_v7k,
618
- . armSubArch_v8, . armSubArch_v8_1a, . armSubArch_v8_2a,
619
- . armSubArch_v8_3a, . armSubArch_v8_4a, . armSubArch_v8_5a:
620
- self = . a
621
- case . armSubArch_v2, . armSubArch_v2a, . armSubArch_v3, . armSubArch_v3m,
622
- . armSubArch_v4, . armSubArch_v4t, . armSubArch_v5, . armSubArch_v5e,
623
- . armSubArch_v6, . armSubArch_v6k, . armSubArch_v6kz, . armSubArch_v6t2,
624
- . armSubArch_v7s,
625
- . kalimbaSubArch_v3, . kalimbaSubArch_v4, . kalimbaSubArch_v5,
626
- . mipsSubArch_r6,
627
- nil :
628
- return nil
629
- }
630
- }
631
- }
632
-
633
606
// Parse ARM architectures not handled by `parse`. On its own, this is not
634
607
// enough to correctly parse an ARM architecture.
635
608
private static func parseARMArch< S: StringProtocol > ( _ archName: S ) -> Triple . Arch ? {
@@ -666,12 +639,8 @@ extension Triple {
666
639
return nil
667
640
}
668
641
669
- let subArch = Triple . SubArch. parse ( archName)
670
- let profile = subArch? . armProfile
671
- let version = subArch? . armVersion
672
-
673
642
// Thumb only for v6m
674
- if profile == . m && version == 6 {
643
+ if case . arm ( let subArch ) = Triple . SubArch . parse ( archName ) , subArch . profile == . m && subArch . version == 6 {
675
644
if endianness == . big {
676
645
return . thumbeb
677
646
} else {
@@ -793,175 +762,177 @@ extension Triple {
793
762
794
763
extension Triple {
795
764
public enum SubArch : Hashable {
796
- case armSubArch_v2
797
- case armSubArch_v2a
798
- case armSubArch_v3
799
- case armSubArch_v3m
800
- case armSubArch_v4
801
- case armSubArch_v4t
802
- case armSubArch_v5
803
- case armSubArch_v5e
804
- case armSubArch_v6
805
- case armSubArch_v6k
806
- case armSubArch_v6kz
807
- case armSubArch_v6m
808
- case armSubArch_v6t2
809
- case armSubArch_v7
810
- case armSubArch_v7em
811
- case armSubArch_v7k
812
- case armSubArch_v7m
813
- case armSubArch_v7r
814
- case armSubArch_v7s
815
- case armSubArch_v7ve
816
- case armSubArch_v8
817
- case armSubArch_v8_1a
818
- case armSubArch_v8_1m_mainline
819
- case armSubArch_v8_2a
820
- case armSubArch_v8_3a
821
- case armSubArch_v8_4a
822
- case armSubArch_v8_5a
823
- case armSubArch_v8m_baseline
824
- case armSubArch_v8m_mainline
825
- case armSubArch_v8r
826
-
827
- case kalimbaSubArch_v3
828
- case kalimbaSubArch_v4
829
- case kalimbaSubArch_v5
830
-
831
- case mipsSubArch_r6
765
+
766
+ public enum ARM {
767
+
768
+ public enum Profile {
769
+ case a, r, m
770
+ }
771
+
772
+ case v2
773
+ case v2a
774
+ case v3
775
+ case v3m
776
+ case v4
777
+ case v4t
778
+ case v5
779
+ case v5e
780
+ case v6
781
+ case v6k
782
+ case v6kz
783
+ case v6m
784
+ case v6t2
785
+ case v7
786
+ case v7em
787
+ case v7k
788
+ case v7m
789
+ case v7r
790
+ case v7s
791
+ case v7ve
792
+ case v8
793
+ case v8_1a
794
+ case v8_1m_mainline
795
+ case v8_2a
796
+ case v8_3a
797
+ case v8_4a
798
+ case v8_5a
799
+ case v8m_baseline
800
+ case v8m_mainline
801
+ case v8r
802
+
803
+ var profile : Triple . SubArch . ARM . Profile ? {
804
+ switch self {
805
+ case . v6m, . v7m, . v7em, . v8m_mainline, . v8m_baseline, . v8_1m_mainline:
806
+ return . m
807
+ case . v7r, . v8r:
808
+ return . r
809
+ case . v7, . v7ve, . v7k, . v8, . v8_1a, . v8_2a, . v8_3a, . v8_4a, . v8_5a:
810
+ return . a
811
+ case . v2, . v2a, . v3, . v3m, . v4, . v4t, . v5, . v5e, . v6, . v6k, . v6kz, . v6t2, . v7s:
812
+ return nil
813
+ }
814
+ }
815
+
816
+ var version : Int {
817
+ switch self {
818
+ case . v2, . v2a:
819
+ return 2
820
+ case . v3, . v3m:
821
+ return 3
822
+ case . v4, . v4t:
823
+ return 4
824
+ case . v5, . v5e:
825
+ return 5
826
+ case . v6, . v6k, . v6kz, . v6m, . v6t2:
827
+ return 6
828
+ case . v7, . v7em, . v7k, . v7m, . v7r, . v7s, . v7ve:
829
+ return 7
830
+ case . v8, . v8_1a, . v8_1m_mainline, . v8_2a, . v8_3a, . v8_4a, . v8_5a, . v8m_baseline, . v8m_mainline, . v8r:
831
+ return 8
832
+ }
833
+ }
834
+ }
835
+
836
+ public enum Kalimba {
837
+ case v3
838
+ case v4
839
+ case v5
840
+ }
841
+
842
+ public enum MIPS {
843
+ case r6
844
+ }
845
+
846
+ case arm( ARM )
847
+ case kalimba( Kalimba )
848
+ case mips( MIPS )
832
849
833
850
fileprivate static func parse< S: StringProtocol > ( _ component: S ) -> Triple . SubArch ? {
834
851
835
852
if component. hasPrefix ( " mips " ) && ( component. hasSuffix ( " r6el " ) || component. hasSuffix ( " r6 " ) ) {
836
- return . mipsSubArch_r6
853
+ return . mips ( . r6 )
837
854
}
838
855
839
856
let armSubArch = Triple . Arch. cannonicalARMArchName ( from: component)
840
857
841
858
if armSubArch. isEmpty {
842
859
switch component {
843
860
case _ where component. hasSuffix ( " kalimba3 " ) :
844
- return . kalimbaSubArch_v3
861
+ return . kalimba ( . v3 )
845
862
case _ where component. hasSuffix ( " kalimba4 " ) :
846
- return . kalimbaSubArch_v4
863
+ return . kalimba ( . v4 )
847
864
case _ where component. hasSuffix ( " kalimba5 " ) :
848
- return . kalimbaSubArch_v5
865
+ return . kalimba ( . v5 )
849
866
default :
850
867
return nil
851
868
}
852
869
}
853
870
854
871
switch armSubArch {
855
872
case " v2 " :
856
- return . armSubArch_v2
873
+ return . arm ( . v2 )
857
874
case " v2a " :
858
- return . armSubArch_v2a
875
+ return . arm ( . v2a )
859
876
case " v3 " :
860
- return . armSubArch_v3
877
+ return . arm ( . v3 )
861
878
case " v3m " :
862
- return . armSubArch_v3m
879
+ return . arm ( . v3m )
863
880
case " v4 " :
864
- return . armSubArch_v4
881
+ return . arm ( . v4 )
865
882
case " v4t " :
866
- return . armSubArch_v4t
883
+ return . arm ( . v4t )
867
884
case " v5t " :
868
- return . armSubArch_v5
885
+ return . arm ( . v5 )
869
886
case " v5te " , " v5tej " , " xscale " :
870
- return . armSubArch_v5e
887
+ return . arm ( . v5e )
871
888
case " v6 " :
872
- return . armSubArch_v6
889
+ return . arm ( . v6 )
873
890
case " v6k " :
874
- return . armSubArch_v6k
891
+ return . arm ( . v6k )
875
892
case " v6kz " :
876
- return . armSubArch_v6kz
893
+ return . arm ( . v6kz )
877
894
case " v6-m " :
878
- return . armSubArch_v6m
895
+ return . arm ( . v6m )
879
896
case " v6t2 " :
880
- return . armSubArch_v6t2
897
+ return . arm ( . v6t2 )
881
898
case " v7-a " :
882
- return . armSubArch_v7
899
+ return . arm ( . v7 )
883
900
case " v7k " :
884
- return . armSubArch_v7k
901
+ return . arm ( . v7k )
885
902
case " v7-m " :
886
- return . armSubArch_v7m
903
+ return . arm ( . v7m )
887
904
case " v7e-m " :
888
- return . armSubArch_v7em
905
+ return . arm ( . v7em )
889
906
case " v7-r " :
890
- return . armSubArch_v7r
907
+ return . arm ( . v7r )
891
908
case " v7s " :
892
- return . armSubArch_v7s
909
+ return . arm ( . v7s )
893
910
case " v7ve " :
894
- return . armSubArch_v7ve
911
+ return . arm ( . v7ve )
895
912
case " v8-a " :
896
- return . armSubArch_v8
913
+ return . arm ( . v8 )
897
914
case " v8-m.main " :
898
- return . armSubArch_v8m_mainline
915
+ return . arm ( . v8m_mainline )
899
916
case " v8-m.base " :
900
- return . armSubArch_v8m_baseline
917
+ return . arm ( . v8m_baseline )
901
918
case " v8-r " :
902
- return . armSubArch_v8r
919
+ return . arm ( . v8r )
903
920
case " v8.1-m.main " :
904
- return . armSubArch_v8_1m_mainline
921
+ return . arm ( . v8_1m_mainline )
905
922
case " v8.1-a " :
906
- return . armSubArch_v8_1a
923
+ return . arm ( . v8_1a )
907
924
case " v8.2-a " :
908
- return . armSubArch_v8_2a
925
+ return . arm ( . v8_2a )
909
926
case " v8.3-a " :
910
- return . armSubArch_v8_3a
927
+ return . arm ( . v8_3a )
911
928
case " v8.4-a " :
912
- return . armSubArch_v8_4a
929
+ return . arm ( . v8_4a )
913
930
case " v8.5-a " :
914
- return . armSubArch_v8_5a
931
+ return . arm ( . v8_5a )
915
932
default :
916
933
return nil
917
934
}
918
935
}
919
-
920
- var armProfile : Triple . Arch . ARMProfile ? {
921
- switch self {
922
- case . armSubArch_v6m, . armSubArch_v7m, . armSubArch_v7em,
923
- . armSubArch_v8m_mainline, . armSubArch_v8m_baseline,
924
- . armSubArch_v8_1m_mainline:
925
- return . m
926
- case . armSubArch_v7r, . armSubArch_v8r:
927
- return . r
928
- case . armSubArch_v7, . armSubArch_v7ve, . armSubArch_v7k,
929
- . armSubArch_v8, . armSubArch_v8_1a, . armSubArch_v8_2a,
930
- . armSubArch_v8_3a, . armSubArch_v8_4a, . armSubArch_v8_5a:
931
- return . a
932
- case . armSubArch_v2, . armSubArch_v2a, . armSubArch_v3, . armSubArch_v3m,
933
- . armSubArch_v4, . armSubArch_v4t, . armSubArch_v5, . armSubArch_v5e,
934
- . armSubArch_v6, . armSubArch_v6k, . armSubArch_v6kz, . armSubArch_v6t2,
935
- . armSubArch_v7s,
936
- . kalimbaSubArch_v3, . kalimbaSubArch_v4, . kalimbaSubArch_v5,
937
- . mipsSubArch_r6:
938
- return nil
939
- }
940
- }
941
-
942
- var armVersion : Int ? {
943
- switch self {
944
- case . armSubArch_v2, . armSubArch_v2a:
945
- return 2
946
- case . armSubArch_v3, . armSubArch_v3m:
947
- return 3
948
- case . armSubArch_v4, . armSubArch_v4t:
949
- return 4
950
- case . armSubArch_v5, . armSubArch_v5e:
951
- return 5
952
- case . armSubArch_v6, . armSubArch_v6k, . armSubArch_v6kz, . armSubArch_v6m, . armSubArch_v6t2:
953
- return 6
954
- case . armSubArch_v7, . armSubArch_v7em, . armSubArch_v7k, . armSubArch_v7m, . armSubArch_v7r,
955
- . armSubArch_v7s, . armSubArch_v7ve:
956
- return 7
957
- case . armSubArch_v8, . armSubArch_v8_1a, . armSubArch_v8_1m_mainline, . armSubArch_v8_2a,
958
- . armSubArch_v8_3a, . armSubArch_v8_4a, . armSubArch_v8_5a, . armSubArch_v8m_baseline,
959
- . armSubArch_v8m_mainline, . armSubArch_v8r:
960
- return 8
961
- case . kalimbaSubArch_v3, . kalimbaSubArch_v4, . kalimbaSubArch_v5, . mipsSubArch_r6:
962
- return nil
963
- }
964
- }
965
936
}
966
937
}
967
938
0 commit comments