Commit 54a8b6a110

Andrew Kelley <superjoe30@gmail.com>
2016-02-11 00:58:15
cleanup target data organization
1 parent b642604
src/main.cpp
@@ -54,34 +54,29 @@ static int print_target_list(FILE *f) {
 
     fprintf(f, "Architectures:\n");
     int arch_count = target_arch_count();
-    int sub_arch_count = target_sub_arch_count();
     for (int arch_i = 0; arch_i < arch_count; arch_i += 1) {
         const ArchType *arch = get_target_arch(arch_i);
-        const char *native_str = (native_arch_type == arch->llvm_arch) ? " (native)" : "";
-        fprintf(f, "  %s%s\n", ZigLLVMGetArchTypeName(arch->llvm_arch), native_str);
-        for (int sub_arch_i = 0; sub_arch_i  < sub_arch_count; sub_arch_i += 1) {
-            const SubArchType *sub_arch = get_target_sub_arch(sub_arch_i);
-            if (sub_arch->arch == arch->llvm_arch) {
-                const char *native_str = (native_sub_arch_type == sub_arch->sub_arch) ? " (native)" : "";
-                fprintf(f, "    %s%s\n", sub_arch->name, native_str);
-            }
-        }
+        const char *sub_arch_str = (arch->sub_arch == ZigLLVM_NoSubArch) ?
+            "" : ZigLLVMGetSubArchTypeName(arch->sub_arch);
+        const char *native_str = (native_arch_type == arch->arch && native_sub_arch_type == arch->sub_arch) ?
+            " (native)" : "";
+        fprintf(f, "  %s%s%s\n", ZigLLVMGetArchTypeName(arch->arch), sub_arch_str, native_str);
     }
 
     fprintf(f, "\nOperating Systems:\n");
     int os_count = target_os_count();
     for (int i = 0; i < os_count; i += 1) {
-        const OsType *os_type = get_target_os(i);
-        const char *native_str = (native_os_type == os_type->llvm_os) ? " (native)" : "";
+        ZigLLVM_OSType os_type = get_target_os(i);
+        const char *native_str = (native_os_type == os_type) ? " (native)" : "";
         fprintf(f, "  %s%s\n", get_target_os_name(os_type), native_str);
     }
 
     fprintf(f, "\nABIs:\n");
     int environ_count = target_environ_count();
     for (int i = 0; i < environ_count; i += 1) {
-        const EnvironmentType *environ_type = get_target_environ(i);
-        const char *native_str = (native_environ_type == environ_type->llvm_environment) ? " (native)" : "";
-        fprintf(f, "  %s%s\n", ZigLLVMGetEnvironmentTypeName(environ_type->llvm_environment), native_str);
+        ZigLLVM_EnvironmentType environ_type = get_target_environ(i);
+        const char *native_str = (native_environ_type == environ_type) ? " (native)" : "";
+        fprintf(f, "  %s%s\n", ZigLLVMGetEnvironmentTypeName(environ_type), native_str);
     }
 
     return EXIT_SUCCESS;
src/target.cpp
@@ -9,123 +9,120 @@
 #include "util.hpp"
 
 static const ArchType arch_list[] = {
-    {ZigLLVM_arm},
-    {ZigLLVM_armeb},
-    {ZigLLVM_aarch64},
-    {ZigLLVM_aarch64_be},
-    {ZigLLVM_bpfel},
-    {ZigLLVM_bpfeb},
-    {ZigLLVM_hexagon},
-    {ZigLLVM_mips},
-    {ZigLLVM_mipsel},
-    {ZigLLVM_mips64},
-    {ZigLLVM_mips64el},
-    {ZigLLVM_msp430},
-    {ZigLLVM_ppc},
-    {ZigLLVM_ppc64},
-    {ZigLLVM_ppc64le},
-    {ZigLLVM_r600},
-    {ZigLLVM_amdgcn},
-    {ZigLLVM_sparc},
-    {ZigLLVM_sparcv9},
-    {ZigLLVM_sparcel},
-    {ZigLLVM_systemz},
-    {ZigLLVM_tce},
-    {ZigLLVM_thumb},
-    {ZigLLVM_thumbeb},
-    {ZigLLVM_x86},
-    {ZigLLVM_x86_64},
-    {ZigLLVM_xcore},
-    {ZigLLVM_nvptx},
-    {ZigLLVM_nvptx64},
-    {ZigLLVM_le32},
-    {ZigLLVM_le64},
-    {ZigLLVM_amdil},
-    {ZigLLVM_amdil64},
-    {ZigLLVM_hsail},
-    {ZigLLVM_hsail64},
-    {ZigLLVM_spir},
-    {ZigLLVM_spir64},
-    {ZigLLVM_kalimba},
-    {ZigLLVM_shave},
-    {ZigLLVM_wasm32},
-    {ZigLLVM_wasm64},
-};
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6t2},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5te},
+    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v4t},
+
+    {ZigLLVM_armeb, ZigLLVM_NoSubArch},
+    {ZigLLVM_aarch64, ZigLLVM_NoSubArch},
+    {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch},
+    {ZigLLVM_bpfel, ZigLLVM_NoSubArch},
+    {ZigLLVM_bpfeb, ZigLLVM_NoSubArch},
+    {ZigLLVM_hexagon, ZigLLVM_NoSubArch},
+    {ZigLLVM_mips, ZigLLVM_NoSubArch},
+    {ZigLLVM_mipsel, ZigLLVM_NoSubArch},
+    {ZigLLVM_mips64, ZigLLVM_NoSubArch},
+    {ZigLLVM_mips64el, ZigLLVM_NoSubArch},
+    {ZigLLVM_msp430, ZigLLVM_NoSubArch},
+    {ZigLLVM_ppc, ZigLLVM_NoSubArch},
+    {ZigLLVM_ppc64, ZigLLVM_NoSubArch},
+    {ZigLLVM_ppc64le, ZigLLVM_NoSubArch},
+    {ZigLLVM_r600, ZigLLVM_NoSubArch},
+    {ZigLLVM_amdgcn, ZigLLVM_NoSubArch},
+    {ZigLLVM_sparc, ZigLLVM_NoSubArch},
+    {ZigLLVM_sparcv9, ZigLLVM_NoSubArch},
+    {ZigLLVM_sparcel, ZigLLVM_NoSubArch},
+    {ZigLLVM_systemz, ZigLLVM_NoSubArch},
+    {ZigLLVM_tce, ZigLLVM_NoSubArch},
+    {ZigLLVM_thumb, ZigLLVM_NoSubArch},
+    {ZigLLVM_thumbeb, ZigLLVM_NoSubArch},
+    {ZigLLVM_x86, ZigLLVM_NoSubArch},
+    {ZigLLVM_x86_64, ZigLLVM_NoSubArch},
+    {ZigLLVM_xcore, ZigLLVM_NoSubArch},
+    {ZigLLVM_nvptx, ZigLLVM_NoSubArch},
+    {ZigLLVM_nvptx64, ZigLLVM_NoSubArch},
+    {ZigLLVM_le32, ZigLLVM_NoSubArch},
+    {ZigLLVM_le64, ZigLLVM_NoSubArch},
+    {ZigLLVM_amdil, ZigLLVM_NoSubArch},
+    {ZigLLVM_amdil64, ZigLLVM_NoSubArch},
+    {ZigLLVM_hsail, ZigLLVM_NoSubArch},
+    {ZigLLVM_hsail64, ZigLLVM_NoSubArch},
+    {ZigLLVM_spir, ZigLLVM_NoSubArch},
+    {ZigLLVM_spir64, ZigLLVM_NoSubArch},
 
-static const SubArchType sub_arch_list[] = {
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8_1a, "v8_1a"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v8, "v8"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7, "v7"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7em, "v7em"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7m, "v7m"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v7s, "v7s"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6, "v6"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6m, "v6m"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6k, "v6k"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v6t2, "v6t2"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5, "v5"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v5te, "v5te"},
-    {ZigLLVM_arm, ZigLLVM_ARMSubArch_v4t, "v4t"},
+    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v3},
+    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v4},
+    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v5},
 
-    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v3, "v3"},
-    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v4, "v4"},
-    {ZigLLVM_kalimba, ZigLLVM_KalimbaSubArch_v5, "v5"},
+    {ZigLLVM_shave, ZigLLVM_NoSubArch},
+    {ZigLLVM_wasm32, ZigLLVM_NoSubArch},
+    {ZigLLVM_wasm64, ZigLLVM_NoSubArch},
 };
 
-static const VendorType vendor_list[] = {
-    {ZigLLVM_Apple},
-    {ZigLLVM_PC},
-    {ZigLLVM_SCEI},
-    {ZigLLVM_BGP},
-    {ZigLLVM_BGQ},
-    {ZigLLVM_Freescale},
-    {ZigLLVM_IBM},
-    {ZigLLVM_ImaginationTechnologies},
-    {ZigLLVM_MipsTechnologies},
-    {ZigLLVM_NVIDIA},
-    {ZigLLVM_CSR},
+static const ZigLLVM_VendorType vendor_list[] = {
+    ZigLLVM_Apple,
+    ZigLLVM_PC,
+    ZigLLVM_SCEI,
+    ZigLLVM_BGP,
+    ZigLLVM_BGQ,
+    ZigLLVM_Freescale,
+    ZigLLVM_IBM,
+    ZigLLVM_ImaginationTechnologies,
+    ZigLLVM_MipsTechnologies,
+    ZigLLVM_NVIDIA,
+    ZigLLVM_CSR,
 };
 
-static const OsType os_list[] = {
-    {ZigLLVM_UnknownOS},
-    {ZigLLVM_CloudABI},
-    {ZigLLVM_Darwin},
-    {ZigLLVM_DragonFly},
-    {ZigLLVM_FreeBSD},
-    {ZigLLVM_IOS},
-    {ZigLLVM_KFreeBSD},
-    {ZigLLVM_Linux},
-    {ZigLLVM_Lv2},
-    {ZigLLVM_MacOSX},
-    {ZigLLVM_NetBSD},
-    {ZigLLVM_OpenBSD},
-    {ZigLLVM_Solaris},
-    {ZigLLVM_Win32},
-    {ZigLLVM_Haiku},
-    {ZigLLVM_Minix},
-    {ZigLLVM_RTEMS},
-    {ZigLLVM_NaCl},
-    {ZigLLVM_CNK},
-    {ZigLLVM_Bitrig},
-    {ZigLLVM_AIX},
-    {ZigLLVM_CUDA},
-    {ZigLLVM_NVCL},
-    {ZigLLVM_AMDHSA},
-    {ZigLLVM_PS4},
+static const ZigLLVM_OSType os_list[] = {
+    ZigLLVM_UnknownOS,
+    ZigLLVM_CloudABI,
+    ZigLLVM_Darwin,
+    ZigLLVM_DragonFly,
+    ZigLLVM_FreeBSD,
+    ZigLLVM_IOS,
+    ZigLLVM_KFreeBSD,
+    ZigLLVM_Linux,
+    ZigLLVM_Lv2,
+    ZigLLVM_MacOSX,
+    ZigLLVM_NetBSD,
+    ZigLLVM_OpenBSD,
+    ZigLLVM_Solaris,
+    ZigLLVM_Win32,
+    ZigLLVM_Haiku,
+    ZigLLVM_Minix,
+    ZigLLVM_RTEMS,
+    ZigLLVM_NaCl,
+    ZigLLVM_CNK,
+    ZigLLVM_Bitrig,
+    ZigLLVM_AIX,
+    ZigLLVM_CUDA,
+    ZigLLVM_NVCL,
+    ZigLLVM_AMDHSA,
+    ZigLLVM_PS4,
 };
 
-static const EnvironmentType environ_list[] = {
-    {ZigLLVM_GNU},
-    {ZigLLVM_GNUEABI},
-    {ZigLLVM_GNUEABIHF},
-    {ZigLLVM_GNUX32},
-    {ZigLLVM_CODE16},
-    {ZigLLVM_EABI},
-    {ZigLLVM_EABIHF},
-    {ZigLLVM_Android},
-    {ZigLLVM_MSVC},
-    {ZigLLVM_Itanium},
-    {ZigLLVM_Cygnus},
+static const ZigLLVM_EnvironmentType environ_list[] = {
+    ZigLLVM_GNU,
+    ZigLLVM_GNUEABI,
+    ZigLLVM_GNUEABIHF,
+    ZigLLVM_GNUX32,
+    ZigLLVM_CODE16,
+    ZigLLVM_EABI,
+    ZigLLVM_EABIHF,
+    ZigLLVM_Android,
+    ZigLLVM_MSVC,
+    ZigLLVM_Itanium,
+    ZigLLVM_Cygnus,
 };
 
 int target_arch_count(void) {
@@ -136,34 +133,28 @@ const ArchType *get_target_arch(int index) {
     return &arch_list[index];
 }
 
-int target_sub_arch_count(void) {
-    return array_length(sub_arch_list);
-}
-const SubArchType *get_target_sub_arch(int index) {
-    return &sub_arch_list[index];
-}
-
 int target_vendor_count(void) {
     return array_length(vendor_list);
 }
 
-const VendorType *get_target_vendor(int index) {
-    return &vendor_list[index];
+ZigLLVM_VendorType get_target_vendor(int index) {
+    return vendor_list[index];
 }
 
 int target_os_count(void) {
     return array_length(os_list);
 }
-const OsType *get_target_os(int index) {
-    return &os_list[index];
+ZigLLVM_OSType get_target_os(int index) {
+    return os_list[index];
 }
-const char *get_target_os_name(const OsType *os_type) {
-    return (os_type->llvm_os == ZigLLVM_UnknownOS) ? "freestanding" : ZigLLVMGetOSTypeName(os_type->llvm_os);
+
+const char *get_target_os_name(ZigLLVM_OSType os_type) {
+    return (os_type == ZigLLVM_UnknownOS) ? "freestanding" : ZigLLVMGetOSTypeName(os_type);
 }
 
 int target_environ_count(void) {
     return array_length(environ_list);
 }
-const EnvironmentType *get_target_environ(int index) {
-    return &environ_list[index];
+ZigLLVM_EnvironmentType get_target_environ(int index) {
+    return environ_list[index];
 }
src/target.hpp
@@ -11,41 +11,21 @@
 #include <zig_llvm.hpp>
 
 struct ArchType {
-    ZigLLVM_ArchType llvm_arch;
-};
-
-struct SubArchType {
-    ZigLLVM_ArchType arch; // which arch it applies to
+    ZigLLVM_ArchType arch;
     ZigLLVM_SubArchType sub_arch;
-    const char *name;
-};
-
-struct VendorType {
-    ZigLLVM_VendorType llvm_vendor;
-};
-
-struct OsType {
-    ZigLLVM_OSType llvm_os;
-};
-
-struct EnvironmentType {
-    ZigLLVM_EnvironmentType llvm_environment;
 };
 
 int target_arch_count(void);
 const ArchType *get_target_arch(int index);
 
-int target_sub_arch_count(void);
-const SubArchType *get_target_sub_arch(int index);
-
 int target_vendor_count(void);
-const VendorType *get_target_vendor(int index);
+ZigLLVM_VendorType get_target_vendor(int index);
 
 int target_os_count(void);
-const OsType *get_target_os(int index);
-const char *get_target_os_name(const OsType *os_type);
+ZigLLVM_OSType get_target_os(int index);
+const char *get_target_os_name(ZigLLVM_OSType os_type);
 
 int target_environ_count(void);
-const EnvironmentType *get_target_environ(int index);
+ZigLLVM_EnvironmentType get_target_environ(int index);
 
 #endif
src/zig_llvm.cpp
@@ -551,6 +551,45 @@ void ZigLLVMGetNativeTarget(ZigLLVM_ArchType *arch_type, ZigLLVM_SubArchType *su
     free(native_triple);
 }
 
+const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch) {
+    switch (sub_arch) {
+        case ZigLLVM_NoSubArch:
+            return "(none)";
+        case ZigLLVM_ARMSubArch_v8_1a:
+            return "v8_1a";
+        case ZigLLVM_ARMSubArch_v8:
+            return "v8";
+        case ZigLLVM_ARMSubArch_v7:
+            return "v7";
+        case ZigLLVM_ARMSubArch_v7em:
+            return "v7em";
+        case ZigLLVM_ARMSubArch_v7m:
+            return "v7m";
+        case ZigLLVM_ARMSubArch_v7s:
+            return "v7s";
+        case ZigLLVM_ARMSubArch_v6:
+            return "v6";
+        case ZigLLVM_ARMSubArch_v6m:
+            return "v6m";
+        case ZigLLVM_ARMSubArch_v6k:
+            return "v6k";
+        case ZigLLVM_ARMSubArch_v6t2:
+            return "v6t2";
+        case ZigLLVM_ARMSubArch_v5:
+            return "v5";
+        case ZigLLVM_ARMSubArch_v5te:
+            return "v5te";
+        case ZigLLVM_ARMSubArch_v4t:
+            return "v4t";
+        case ZigLLVM_KalimbaSubArch_v3:
+            return "v3";
+        case ZigLLVM_KalimbaSubArch_v4:
+            return "v4";
+        case ZigLLVM_KalimbaSubArch_v5:
+            return "v5";
+    }
+}
+
 //------------------------------------
 
 #include "buffer.hpp"
src/zig_llvm.hpp
@@ -284,6 +284,7 @@ enum ZigLLVM_ObjectFormatType {
 };
 
 const char *ZigLLVMGetArchTypeName(ZigLLVM_ArchType arch);
+const char *ZigLLVMGetSubArchTypeName(ZigLLVM_SubArchType sub_arch);
 const char *ZigLLVMGetVendorTypeName(ZigLLVM_VendorType vendor);
 const char *ZigLLVMGetOSTypeName(ZigLLVM_OSType os);
 const char *ZigLLVMGetEnvironmentTypeName(ZigLLVM_EnvironmentType environ);