(root)/
gcc-13.2.0/
gcc/
config/
mips/
netbsd.h
       1  /* Definitions of target machine for GNU compiler, for MIPS NetBSD systems.
       2     Copyright (C) 1993-2023 Free Software Foundation, Inc.
       3  
       4  This file is part of GCC.
       5  
       6  GCC is free software; you can redistribute it and/or modify
       7  it under the terms of the GNU General Public License as published by
       8  the Free Software Foundation; either version 3, or (at your option)
       9  any later version.
      10  
      11  GCC is distributed in the hope that it will be useful,
      12  but WITHOUT ANY WARRANTY; without even the implied warranty of
      13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14  GNU General Public License for more details.
      15  
      16  You should have received a copy of the GNU General Public License
      17  along with GCC; see the file COPYING3.  If not see
      18  <http://www.gnu.org/licenses/>.  */
      19  
      20  
      21  /* Define default target values.  */
      22  
      23  #define TARGET_OS_CPP_BUILTINS()			\
      24    do							\
      25      {							\
      26        NETBSD_OS_CPP_BUILTINS_ELF();			\
      27        builtin_define ("__NO_LEADING_UNDERSCORES__");	\
      28        builtin_define ("__GP_SUPPORT__");		\
      29        if (TARGET_LONG64)				\
      30  	builtin_define ("__LONG64");			\
      31  							\
      32        if (TARGET_ABICALLS)				\
      33  	builtin_define ("__ABICALLS__");		\
      34  							\
      35        if (mips_abi == ABI_32)				\
      36  	builtin_define ("__mips_o32");			\
      37        else if (mips_abi == ABI_EABI)			\
      38  	builtin_define ("__mips_eabi");			\
      39        else if (mips_abi == ABI_N32)			\
      40  	builtin_define ("__mips_n32");			\
      41        else if (mips_abi == ABI_64)			\
      42  	builtin_define ("__mips_n64");			\
      43        else if (mips_abi == ABI_O64)			\
      44  	builtin_define ("__mips_o64");			\
      45      }							\
      46    while (0)
      47  
      48  /* The generic MIPS TARGET_CPU_CPP_BUILTINS are incorrect for NetBSD.
      49     Specifically, they define too many namespace-invasive macros.  Override
      50     them here.  Note this is structured for easy comparison to the version
      51     in mips.h.
      52  
      53     FIXME: This probably isn't the best solution.  But in the absence
      54     of something better, it will have to do, for now.  */
      55  
      56  #undef TARGET_CPU_CPP_BUILTINS
      57  #define TARGET_CPU_CPP_BUILTINS()				\
      58    do								\
      59      {								\
      60        builtin_assert ("cpu=mips");				\
      61        builtin_define ("__mips__");				\
      62        builtin_define ("_mips");					\
      63  								\
      64        /* No _R3000 or _R4000.  */				\
      65        if (TARGET_64BIT)						\
      66  	builtin_define ("__mips64");				\
      67  								\
      68        if (TARGET_FLOAT64)					\
      69  	builtin_define ("__mips_fpr=64");			\
      70        else							\
      71  	builtin_define ("__mips_fpr=32");			\
      72  								\
      73        if (TARGET_MIPS16)					\
      74  	builtin_define ("__mips16");				\
      75  								\
      76        MIPS_CPP_SET_PROCESSOR ("_MIPS_ARCH", mips_arch_info);	\
      77        MIPS_CPP_SET_PROCESSOR ("_MIPS_TUNE", mips_tune_info);	\
      78  								\
      79        if (ISA_MIPS1)						\
      80  	builtin_define ("__mips=1");				\
      81        else if (ISA_MIPS2)					\
      82  	builtin_define ("__mips=2");				\
      83        else if (ISA_MIPS3)					\
      84  	builtin_define ("__mips=3");				\
      85        else if (ISA_MIPS4)					\
      86  	builtin_define ("__mips=4");				\
      87        else if (mips_isa >= MIPS_ISA_MIPS32			\
      88  	       && mips_isa < MIPS_ISA_MIPS64)			\
      89  	builtin_define ("__mips=32");				\
      90        else if (mips_isa >= MIPS_ISA_MIPS64)			\
      91  	builtin_define ("__mips=64");				\
      92        if (mips_isa_rev > 0)					\
      93          builtin_define_with_int_value ("__mips_isa_rev",	\
      94                                         mips_isa_rev);		\
      95  								\
      96        if (TARGET_HARD_FLOAT)					\
      97  	builtin_define ("__mips_hard_float");			\
      98        else if (TARGET_SOFT_FLOAT)				\
      99  	builtin_define ("__mips_soft_float");			\
     100  								\
     101        if (TARGET_SINGLE_FLOAT)					\
     102  	builtin_define ("__mips_single_float");			\
     103  								\
     104        if (TARGET_BIG_ENDIAN)					\
     105  	builtin_define ("__MIPSEB__");				\
     106        else							\
     107  	builtin_define ("__MIPSEL__");				\
     108  								\
     109        /* No language dialect defines.  */			\
     110  								\
     111        /* ABIs handled in TARGET_OS_CPP_BUILTINS.  */		\
     112      }								\
     113    while (0)
     114  
     115  
     116  /* Extra specs we need.  */
     117  #undef SUBTARGET_EXTRA_SPECS
     118  #define SUBTARGET_EXTRA_SPECS						\
     119    { "netbsd_cpp_spec",		NETBSD_CPP_SPEC },			\
     120    { "netbsd_link_spec",		NETBSD_LINK_SPEC_ELF },			\
     121    { "netbsd_entry_point",	NETBSD_ENTRY_POINT },
     122  
     123  /* Provide a SUBTARGET_CPP_SPEC appropriate for NetBSD.  */
     124  
     125  #undef SUBTARGET_CPP_SPEC
     126  #define SUBTARGET_CPP_SPEC "%(netbsd_cpp_spec)"
     127  
     128  /* Provide a LINK_SPEC appropriate for a NetBSD/mips target.
     129     This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for
     130     the MIPS target.  */
     131  
     132  #undef LINK_SPEC
     133  #define LINK_SPEC \
     134    "%{EL:-m elf32lmip} \
     135     %{EB:-m elf32bmip} \
     136     %(endian_spec) \
     137     %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} \
     138     %{mips32r6} %{mips64} %{mips64r6} \
     139     %(netbsd_link_spec)"
     140  
     141  #define NETBSD_ENTRY_POINT "__start"
     142  
     143  #undef SUBTARGET_ASM_SPEC
     144  #define SUBTARGET_ASM_SPEC \
     145    "%{!mno-abicalls: \
     146       %{!fno-PIC:%{!fno-pic:-KPIC}}}"
     147  
     148  
     149  /* -G is incompatible with -KPIC which is the default, so only allow objects
     150     in the small data section if the user explicitly asks for it.  */
     151  
     152  #undef MIPS_DEFAULT_GVALUE
     153  #define MIPS_DEFAULT_GVALUE 0
     154  
     155  
     156  #undef ASM_FINAL_SPEC
     157  #undef SET_ASM_OP
     158  
     159  
     160  /* NetBSD hasn't historically provided _flush_cache(), but rather
     161     _cacheflush(), which takes the same arguments as the former.  */
     162  #undef CACHE_FLUSH_FUNC
     163  #define CACHE_FLUSH_FUNC "_cacheflush"
     164  
     165  
     166  /* Make gcc agree with <machine/ansi.h> */
     167  
     168  #undef WCHAR_TYPE
     169  #define WCHAR_TYPE "int"
     170  
     171  #undef WCHAR_TYPE_SIZE
     172  #define WCHAR_TYPE_SIZE 32
     173  
     174  #undef WINT_TYPE
     175  #define WINT_TYPE "int"