aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-12-02 01:14:09 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-12-16 10:28:27 +0100
commitefd9af566c055f5cb6b3a90113edc512bb552c44 (patch)
tree7b3b7046cf246dab09dd60bc431127bcd9984e82
parent8e0199b78ddbd4c203d2c4161748881593805fc5 (diff)
downloadsparse-efd9af566c055f5cb6b3a90113edc512bb552c44.tar.gz
arch: move target-specific predefines to the target files.
Now that each supported arch has its own target file, move the arch-specific predefines to these files too. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--lib.c87
-rw-r--r--target-arm.c20
-rw-r--r--target-arm64.c6
-rw-r--r--target-m68k.c7
-rw-r--r--target-mips.c27
-rw-r--r--target-ppc.c32
-rw-r--r--target-riscv.c8
-rw-r--r--target-s390.c18
-rw-r--r--target-sparc.c28
-rw-r--r--target-x86.c20
-rw-r--r--target.h1
11 files changed, 169 insertions, 85 deletions
diff --git a/lib.c b/lib.c
index 366acd45..a2514b42 100644
--- a/lib.c
+++ b/lib.c
@@ -1446,91 +1446,6 @@ static void predefined_macros(void)
break;
}
- switch (arch_mach) {
- case MACH_ARM64:
- predefine("__aarch64__", 1, "1");
- break;
- case MACH_ARM:
- predefine("__arm__", 1, "1");
- switch (arch_fp_abi) {
- case FP_ABI_HARD:
- predefine("__ARM_PCS_VFP", 1, "1");
- break;
- case FP_ABI_SOFT:
- predefine("__SOFTFP__", 1, "1");
- /* fall-through */
- case FP_ABI_HYBRID:
- predefine("__ARM_PCS", 1, "1");
- break;
- }
- predefine("__VFP_FP__", 1, "1");
- break;
- case MACH_M68K:
- predefine("__m68k__", 1, "1");
- break;
- case MACH_MIPS64:
- predefine("__mips64", 1, "64");
- /* fall-through */
- case MACH_MIPS32:
- predefine("__mips__", 1, "1");
- predefine("__mips", 1, "%d", ptr_ctype.bit_size);
- predefine("_MIPS_SZINT", 1, "%d", int_ctype.bit_size);
- predefine("_MIPS_SZLONG", 1, "%d", long_ctype.bit_size);
- predefine("_MIPS_SZPTR", 1, "%d", ptr_ctype.bit_size);
- break;
- case MACH_PPC64:
- predefine("__powerpc64__", 1, "1");
- predefine("__ppc64__", 1, "1");
- predefine("__PPC64__", 1, "1");
- predefine("_ARCH_PPC64", 1, "1");
- /* fall-through */
- case MACH_PPC32:
- predefine("__powerpc__", 1, "1");
- predefine("__powerpc", 1, "1");
- predefine("__ppc__", 1, "1");
- predefine("__PPC__", 1, "1");
- predefine("__PPC", 1, "1");
- predefine("_ARCH_PPC", 1, "1");
- if (arch_big_endian)
- predefine("_BIG_ENDIAN", 1, "1");
- break;
- case MACH_RISCV64:
- case MACH_RISCV32:
- predefine("__riscv", 1, "1");
- predefine("__riscv_xlen", 1, "%d", ptr_ctype.bit_size);
- break;
- case MACH_S390X:
- predefine("__zarch__", 1, "1");
- predefine("__s390x__", 1, "1");
- case MACH_S390:
- predefine("__s390__", 1, "1");
- break;
- case MACH_SPARC64:
- predefine("__sparc_v9__", 1, "1");
- predefine("__sparcv9__", 1, "1");
- predefine("__sparcv9", 1, "1");
- predefine("__sparc64__", 1, "1");
- predefine("__arch64__", 1, "1");
- /* fall-through */
- case MACH_SPARC32:
- predefine("__sparc__", 1, "1");
- predefine("__sparc", 1, "1");
- break;
- case MACH_X86_64:
- if (arch_m64 != ARCH_LP32) {
- predefine("__x86_64__", 1, "1");
- predefine("__x86_64", 1, "1");
- predefine("__amd64__", 1, "1");
- predefine("__amd64", 1, "1");
- break;
- }
- /* fall-through */
- case MACH_I386:
- predefine("__i386__", 1, "1");
- predefine("__i386", 1, "1");
- break;
- }
-
if (fpic) {
predefine("__pic__", 0, "%d", fpic);
predefine("__PIC__", 0, "%d", fpic);
@@ -1540,6 +1455,8 @@ static void predefined_macros(void)
predefine("__PIE__", 0, "%d", fpie);
}
+ if (arch_target->predefine)
+ arch_target->predefine(arch_target);
predefined_cmodel();
}
diff --git a/target-arm.c b/target-arm.c
index f5af04ee..0d7c6134 100644
--- a/target-arm.c
+++ b/target-arm.c
@@ -3,6 +3,24 @@
#include "machine.h"
+static void predefine_arm(const struct target *self)
+{
+ predefine("__arm__", 1, "1");
+ predefine("__VFP_FP__", 1, "1");
+
+ switch (arch_fp_abi) {
+ case FP_ABI_HARD:
+ predefine("__ARM_PCS_VFP", 1, "1");
+ break;
+ case FP_ABI_SOFT:
+ predefine("__SOFTFP__", 1, "1");
+ /* fall-through */
+ case FP_ABI_HYBRID:
+ predefine("__ARM_PCS", 1, "1");
+ break;
+ }
+}
+
const struct target target_arm = {
.mach = MACH_ARM,
.bitness = ARCH_LP32,
@@ -13,4 +31,6 @@ const struct target target_arm = {
.bits_in_longdouble = 64,
.max_fp_alignment = 8,
+
+ .predefine = predefine_arm,
};
diff --git a/target-arm64.c b/target-arm64.c
index 1efd0899..cddabb82 100644
--- a/target-arm64.c
+++ b/target-arm64.c
@@ -9,6 +9,11 @@ static void init_arm64(const struct target *self)
arch_cmodel = CMODEL_SMALL;
}
+static void predefine_arm64(const struct target *self)
+{
+ predefine("__aarch64__", 1, "1");
+}
+
const struct target target_arm64 = {
.mach = MACH_ARM64,
.bitness = ARCH_LP64,
@@ -19,4 +24,5 @@ const struct target target_arm64 = {
.wchar = &uint_ctype,
.init = init_arm64,
+ .predefine = predefine_arm64,
};
diff --git a/target-m68k.c b/target-m68k.c
index 1646fceb..ed4a9273 100644
--- a/target-m68k.c
+++ b/target-m68k.c
@@ -3,6 +3,11 @@
#include "machine.h"
+static void predefine_m68k(const struct target *self)
+{
+ predefine("__m68k__", 1, "1");
+}
+
const struct target target_m68k = {
.mach = MACH_M68K,
.bitness = ARCH_LP32,
@@ -13,4 +18,6 @@ const struct target target_m68k = {
.bits_in_longdouble = 96,
.max_fp_alignment = 4,
+
+ .predefine = predefine_m68k,
};
diff --git a/target-mips.c b/target-mips.c
index 7e2b4446..395e6ff1 100644
--- a/target-mips.c
+++ b/target-mips.c
@@ -3,6 +3,21 @@
#include "machine.h"
+static void predefine_mips(const struct target *self)
+{
+ predefine("__mips__", 1, "1");
+ predefine("__mips", 1, "%d", ptr_ctype.bit_size);
+ predefine("_MIPS_SZINT", 1, "%d", int_ctype.bit_size);
+ predefine("_MIPS_SZLONG", 1, "%d", long_ctype.bit_size);
+ predefine("_MIPS_SZPTR", 1, "%d", ptr_ctype.bit_size);
+}
+
+
+static void predefine_mips32(const struct target *self)
+{
+ predefine_mips(self);
+}
+
const struct target target_mips32 = {
.mach = MACH_MIPS32,
.bitness = ARCH_LP32,
@@ -13,8 +28,18 @@ const struct target target_mips32 = {
.max_fp_alignment = 8,
.target_64bit = &target_mips64,
+
+ .predefine = predefine_mips32,
};
+
+static void predefine_mips64(const struct target *self)
+{
+ predefine("__mips64", 1, "64");
+
+ predefine_mips(self);
+}
+
const struct target target_mips64 = {
.mach = MACH_MIPS64,
.bitness = ARCH_LP64,
@@ -22,4 +47,6 @@ const struct target target_mips64 = {
.unsigned_char = 0,
.target_32bit = &target_mips32,
+
+ .predefine = predefine_mips64,
};
diff --git a/target-ppc.c b/target-ppc.c
index e867d9fe..21ce86d8 100644
--- a/target-ppc.c
+++ b/target-ppc.c
@@ -3,6 +3,24 @@
#include "machine.h"
+static void predefine_ppc(const struct target *self)
+{
+ predefine("__powerpc__", 1, "1");
+ predefine("__powerpc", 1, "1");
+ predefine("__ppc__", 1, "1");
+ predefine("__PPC__", 1, "1");
+ predefine("__PPC", 1, "1");
+ predefine("_ARCH_PPC", 1, "1");
+ if (arch_big_endian)
+ predefine("_BIG_ENDIAN", 1, "1");
+}
+
+
+static void predefine_ppc32(const struct target *self)
+{
+ predefine_ppc(self);
+}
+
const struct target target_ppc32 = {
.mach = MACH_PPC32,
.bitness = ARCH_LP32,
@@ -12,9 +30,21 @@ const struct target target_ppc32 = {
.wchar = &long_ctype,
.target_64bit = &target_ppc64,
+
+ .predefine = predefine_ppc32,
};
+static void predefine_ppc64(const struct target *self)
+{
+ predefine("__powerpc64__", 1, "1");
+ predefine("__ppc64__", 1, "1");
+ predefine("__PPC64__", 1, "1");
+ predefine("_ARCH_PPC64", 1, "1");
+
+ predefine_ppc(self);
+}
+
const struct target target_ppc64 = {
.mach = MACH_PPC64,
.bitness = ARCH_LP64,
@@ -22,4 +52,6 @@ const struct target target_ppc64 = {
.unsigned_char = 1,
.target_32bit = &target_ppc32,
+
+ .predefine = predefine_ppc64,
};
diff --git a/target-riscv.c b/target-riscv.c
index 09edfd7a..e7acb363 100644
--- a/target-riscv.c
+++ b/target-riscv.c
@@ -11,6 +11,12 @@ static void init_riscv(const struct target *self)
arch_cmodel = CMODEL_PIC;
}
+static void predefine_riscv(const struct target *self)
+{
+ predefine("__riscv", 1, "1");
+ predefine("__riscv_xlen", 1, "%d", ptr_ctype.bit_size);
+}
+
const struct target target_riscv32 = {
.mach = MACH_RISCV32,
.bitness = ARCH_LP32,
@@ -20,6 +26,7 @@ const struct target target_riscv32 = {
.target_64bit = &target_riscv64,
.init = init_riscv,
+ .predefine = predefine_riscv,
};
const struct target target_riscv64 = {
@@ -31,4 +38,5 @@ const struct target target_riscv64 = {
.target_32bit = &target_riscv32,
.init = init_riscv,
+ .predefine = predefine_riscv,
};
diff --git a/target-s390.c b/target-s390.c
index 277e0909..159a6b11 100644
--- a/target-s390.c
+++ b/target-s390.c
@@ -3,6 +3,11 @@
#include "machine.h"
+static void predefine_s390(const struct target *self)
+{
+ predefine("__s390__", 1, "1");
+}
+
const struct target target_s390 = {
.mach = MACH_S390,
.bitness = ARCH_LP32,
@@ -14,8 +19,19 @@ const struct target target_s390 = {
.max_fp_alignment = 8,
.target_64bit = &target_s390x,
+
+ .predefine = predefine_s390,
};
+
+static void predefine_s390x(const struct target *self)
+{
+ predefine("__zarch__", 1, "1");
+ predefine("__s390x__", 1, "1");
+
+ predefine_s390(self);
+}
+
const struct target target_s390x = {
.mach = MACH_S390X,
.bitness = ARCH_LP64,
@@ -26,4 +42,6 @@ const struct target target_s390x = {
.max_fp_alignment = 8,
.target_32bit = &target_s390,
+
+ .predefine = predefine_s390x,
};
diff --git a/target-sparc.c b/target-sparc.c
index ca9589f5..5267430f 100644
--- a/target-sparc.c
+++ b/target-sparc.c
@@ -3,6 +3,13 @@
#include "machine.h"
+static void predefine_sparc(const struct target *self)
+{
+ predefine("__sparc__", 1, "1");
+ predefine("__sparc", 1, "1");
+}
+
+
static void init_sparc32(const struct target *target)
{
if (arch_os == OS_SUNOS) {
@@ -14,6 +21,11 @@ static void init_sparc32(const struct target *target)
}
}
+static void predefine_sparc32(const struct target *self)
+{
+ predefine_sparc(self);
+}
+
const struct target target_sparc32 = {
.mach = MACH_SPARC32,
.bitness = ARCH_LP32,
@@ -25,8 +37,22 @@ const struct target target_sparc32 = {
.init = init_sparc32,
.target_64bit = &target_sparc64,
+
+ .predefine = predefine_sparc32,
};
+
+static void predefine_sparc64(const struct target *self)
+{
+ predefine("__sparc_v9__", 1, "1");
+ predefine("__sparcv9__", 1, "1");
+ predefine("__sparcv9", 1, "1");
+ predefine("__sparc64__", 1, "1");
+ predefine("__arch64__", 1, "1");
+
+ predefine_sparc(self);
+}
+
const struct target target_sparc64 = {
.mach = MACH_SPARC64,
.bitness = ARCH_LP64,
@@ -34,4 +60,6 @@ const struct target target_sparc64 = {
.unsigned_char = 0,
.target_32bit = &target_sparc32,
+
+ .predefine = predefine_sparc64,
};
diff --git a/target-x86.c b/target-x86.c
index eaca5e8b..046e346e 100644
--- a/target-x86.c
+++ b/target-x86.c
@@ -24,6 +24,13 @@ static void init_x86(const struct target *target)
}
}
+
+static void predefine_i386(const struct target *self)
+{
+ predefine("__i386__", 1, "1");
+ predefine("__i386", 1, "1");
+}
+
const struct target target_i386 = {
.mach = MACH_I386,
.bitness = ARCH_LP32,
@@ -36,8 +43,19 @@ const struct target target_i386 = {
.init = init_x86,
.target_64bit = &target_x86_64,
+
+ .predefine = predefine_i386,
};
+
+static void predefine_x86_64(const struct target *self)
+{
+ predefine("__x86_64__", 1, "1");
+ predefine("__x86_64", 1, "1");
+ predefine("__amd64__", 1, "1");
+ predefine("__amd64", 1, "1");
+}
+
const struct target target_x86_64 = {
.mach = MACH_X86_64,
.bitness = ARCH_LP64,
@@ -49,4 +67,6 @@ const struct target target_x86_64 = {
.init = init_x86,
.target_32bit = &target_i386,
+
+ .predefine = predefine_x86_64,
};
diff --git a/target.h b/target.h
index ebd8f1b1..8f39abb8 100644
--- a/target.h
+++ b/target.h
@@ -71,6 +71,7 @@ struct target {
const struct target *target_64bit;
void (*init)(const struct target *self);
+ void (*predefine)(const struct target *self);
};
extern const struct target target_default;