1/* Definitions of target machine for GNU compiler, for MIPS NetBSD systems. 2 Copyright (C) 1993-2015 Free Software Foundation, Inc. 3 4This file is part of GCC. 5 6GCC is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 3, or (at your option) 9any later version. 10 11GCC is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16You should have received a copy of the GNU General Public License 17along 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 >= 32 && mips_isa < 64) \ 88 builtin_define ("__mips=32"); \ 89 else if (mips_isa >= 64) \ 90 builtin_define ("__mips=64"); \ 91 if (mips_isa_rev > 0) \ 92 builtin_define_with_int_value ("__mips_isa_rev", \ 93 mips_isa_rev); \ 94 \ 95 if (TARGET_HARD_FLOAT) \ 96 builtin_define ("__mips_hard_float"); \ 97 else if (TARGET_SOFT_FLOAT) \ 98 builtin_define ("__mips_soft_float"); \ 99 \ 100 if (TARGET_SINGLE_FLOAT) \ 101 builtin_define ("__mips_single_float"); \ 102 \ 103 if (TARGET_BIG_ENDIAN) \ 104 builtin_define ("__MIPSEB__"); \ 105 else \ 106 builtin_define ("__MIPSEL__"); \ 107 \ 108 /* No language dialect defines. */ \ 109 \ 110 /* ABIs handled in TARGET_OS_CPP_BUILTINS. */ \ 111 } \ 112 while (0) 113 114 115/* Extra specs we need. */ 116#undef SUBTARGET_EXTRA_SPECS 117#define SUBTARGET_EXTRA_SPECS \ 118 { "netbsd_cpp_spec", NETBSD_CPP_SPEC }, \ 119 { "netbsd_link_spec", NETBSD_LINK_SPEC_ELF }, \ 120 { "netbsd_entry_point", NETBSD_ENTRY_POINT }, 121 122/* Provide a SUBTARGET_CPP_SPEC appropriate for NetBSD. */ 123 124#undef SUBTARGET_CPP_SPEC 125#define SUBTARGET_CPP_SPEC "%(netbsd_cpp_spec)" 126 127/* Provide a LINK_SPEC appropriate for a NetBSD/mips target. 128 This is a copy of LINK_SPEC from <netbsd-elf.h> tweaked for 129 the MIPS target. */ 130 131#undef LINK_SPEC 132#define LINK_SPEC \ 133 "%{EL:-m elf32lmip} \ 134 %{EB:-m elf32bmip} \ 135 %(endian_spec) \ 136 %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} \ 137 %{mips32r6} %{mips64} %{mips64r6} \ 138 %(netbsd_link_spec)" 139 140#define NETBSD_ENTRY_POINT "__start" 141 142#undef SUBTARGET_ASM_SPEC 143#define SUBTARGET_ASM_SPEC \ 144 "%{!mno-abicalls: \ 145 %{!fno-PIC:%{!fno-pic:-KPIC}}}" 146 147 148/* -G is incompatible with -KPIC which is the default, so only allow objects 149 in the small data section if the user explicitly asks for it. */ 150 151#undef MIPS_DEFAULT_GVALUE 152#define MIPS_DEFAULT_GVALUE 0 153 154 155#undef ASM_FINAL_SPEC 156#undef SET_ASM_OP 157 158 159/* NetBSD hasn't historically provided _flush_cache(), but rather 160 _cacheflush(), which takes the same arguments as the former. */ 161#undef CACHE_FLUSH_FUNC 162#define CACHE_FLUSH_FUNC "_cacheflush" 163 164 165/* Make gcc agree with <machine/ansi.h> */ 166 167#undef WCHAR_TYPE 168#define WCHAR_TYPE "int" 169 170#undef WCHAR_TYPE_SIZE 171#define WCHAR_TYPE_SIZE 32 172 173#undef WINT_TYPE 174#define WINT_TYPE "int" 175