1 /* Definitions of target machine for GNU compiler. Vxworks PowerPC version. 2 Copyright (C) 1996, 2000, 2002, 2003, 2004, 2005 3 Free Software Foundation, Inc. 4 Contributed by CodeSourcery, LLC. 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 2, or (at your option) any later 11 version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 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 the Free 20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 21 02110-1301, USA. */ 22 23 /* Note to future editors: VxWorks is mostly an EABI target. We do 24 not use rs6000/eabi.h because we would have to override most of 25 it anyway. However, if you change that file, consider making 26 analogous changes here too. */ 27 28 #undef TARGET_VERSION 29 #define TARGET_VERSION fprintf (stderr, " (PowerPC VxWorks)"); 30 31 /* CPP predefined macros. */ 32 33 #undef TARGET_OS_CPP_BUILTINS 34 #define TARGET_OS_CPP_BUILTINS() \ 35 do \ 36 { \ 37 builtin_define ("__ppc"); \ 38 builtin_define ("__EABI__"); \ 39 builtin_define ("__ELF__"); \ 40 builtin_define ("__vxworks"); \ 41 builtin_define ("__VXWORKS__"); \ 42 if (!TARGET_SOFT_FLOAT) \ 43 builtin_define ("__hardfp"); \ 44 \ 45 /* C89 namespace violation! */ \ 46 builtin_define ("CPU_FAMILY=PPC"); \ 47 } \ 48 while (0) 49 50 /* Only big endian PPC is supported by VxWorks. */ 51 #undef BYTES_BIG_ENDIAN 52 #define BYTES_BIG_ENDIAN 1 53 54 /* We have to kill off the entire specs set created by rs6000/sysv4.h 55 and substitute our own set. The top level vxworks.h has done some 56 of this for us. */ 57 58 #undef SUBTARGET_EXTRA_SPECS 59 #undef CPP_SPEC 60 #undef CC1_SPEC 61 #undef ASM_SPEC 62 63 #define SUBTARGET_EXTRA_SPECS /* none needed */ 64 65 /* FIXME: The only reason we allow no -mcpu switch at all is because 66 config-ml.in insists on a "." multilib. */ 67 #define CPP_SPEC \ 68 "%{!DCPU=*: \ 69 %{mcpu=403 : -DCPU=PPC403 ; \ 70 mcpu=405 : -DCPU=PPC405 ; \ 71 mcpu=440 : -DCPU=PPC440 ; \ 72 mcpu=603 : -DCPU=PPC603 ; \ 73 mcpu=604 : -DCPU=PPC604 ; \ 74 mcpu=860 : -DCPU=PPC860 ; \ 75 mcpu=8540: -DCPU=PPC85XX ; \ 76 : -DCPU=PPC604 }}" \ 77 VXWORKS_ADDITIONAL_CPP_SPEC 78 79 #define CC1_SPEC \ 80 "%{G*} %{mno-sdata:-msdata=none} %{msdata:-msdata=default} \ 81 %{mlittle|mlittle-endian:-mstrict-align} \ 82 %{profile: -p} \ 83 %{fvec:-maltivec} %{fvec-eabi:-maltivec -mabi=altivec}" 84 85 #define ASM_SPEC \ 86 "%(asm_cpu) \ 87 %{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \ 88 %{v:-v} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ 89 %{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} -mbig" 90 91 #undef LIB_SPEC 92 #define LIB_SPEC VXWORKS_LIB_SPEC 93 #undef LINK_SPEC 94 #define LINK_SPEC VXWORKS_LINK_SPEC 95 #undef STARTFILE_SPEC 96 #define STARTFILE_SPEC VXWORKS_STARTFILE_SPEC 97 #undef ENDFILE_SPEC 98 #define ENDFILE_SPEC VXWORKS_ENDFILE_SPEC 99 100 /* There is no default multilib. */ 101 #undef MULTILIB_DEFAULTS 102 103 #undef TARGET_DEFAULT 104 #define TARGET_DEFAULT \ 105 (MASK_POWERPC | MASK_NEW_MNEMONICS | MASK_EABI | MASK_STRICT_ALIGN) 106 107 #undef PROCESSOR_DEFAULT 108 #define PROCESSOR_DEFAULT PROCESSOR_PPC604 109 110 /* Nor sdata, for kernel mode. We use this in 111 SUBSUBTARGET_INITIALIZE_OPTIONS, after rs6000_rtp has been initialized. */ 112 #undef SDATA_DEFAULT_SIZE 113 #define SDATA_DEFAULT_SIZE (TARGET_VXWORKS_RTP ? 8 : 0) 114 115 #undef STACK_BOUNDARY 116 #define STACK_BOUNDARY (16*BITS_PER_UNIT) 117 /* Override sysv4.h, reset to the default. */ 118 #undef PREFERRED_STACK_BOUNDARY 119 120 /* Enable SPE */ 121 #undef TARGET_SPE_ABI 122 #undef TARGET_SPE 123 #undef TARGET_E500 124 #undef TARGET_ISEL 125 #undef TARGET_FPRS 126 127 #define TARGET_SPE_ABI rs6000_spe_abi 128 #define TARGET_SPE rs6000_spe 129 #define TARGET_E500 (rs6000_cpu == PROCESSOR_PPC8540) 130 #define TARGET_ISEL rs6000_isel 131 #define TARGET_FPRS (!rs6000_float_gprs) 132 133 /* Make -mcpu=8540 imply SPE. ISEL is automatically enabled, the 134 others must be done by hand. Handle -mrtp. Disable -fPIC 135 for -mrtp - the VxWorks PIC model is not compatible with it. */ 136 #undef SUBSUBTARGET_OVERRIDE_OPTIONS 137 #define SUBSUBTARGET_OVERRIDE_OPTIONS \ 138 do { \ 139 if (TARGET_E500) \ 140 { \ 141 rs6000_spe = 1; \ 142 rs6000_spe_abi = 1; \ 143 rs6000_float_gprs = 1; \ 144 } \ 145 \ 146 if (!g_switch_set) \ 147 g_switch_value = SDATA_DEFAULT_SIZE; \ 148 VXWORKS_OVERRIDE_OPTIONS; \ 149 } while (0) 150 151 /* No _mcount profiling on VxWorks. */ 152 #undef FUNCTION_PROFILER 153 #define FUNCTION_PROFILER(FILE,LABELNO) VXWORKS_FUNCTION_PROFILER(FILE,LABELNO) 154