1 /* Definitions of target machine for GNU compiler.
3 Copyright (C) 2003, 2004
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* Let the -march option set soft-float. */
24 #define MIPS_MARCH_CONTROLS_SOFT_FLOAT 1
26 #define DRIVER_SELF_SPECS \
27 /* Make sure a -mips option is present. This helps us to pick \
28 the right multilib, and also makes the later specs easier \
30 MIPS_ISA_LEVEL_SPEC, \
32 /* If no ABI option is specified, infer one from the ISA level \
34 "%{!mabi=*: %{" MIPS_32BIT_OPTION_SPEC ": -mabi=32;: -mabi=n32}}", \
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}" \
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)}}"
45 /* Use trap rather than break for all but MIPS I ISA. Force -no-mips16,
46 so that MIPS16 assembler code requires an explicit ".set mips16".
47 Very little hand-written MIPS16 assembler exists, and some build
48 systems expect code to be assembled as non-MIPS16 even if the
49 prevailing compiler flags select -mips16. */
50 #undef SUBTARGET_ASM_SPEC
51 #define SUBTARGET_ASM_SPEC "\
53 %{fPIC|fpic|fPIE|fpie:%{!mips16*:-KPIC}} \
59 %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips32r2} %{mips64} \
61 %{shared} %{non_shared} %{call_shared} \
62 %{mabi=n32:-melf32%{EB:b}%{EL:l}tsmipn32} \
63 %{mabi=64:-melf64%{EB:b}%{EL:l}tsmip} \
64 %{mabi=32:-melf32%{EB:b}%{EL:l}tsmip}"
66 #undef DEFAULT_SIGNED_CHAR
67 #define DEFAULT_SIGNED_CHAR 0
69 /* SDE-MIPS won't ever support SDB or MIPS debugging info. */
70 #undef SDB_DEBUGGING_INFO
71 #undef MIPS_DEBUGGING_INFO
73 /* Describe how we implement __builtin_eh_return. */
75 /* At the moment, nothing appears to use more than 2 EH data registers.
76 The chosen registers must not clash with the return register ($2),
77 EH_RETURN_STACKADJ ($3), or MIPS_EPILOGUE_TEMP ($5), and they must
78 be general MIPS16 registers. Pick $6 and $7. */
79 #undef EH_RETURN_DATA_REGNO
80 #define EH_RETURN_DATA_REGNO(N) \
81 ((N) < 2 ? 7 - (N) : INVALID_REGNUM)
83 /* Use $5 as a temporary for both MIPS16 and non-MIPS16. */
84 #undef MIPS_EPILOGUE_TEMP_REGNUM
85 #define MIPS_EPILOGUE_TEMP_REGNUM (GP_REG_FIRST + 5)
87 /* Using long will always be right for size_t and ptrdiff_t, since
88 sizeof(long) must equal sizeof(void *), following from the setting
89 of the -mlong64 option. */
91 #define SIZE_TYPE "long unsigned int"
93 #define PTRDIFF_TYPE "long int"
95 /* Enable parsing of #pragma pack(push,<n>) and #pragma pack(pop). */
96 #define HANDLE_PRAGMA_PACK_PUSH_POP 1
98 /* Use standard ELF-style local labels (not '$' as on early Irix). */
99 #undef LOCAL_LABEL_PREFIX
100 #define LOCAL_LABEL_PREFIX "."
102 /* Use periods rather than dollar signs in special g++ assembler names. */
103 #define NO_DOLLAR_IN_LABEL
105 /* Attach a special .ident directive to the end of the file to identify
106 the version of GCC which compiled this code. */
108 #define IDENT_ASM_OP "\t.ident\t"
110 /* Output #ident string into the ELF .comment section, so it doesn't
111 form part of the load image, and so that it can be stripped. */
112 #undef ASM_OUTPUT_IDENT
113 #define ASM_OUTPUT_IDENT(STREAM, STRING) \
114 fprintf (STREAM, "%s\"%s\"\n", IDENT_ASM_OP, STRING);
116 /* Currently we don't support 128bit long doubles, so for now we force
118 #undef LONG_DOUBLE_TYPE_SIZE
119 #define LONG_DOUBLE_TYPE_SIZE 64
122 #undef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
123 #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 64
126 /* This version of _mcount does not pop 2 words from the stack. */
127 #undef FUNCTION_PROFILER
128 #define FUNCTION_PROFILER(FILE, LABELNO) \
130 fprintf (FILE, "\t.set\tnoat\n"); \
131 /* MIPS16 code passes saved $ra in $v1 instead of $at. */ \
132 fprintf (FILE, "\tmove\t%s,%s\n", \
133 reg_names[GP_REG_FIRST + (TARGET_MIPS16 ? 3 : 1)], \
134 reg_names[GP_REG_FIRST + 31]); \
135 fprintf (FILE, "\tjal\t_mcount\n"); \
136 fprintf (FILE, "\t.set\tat\n"); \
139 /* Force all .init and .fini entries to be 32-bit, not mips16, so that
140 in a mixed environment they are all the same mode. The crti.asm and
141 crtn.asm files will also be compiled as 32-bit due to the
142 -no-mips16 flag in SUBTARGET_ASM_SPEC above. */
143 #undef CRT_CALL_STATIC_FUNCTION
144 #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
148 jal " USER_LABEL_PREFIX #FUNC "\n\
150 " TEXT_SECTION_ASM_OP);