Skip to content

Commit cf08eb9

Browse files
committed
Add nested enums for subarchs, move arm profile and version to the ARM enum. Remove duplicate profile switch.
1 parent bb8564d commit cf08eb9

File tree

2 files changed

+137
-166
lines changed

2 files changed

+137
-166
lines changed

Sources/SwiftDriver/Utilities/Triple.swift

Lines changed: 119 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -603,33 +603,6 @@ extension Triple {
603603
}
604604
}
605605

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-
633606
// Parse ARM architectures not handled by `parse`. On its own, this is not
634607
// enough to correctly parse an ARM architecture.
635608
private static func parseARMArch<S: StringProtocol>(_ archName: S) -> Triple.Arch? {
@@ -666,12 +639,8 @@ extension Triple {
666639
return nil
667640
}
668641

669-
let subArch = Triple.SubArch.parse(archName)
670-
let profile = subArch?.armProfile
671-
let version = subArch?.armVersion
672-
673642
// 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 {
675644
if endianness == .big {
676645
return .thumbeb
677646
} else {
@@ -793,175 +762,177 @@ extension Triple {
793762

794763
extension Triple {
795764
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)
832849

833850
fileprivate static func parse<S: StringProtocol>(_ component: S) -> Triple.SubArch? {
834851

835852
if component.hasPrefix("mips") && (component.hasSuffix("r6el") || component.hasSuffix("r6")) {
836-
return .mipsSubArch_r6
853+
return .mips(.r6)
837854
}
838855

839856
let armSubArch = Triple.Arch.cannonicalARMArchName(from: component)
840857

841858
if armSubArch.isEmpty {
842859
switch component {
843860
case _ where component.hasSuffix("kalimba3"):
844-
return .kalimbaSubArch_v3
861+
return .kalimba(.v3)
845862
case _ where component.hasSuffix("kalimba4"):
846-
return .kalimbaSubArch_v4
863+
return .kalimba(.v4)
847864
case _ where component.hasSuffix("kalimba5"):
848-
return .kalimbaSubArch_v5
865+
return .kalimba(.v5)
849866
default:
850867
return nil
851868
}
852869
}
853870

854871
switch armSubArch {
855872
case "v2":
856-
return .armSubArch_v2
873+
return .arm(.v2)
857874
case "v2a":
858-
return .armSubArch_v2a
875+
return .arm(.v2a)
859876
case "v3":
860-
return .armSubArch_v3
877+
return .arm(.v3)
861878
case "v3m":
862-
return .armSubArch_v3m
879+
return .arm(.v3m)
863880
case "v4":
864-
return .armSubArch_v4
881+
return .arm(.v4)
865882
case "v4t":
866-
return .armSubArch_v4t
883+
return .arm(.v4t)
867884
case "v5t":
868-
return .armSubArch_v5
885+
return .arm(.v5)
869886
case "v5te", "v5tej", "xscale":
870-
return .armSubArch_v5e
887+
return .arm(.v5e)
871888
case "v6":
872-
return .armSubArch_v6
889+
return .arm(.v6)
873890
case "v6k":
874-
return .armSubArch_v6k
891+
return .arm(.v6k)
875892
case "v6kz":
876-
return .armSubArch_v6kz
893+
return .arm(.v6kz)
877894
case "v6-m":
878-
return .armSubArch_v6m
895+
return .arm(.v6m)
879896
case "v6t2":
880-
return .armSubArch_v6t2
897+
return .arm(.v6t2)
881898
case "v7-a":
882-
return .armSubArch_v7
899+
return .arm(.v7)
883900
case "v7k":
884-
return .armSubArch_v7k
901+
return .arm(.v7k)
885902
case "v7-m":
886-
return .armSubArch_v7m
903+
return .arm(.v7m)
887904
case "v7e-m":
888-
return .armSubArch_v7em
905+
return .arm(.v7em)
889906
case "v7-r":
890-
return .armSubArch_v7r
907+
return .arm(.v7r)
891908
case "v7s":
892-
return .armSubArch_v7s
909+
return .arm(.v7s)
893910
case "v7ve":
894-
return .armSubArch_v7ve
911+
return .arm(.v7ve)
895912
case "v8-a":
896-
return .armSubArch_v8
913+
return .arm(.v8)
897914
case "v8-m.main":
898-
return .armSubArch_v8m_mainline
915+
return .arm(.v8m_mainline)
899916
case "v8-m.base":
900-
return .armSubArch_v8m_baseline
917+
return .arm(.v8m_baseline)
901918
case "v8-r":
902-
return .armSubArch_v8r
919+
return .arm(.v8r)
903920
case "v8.1-m.main":
904-
return .armSubArch_v8_1m_mainline
921+
return .arm(.v8_1m_mainline)
905922
case "v8.1-a":
906-
return .armSubArch_v8_1a
923+
return .arm(.v8_1a)
907924
case "v8.2-a":
908-
return .armSubArch_v8_2a
925+
return .arm(.v8_2a)
909926
case "v8.3-a":
910-
return .armSubArch_v8_3a
927+
return .arm(.v8_3a)
911928
case "v8.4-a":
912-
return .armSubArch_v8_4a
929+
return .arm(.v8_4a)
913930
case "v8.5-a":
914-
return .armSubArch_v8_5a
931+
return .arm(.v8_5a)
915932
default:
916933
return nil
917934
}
918935
}
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-
}
965936
}
966937
}
967938

0 commit comments

Comments
 (0)