From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1873) id D46A5389244B; Sun, 7 Mar 2021 17:01:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D46A5389244B Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Iain Buclaw To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/ibuclaw/heads/darwin)] d: Implement __traits(getTargetInfo) X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/users/ibuclaw/heads/darwin X-Git-Oldrev: 422366ef65da54dd835ff23216508084dadfcc2c X-Git-Newrev: a86896ba2b46f09cada224816e3bf75eef10d59a Message-Id: <20210307170134.D46A5389244B@sourceware.org> Date: Sun, 7 Mar 2021 17:01:34 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Mar 2021 17:01:34 -0000 https://gcc.gnu.org/g:a86896ba2b46f09cada224816e3bf75eef10d59a commit a86896ba2b46f09cada224816e3bf75eef10d59a Author: Iain Buclaw Date: Fri Dec 4 23:04:21 2020 +0100 d: Implement __traits(getTargetInfo) Diff: --- gcc/config/aarch64/aarch64-d.c | 23 ++++++++++++++++++ gcc/config/arm/arm-d.c | 53 ++++++++++++++++++++++++++++++++++++------ gcc/config/darwin-d.c | 26 +++++++++++++++++++++ gcc/config/dragonfly-d.c | 26 +++++++++++++++++++++ gcc/config/freebsd-d.c | 26 +++++++++++++++++++++ gcc/config/glibc-d.c | 26 +++++++++++++++++++++ gcc/config/i386/i386-d.c | 28 ++++++++++++++++++++++ gcc/config/i386/i386-protos.h | 1 + gcc/config/i386/i386.h | 3 ++- gcc/config/mips/mips-d.c | 30 ++++++++++++++++++++++++ gcc/config/netbsd-d.c | 26 +++++++++++++++++++++ gcc/config/pa/pa-d.c | 28 ++++++++++++++++++++++ gcc/config/riscv/riscv-d.c | 46 ++++++++++++++++++++++++++++++++++++ gcc/config/rs6000/rs6000-d.c | 30 ++++++++++++++++++++++++ gcc/config/s390/s390-d.c | 30 ++++++++++++++++++++++++ gcc/config/sol2-d.c | 26 +++++++++++++++++++++ gcc/config/sparc/sparc-d.c | 28 ++++++++++++++++++++++ gcc/d/d-target.cc | 2 ++ gcc/d/d-target.def | 20 ++++++++++++++++ gcc/d/dmd/traits.c | 1 + gcc/doc/tm.texi | 14 +++++++++++ gcc/doc/tm.texi.in | 4 ++++ 22 files changed, 489 insertions(+), 8 deletions(-) diff --git a/gcc/config/aarch64/aarch64-d.c b/gcc/config/aarch64/aarch64-d.c index 5c9b4fa6fb8..190f6037d42 100644 --- a/gcc/config/aarch64/aarch64-d.c +++ b/gcc/config/aarch64/aarch64-d.c @@ -29,3 +29,26 @@ aarch64_d_target_versions (void) d_add_builtin_version ("AArch64"); d_add_builtin_version ("D_HardFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +aarch64_d_handle_target_float_abi (void) +{ + const char *abi = "hard"; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +aarch64_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", aarch64_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/arm/arm-d.c b/gcc/config/arm/arm-d.c index 76ede3b6d44..4ecab686cf3 100644 --- a/gcc/config/arm/arm-d.c +++ b/gcc/config/arm/arm-d.c @@ -36,18 +36,57 @@ arm_d_target_versions (void) d_add_builtin_version ("ARM_Thumb"); } - if (TARGET_HARD_FLOAT_ABI) + if (arm_float_abi == ARM_FLOAT_ABI_HARD) d_add_builtin_version ("ARM_HardFloat"); - else - { - if (TARGET_SOFT_FLOAT) - d_add_builtin_version ("ARM_SoftFloat"); - else if (TARGET_HARD_FLOAT) + else if (arm_float_abi == ARM_FLOAT_ABI_SOFT) + d_add_builtin_version ("ARM_SoftFloat"); + else if (arm_float_abi == ARM_FLOAT_ABI_SOFTFP) d_add_builtin_version ("ARM_SoftFP"); - } if (TARGET_SOFT_FLOAT) d_add_builtin_version ("D_SoftFloat"); else if (TARGET_HARD_FLOAT) d_add_builtin_version ("D_HardFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +arm_d_handle_target_float_abi (void) +{ + const char *abi; + + switch (arm_float_abi) + { + case ARM_FLOAT_ABI_HARD: + abi = "hard"; + break; + + case ARM_FLOAT_ABI_SOFT: + abi = "soft"; + break; + + case ARM_FLOAT_ABI_SOFTFP: + abi = "softfp"; + break; + + default: + abi = ""; + break; + } + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +arm_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", arm_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/darwin-d.c b/gcc/config/darwin-d.c index afc32da4ad8..67d69b721b5 100644 --- a/gcc/config/darwin-d.c +++ b/gcc/config/darwin-d.c @@ -32,9 +32,35 @@ darwin_d_os_builtins (void) d_add_builtin_version ("darwin"); } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +darwin_d_handle_target_object_format (void) +{ + const char *objfmt = "macho"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets. */ + +static void +darwin_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", darwin_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS darwin_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO darwin_d_register_target_info + /* Define TARGET_D_MINFO_SECTION for Darwin targets. */ #undef TARGET_D_MINFO_SECTION diff --git a/gcc/config/dragonfly-d.c b/gcc/config/dragonfly-d.c index 76f4cc02ff7..dc301b54e8f 100644 --- a/gcc/config/dragonfly-d.c +++ b/gcc/config/dragonfly-d.c @@ -31,7 +31,33 @@ dragonfly_d_os_builtins (void) d_add_builtin_version ("Posix"); } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +dragonfly_d_handle_target_object_format (void) +{ + const char *objfmt = "elf"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for DragonFly targets. */ + +static void +dragonfly_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", dragonfly_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS dragonfly_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO dragonfly_d_register_target_info + struct gcc_targetdm targetdm = TARGETDM_INITIALIZER; diff --git a/gcc/config/freebsd-d.c b/gcc/config/freebsd-d.c index 425ca8365ba..c39f6897223 100644 --- a/gcc/config/freebsd-d.c +++ b/gcc/config/freebsd-d.c @@ -36,7 +36,33 @@ freebsd_d_os_builtins (void) d_add_builtin_version ("Posix"); } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +freebsd_d_handle_target_object_format (void) +{ + const char *objfmt = "elf"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for FreeBSD targets. */ + +static void +freebsd_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", freebsd_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS freebsd_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO freebsd_d_register_target_info + struct gcc_targetdm targetdm = TARGETDM_INITIALIZER; diff --git a/gcc/config/glibc-d.c b/gcc/config/glibc-d.c index 092c5d805a6..c98d494cd77 100644 --- a/gcc/config/glibc-d.c +++ b/gcc/config/glibc-d.c @@ -42,7 +42,33 @@ glibc_d_os_builtins (void) #endif } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +glibc_d_handle_target_object_format (void) +{ + const char *objfmt = "elf"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Glibc targets. */ + +static void +glibc_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", glibc_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS glibc_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO glibc_d_register_target_info + struct gcc_targetdm targetdm = TARGETDM_INITIALIZER; diff --git a/gcc/config/i386/i386-d.c b/gcc/config/i386/i386-d.c index cbd3ceb187d..ac031a08640 100644 --- a/gcc/config/i386/i386-d.c +++ b/gcc/config/i386/i386-d.c @@ -42,3 +42,31 @@ ix86_d_target_versions (void) else d_add_builtin_version ("D_SoftFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +ix86_d_handle_target_float_abi (void) +{ + const char *abi; + + if (! (TARGET_80387 || TARGET_FLOAT_RETURNS_IN_80387)) + abi = "soft"; + else + abi = "hard"; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +ix86_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", ix86_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index 9f8a69ea7dc..92549cb4522 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -264,6 +264,7 @@ extern void ix86_register_pragmas (void); /* In i386-d.c */ extern void ix86_d_target_versions (void); +extern void ix86_d_register_target_info (void); /* In winnt.c */ extern void i386_pe_unique_section (tree, int); diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 69fddcafd31..38d01404f4c 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -799,8 +799,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); /* Target Pragmas. */ #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas () -/* Target CPU versions for D. */ +/* Target hooks for D language. */ #define TARGET_D_CPU_VERSIONS ix86_d_target_versions +#define TARGET_D_REGISTER_CPU_TARGET_INFO ix86_d_register_target_info #ifndef CC1_SPEC #define CC1_SPEC "%(cc1_cpu) " diff --git a/gcc/config/mips/mips-d.c b/gcc/config/mips/mips-d.c index dad101cf7eb..205ee5359c5 100644 --- a/gcc/config/mips/mips-d.c +++ b/gcc/config/mips/mips-d.c @@ -54,3 +54,33 @@ mips_d_target_versions (void) d_add_builtin_version ("D_SoftFloat"); } } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +mips_d_handle_target_float_abi (void) +{ + const char *abi; + + if (TARGET_HARD_FLOAT_ABI) + abi = "hard"; + else if (TARGET_SOFT_FLOAT_ABI) + abi = "soft"; + else + abi = ""; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +mips_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", mips_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/netbsd-d.c b/gcc/config/netbsd-d.c index c3ac01067fe..090586c673f 100644 --- a/gcc/config/netbsd-d.c +++ b/gcc/config/netbsd-d.c @@ -33,7 +33,33 @@ netbsd_d_os_builtins (void) d_add_builtin_version ("NetBSD"); } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +netbsd_d_handle_target_object_format (void) +{ + const char *objfmt = "elf"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for NetBSD targets. */ + +static void +netbsd_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", netbsd_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS netbsd_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO netbsd_d_register_target_info + struct gcc_targetdm targetdm = TARGETDM_INITIALIZER; diff --git a/gcc/config/pa/pa-d.c b/gcc/config/pa/pa-d.c index 1de49df12cc..80c36153a9f 100644 --- a/gcc/config/pa/pa-d.c +++ b/gcc/config/pa/pa-d.c @@ -37,3 +37,31 @@ pa_d_target_versions (void) else d_add_builtin_version ("D_HardFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +pa_d_handle_target_float_abi (void) +{ + const char *abi; + + if (TARGET_DISABLE_FPREGS || TARGET_SOFT_FLOAT) + abi = "soft"; + else + abi = "hard"; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +pa_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", pa_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/riscv/riscv-d.c b/gcc/config/riscv/riscv-d.c index 2b690b18cfd..c3fc08edf75 100644 --- a/gcc/config/riscv/riscv-d.c +++ b/gcc/config/riscv/riscv-d.c @@ -37,3 +37,49 @@ riscv_d_target_versions (void) else d_add_builtin_version ("D_SoftFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +riscv_d_handle_target_float_abi (void) +{ + const char *abi; + + switch (riscv_abi) + { + case ABI_ILP32E: + case ABI_ILP32: + case ABI_LP64: + abi = "soft"; + break; + + case ABI_ILP32F: + case ABI_LP64F: + abi = "single"; + break; + + case ABI_ILP32D: + case ABI_LP64D: + abi = "double"; + break; + + default: + abi = ""; + break; + } + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +riscv_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", riscv_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/rs6000/rs6000-d.c b/gcc/config/rs6000/rs6000-d.c index 14c4133f305..3576f479c79 100644 --- a/gcc/config/rs6000/rs6000-d.c +++ b/gcc/config/rs6000/rs6000-d.c @@ -43,3 +43,33 @@ rs6000_d_target_versions (void) d_add_builtin_version ("D_SoftFloat"); } } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +rs6000_d_handle_target_float_abi (void) +{ + const char *abi; + + if (TARGET_HARD_FLOAT) + abi = "hard"; + else if (TARGET_SOFT_FLOAT) + abi = "soft"; + else + abi = ""; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +rs6000_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", rs6000_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/s390/s390-d.c b/gcc/config/s390/s390-d.c index 155144ce7b8..dbd8a34c427 100644 --- a/gcc/config/s390/s390-d.c +++ b/gcc/config/s390/s390-d.c @@ -39,3 +39,33 @@ s390_d_target_versions (void) else if (TARGET_HARD_FLOAT) d_add_builtin_version ("D_HardFloat"); } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +s390_d_handle_target_float_abi (void) +{ + const char *abi; + + if (TARGET_HARD_FLOAT) + abi = "hard"; + else if (TARGET_SOFT_FLOAT) + abi = "soft"; + else + abi = ""; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +s390_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", s390_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/config/sol2-d.c b/gcc/config/sol2-d.c index 529d365296c..650cb371927 100644 --- a/gcc/config/sol2-d.c +++ b/gcc/config/sol2-d.c @@ -33,7 +33,33 @@ solaris_d_os_builtins (void) d_add_builtin_version ("Solaris"); \ } +/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */ + +static tree +solaris_d_handle_target_object_format (void) +{ + const char *objfmt = "elf"; + + return build_string_literal (strlen (objfmt) + 1, objfmt); +} + +/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Solaris targets. */ + +static void +solaris_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "objectFormat", solaris_d_handle_target_object_format }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} + #undef TARGET_D_OS_VERSIONS #define TARGET_D_OS_VERSIONS solaris_d_os_builtins +#undef TARGET_D_REGISTER_OS_TARGET_INFO +#define TARGET_D_REGISTER_OS_TARGET_INFO solaris_d_register_target_info + struct gcc_targetdm targetdm = TARGETDM_INITIALIZER; diff --git a/gcc/config/sparc/sparc-d.c b/gcc/config/sparc/sparc-d.c index 186e965ae84..118d398a60f 100644 --- a/gcc/config/sparc/sparc-d.c +++ b/gcc/config/sparc/sparc-d.c @@ -46,3 +46,31 @@ sparc_d_target_versions (void) d_add_builtin_version ("SPARC_SoftFloat"); } } + +/* Handle a call to `__traits(getTargetInfo, "floatAbi")'. */ + +static tree +sparc_d_handle_target_float_abi (void) +{ + const char *abi; + + if (TARGET_FPU) + abi = "hard"; + else + abi = "soft"; + + return build_string_literal (strlen (abi) + 1, abi); +} + +/* Implement TARGET_D_REGISTER_CPU_TARGET_INFO. */ + +void +sparc_d_register_target_info (void) +{ + const struct d_target_info_spec handlers[] = { + { "floatAbi", sparc_d_handle_target_float_abi }, + { NULL, NULL }, + }; + + d_add_target_info_handlers (handlers); +} diff --git a/gcc/d/d-target.cc b/gcc/d/d-target.cc index d50fcef22e2..d8ca6fbc0ef 100644 --- a/gcc/d/d-target.cc +++ b/gcc/d/d-target.cc @@ -189,6 +189,8 @@ Target::_init (const Param &) /* Initialize target info tables, the keys required by the language are added last, so that the OS and CPU handlers can override. */ + targetdm.d_register_cpu_target_info (); + targetdm.d_register_os_target_info (); d_add_target_info_handlers (d_language_target_info); } diff --git a/gcc/d/d-target.def b/gcc/d/d-target.def index d1426a17e99..55b7a830bb0 100644 --- a/gcc/d/d-target.def +++ b/gcc/d/d-target.def @@ -46,6 +46,26 @@ relating to the target operating system.", void, (void), hook_void_void) +/* getTargetInfo keys relating to the target CPU. */ +DEFHOOK +(d_register_cpu_target_info, + "Register all target information keys relating to the target CPU using the\n\ +function @code{d_add_target_info_handlers}, which takes a\n\ +@samp{struct d_target_info_spec} (defined in @file{d/d-target.h}). The keys\n\ +added by this hook are made available at compile time by the\n\ +@code{__traits(getTargetInfo)} extension, the result is an expression\n\ +describing the requested target information.", + void, (void), + hook_void_void) + +/* getTargetInfo keys relating to the target OS. */ +DEFHOOK +(d_register_os_target_info, + "Same as @code{TARGET_D_CPU_TARGET_INFO}, but is used for keys relating to\n\ +the target operating system.", + void, (void), + hook_void_void) + /* ModuleInfo section name and brackets. */ DEFHOOKPOD (d_minfo_section, diff --git a/gcc/d/dmd/traits.c b/gcc/d/dmd/traits.c index b7c612c2af2..acffce7bd69 100644 --- a/gcc/d/dmd/traits.c +++ b/gcc/d/dmd/traits.c @@ -31,6 +31,7 @@ #include "module.h" #include "attrib.h" #include "parse.h" +#include "target.h" #include "root/speller.h" #include "target.h" diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b272fa4806d..e8036b78a63 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -10808,6 +10808,20 @@ Similarly to @code{TARGET_D_CPU_VERSIONS}, but is used for versions relating to the target operating system. @end deftypefn +@deftypefn {D Target Hook} void TARGET_D_REGISTER_CPU_TARGET_INFO (void) +Register all target information keys relating to the target CPU using the +function @code{d_add_target_info_handlers}, which takes a +@samp{struct d_target_info_spec} (defined in @file{d/d-target.h}). The keys +added by this hook are made available at compile time by the +@code{__traits(getTargetInfo)} extension, the result is an expression +describing the requested target information. +@end deftypefn + +@deftypefn {D Target Hook} void TARGET_D_REGISTER_OS_TARGET_INFO (void) +Same as @code{TARGET_D_CPU_TARGET_INFO}, but is used for keys relating to +the target operating system. +@end deftypefn + @deftypevr {D Target Hook} {const char *} TARGET_D_MINFO_SECTION Contains the name of the section in which module info references should be placed. This section is expected to be bracketed by two symbols to indicate diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index bf724dc093c..9c8cd125a05 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -7357,6 +7357,10 @@ floating-point support; they are not included in this mechanism. @hook TARGET_D_OS_VERSIONS +@hook TARGET_D_REGISTER_CPU_TARGET_INFO + +@hook TARGET_D_REGISTER_OS_TARGET_INFO + @hook TARGET_D_MINFO_SECTION @hook TARGET_D_MINFO_START_NAME