1/* Definitions of target machine for GNU compiler. 2 MIPS SDE version. 3 Copyright (C) 2003, 2004, 2007, 2008, 2009 4 Free Software Foundation, Inc. 5 6This file is part of GCC. 7 8GCC is free software; you can redistribute it and/or modify 9it under the terms of the GNU General Public License as published by 10the Free Software Foundation; either version 3, or (at your option) 11any later version. 12 13GCC is distributed in the hope that it will be useful, 14but WITHOUT ANY WARRANTY; without even the implied warranty of 15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16GNU General Public License for more details. 17 18You should have received a copy of the GNU General Public License 19along with GCC; see the file COPYING3. If not see 20<http://www.gnu.org/licenses/>. */ 21 22#undef DRIVER_SELF_SPECS 23#define DRIVER_SELF_SPECS \ 24 /* Make sure a -mips option is present. This helps us to pick \ 25 the right multilib, and also makes the later specs easier \ 26 to write. */ \ 27 MIPS_ISA_LEVEL_SPEC, \ 28 \ 29 /* Infer the default float setting from -march. */ \ 30 MIPS_ARCH_FLOAT_SPEC, \ 31 \ 32 /* If no ABI option is specified, infer one from the ISA level \ 33 or -mgp setting. */ \ 34 "%{!mabi=*: %{" MIPS_32BIT_OPTION_SPEC ": -mabi=32;: -mabi=n32}}", \ 35 \ 36 /* Remove a redundant -mfp64 for -mabi=n32; we want the !mfp64 \ 37 multilibs. There's no need to check whether the architecture \ 38 is 64-bit; cc1 will complain if it isn't. */ \ 39 "%{mabi=n32: %<mfp64}", \ 40 \ 41 /* Make sure that an endian option is always present. This makes \ 42 things like LINK_SPEC easier to write. */ \ 43 "%{!EB:%{!EL:%(endian_spec)}}", \ 44 \ 45 /* -mcode-xonly is a traditional alias for -mcode-readable=pcrel and \ 46 -mno-data-in-code is a traditional alias for -mcode-readable=no. \ 47 The latter trumps the former. */ \ 48 "%{mno-data-in-code: -mcode-readable=no}", \ 49 "%{!mcode-readable=no: %{mcode-xonly: -mcode-readable=pcrel}}", \ 50 "%<mno-data-in-code %<mcode-xonly", \ 51 \ 52 /* Configuration-independent MIPS rules. */ \ 53 BASE_DRIVER_SELF_SPECS 54 55/* Use trap rather than break for all but MIPS I ISA. Force -no-mips16, 56 so that MIPS16 assembler code requires an explicit ".set mips16". 57 Very little hand-written MIPS16 assembler exists, and some build 58 systems expect code to be assembled as non-MIPS16 even if the 59 prevailing compiler flags select -mips16. */ 60#undef SUBTARGET_ASM_SPEC 61#define SUBTARGET_ASM_SPEC "\ 62%{!mips1:--trap} \ 63%{mips16:-no-mips16}" 64 65#undef LINK_SPEC 66#define LINK_SPEC "\ 67%(endian_spec) \ 68%{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32*} %{mips64*} \ 69%{bestGnum} \ 70%{shared} %{non_shared} %{call_shared} \ 71%{mabi=n32:-melf32%{EB:b}%{EL:l}tsmipn32} \ 72%{mabi=64:-melf64%{EB:b}%{EL:l}tsmip} \ 73%{mabi=32:-melf32%{EB:b}%{EL:l}tsmip}" 74 75#undef DEFAULT_SIGNED_CHAR 76#define DEFAULT_SIGNED_CHAR 0 77 78/* SDE-MIPS won't ever support SDB debugging info. */ 79#undef SDB_DEBUGGING_INFO 80 81/* Describe how we implement __builtin_eh_return. */ 82 83/* At the moment, nothing appears to use more than 2 EH data registers. 84 The chosen registers must not clash with the return register ($2), 85 EH_RETURN_STACKADJ ($3), or MIPS_EPILOGUE_TEMP ($5), and they must 86 be general MIPS16 registers. Pick $6 and $7. */ 87#undef EH_RETURN_DATA_REGNO 88#define EH_RETURN_DATA_REGNO(N) \ 89 ((N) < 2 ? 7 - (N) : INVALID_REGNUM) 90 91/* Use $5 as a temporary for both MIPS16 and non-MIPS16. */ 92#undef MIPS_EPILOGUE_TEMP_REGNUM 93#define MIPS_EPILOGUE_TEMP_REGNUM \ 94 (cfun->machine->interrupt_handler_p ? K0_REG_NUM : GP_REG_FIRST + 5) 95 96/* Using long will always be right for size_t and ptrdiff_t, since 97 sizeof(long) must equal sizeof(void *), following from the setting 98 of the -mlong64 option. */ 99#undef SIZE_TYPE 100#define SIZE_TYPE "long unsigned int" 101#undef PTRDIFF_TYPE 102#define PTRDIFF_TYPE "long int" 103 104/* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */ 105#define HANDLE_PRAGMA_PACK_PUSH_POP 1 106 107/* Use standard ELF-style local labels (not '$' as on early Irix). */ 108#undef LOCAL_LABEL_PREFIX 109#define LOCAL_LABEL_PREFIX "." 110 111/* Use periods rather than dollar signs in special g++ assembler names. */ 112#define NO_DOLLAR_IN_LABEL 113 114/* Attach a special .ident directive to the end of the file to identify 115 the version of GCC which compiled this code. */ 116#undef IDENT_ASM_OP 117#define IDENT_ASM_OP "\t.ident\t" 118 119/* Output #ident string into the ELF .comment section, so it doesn't 120 form part of the load image, and so that it can be stripped. */ 121#undef ASM_OUTPUT_IDENT 122#define ASM_OUTPUT_IDENT(STREAM, STRING) \ 123 fprintf (STREAM, "%s\"%s\"\n", IDENT_ASM_OP, STRING); 124 125/* Currently we don't support 128bit long doubles, so for now we force 126 n32 to be 64bit. */ 127#undef LONG_DOUBLE_TYPE_SIZE 128#define LONG_DOUBLE_TYPE_SIZE 64 129 130#ifdef IN_LIBGCC2 131#undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE 132#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64 133#endif 134 135/* Force all .init and .fini entries to be 32-bit, not mips16, so that 136 in a mixed environment they are all the same mode. The crti.asm and 137 crtn.asm files will also be compiled as 32-bit due to the 138 -no-mips16 flag in SUBTARGET_ASM_SPEC above. */ 139#undef CRT_CALL_STATIC_FUNCTION 140#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ 141 asm (SECTION_OP "\n\ 142 .set push\n\ 143 .set nomips16\n\ 144 jal " USER_LABEL_PREFIX #FUNC "\n\ 145 .set pop\n\ 146 " TEXT_SECTION_ASM_OP); 147