From dd8a0323d4a1b8e053436de843e1212d1763eabc Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Wed, 10 Jun 2020 18:22:46 +0200 Subject: arch: add specificities for Blackfin The real goal here is in fact to move the bfin-specfic builtins out of the main builtins table. Signed-off-by: Luc Van Oostenryck --- Makefile | 1 + builtin.c | 5 ----- machine.h | 1 + target-bfin.c | 26 ++++++++++++++++++++++++++ target.c | 2 ++ target.h | 1 + 6 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 target-bfin.c diff --git a/Makefile b/Makefile index 69fae482..bee6a324 100644 --- a/Makefile +++ b/Makefile @@ -67,6 +67,7 @@ LIB_OBJS += symbol.o LIB_OBJS += target.o LIB_OBJS += target-arm.o LIB_OBJS += target-arm64.o +LIB_OBJS += target-bfin.o LIB_OBJS += target-default.o LIB_OBJS += target-m68k.o LIB_OBJS += target-mips.o diff --git a/builtin.c b/builtin.c index 6a3de87b..a3bd0f7a 100644 --- a/builtin.c +++ b/builtin.c @@ -573,11 +573,6 @@ static const struct builtin_fn builtins_common[] = { { "__builtin_alpha_insql", &long_ctype, 0, { &long_ctype, &long_ctype }}, { "__builtin_alpha_inswl", &long_ctype, 0, { &long_ctype, &long_ctype }}, - // Blackfin-specific stuff - { "__builtin_bfin_csync", &void_ctype, 0 }, - { "__builtin_bfin_ssync", &void_ctype, 0 }, - { "__builtin_bfin_norm_fr1x32", &int_ctype, 0, { &int_ctype }}, - { } }; diff --git a/machine.h b/machine.h index a211345c..b9f22850 100644 --- a/machine.h +++ b/machine.h @@ -32,6 +32,7 @@ enum machine { MACH_RISCV32, MACH_RISCV64, MACH_SPARC32, MACH_SPARC64, MACH_S390, MACH_S390X, + MACH_BFIN, MACH_M68K, MACH_NIOS2, MACH_UNKNOWN diff --git a/target-bfin.c b/target-bfin.c new file mode 100644 index 00000000..b84cd5de --- /dev/null +++ b/target-bfin.c @@ -0,0 +1,26 @@ +#include "symbol.h" +#include "target.h" +#include "machine.h" +#include "builtin.h" + + +static void predefine_bfin(const struct target *self) +{ + predefine("__BFIN__", 1, "1"); + predefine("__bfin__", 1, "1"); +} + +static const struct builtin_fn builtins_bfin[] = { + { "__builtin_bfin_csync", &void_ctype, 0 }, + { "__builtin_bfin_ssync", &void_ctype, 0 }, + { "__builtin_bfin_norm_fr1x32", &int_ctype, 0, { &int_ctype }}, + { } +}; + +const struct target target_bfin = { + .mach = MACH_BFIN, + .bitness = ARCH_LP32, + + .predefine = predefine_bfin, + .builtins = builtins_bfin, +}; diff --git a/target.c b/target.c index 0ef0eb5a..1fd066da 100644 --- a/target.c +++ b/target.c @@ -60,6 +60,7 @@ static const struct target *targets[] = { [MACH_ARM] = &target_arm, [MACH_ARM64] = &target_arm64, [MACH_I386] = &target_i386, + [MACH_BFIN] = &target_bfin, [MACH_X86_64] = &target_x86_64, [MACH_MIPS32] = &target_mips32, [MACH_MIPS64] = &target_mips64, @@ -88,6 +89,7 @@ enum machine target_parse(const char *name) { "arm64", MACH_ARM64, 64, }, { "arm", MACH_ARM, 32, }, { "i386", MACH_I386, 32, }, + { "bfin", MACH_BFIN, 32, }, { "m68k", MACH_M68K, 32, }, { "mips", MACH_MIPS32, 0, }, { "nios2", MACH_NIOS2, 32, }, diff --git a/target.h b/target.h index 4c184d8f..9674d099 100644 --- a/target.h +++ b/target.h @@ -82,6 +82,7 @@ struct target { extern const struct target target_default; extern const struct target target_arm; extern const struct target target_arm64; +extern const struct target target_bfin; extern const struct target target_m68k; extern const struct target target_mips32; extern const struct target target_mips64; -- cgit 1.2.3-korg