superh.h revision 1.1.1.1
1/* Definitions of target machine for gcc for Super-H using sh-superh-elf. 2 Copyright (C) 2001 Free Software Foundation, Inc. 3 4This file is part of GNU CC. 5 6GNU CC 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 2, or (at your option) 9any later version. 10 11GNU CC 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 GNU CC; see the file COPYING. If not, write to 18the Free Software Foundation, 51 Franklin Street, Fifth Floor, 19Boston, MA 02110-1301, USA. */ 20 21 22/* This header file is used when the vendor name is set to 'superh'. 23 It configures the compiler for SH4 only and switches the default 24 endianess to little (although big endian is still available). 25 It also configures the spec file to the default board configuration 26 but in such a way that it can be overridden by a boardspecs file 27 (using the -specs= option). This file is expected to disable the 28 defaults and provide options --defsym _start and --defsym _stack 29 which are required by the SuperH configuration of GNU ld. 30 31 This file is intended to overide sh.h */ 32 33 34#ifndef _SUPERH_H 35#define _SUPERH_H 36#endif 37 38 39#undef TARGET_VERSION 40#define TARGET_VERSION fprintf (stderr, " (SuperH SH special %s)", __DATE__); 41 42 43/* We override TARGET_PROCESSOR_SWITCHES in order to remove all the unrequired cpu options 44 and add options for all the SuperH CPU variants: 45 -m4-100 is an alias for -m4. 46 -m4-200 is an alias for -m4. 47 -m4-400 is an alias for -m4-nofpu and passes -isa=sh4-nommu-nofpu to the assembler. 48 -m4-500 is an alias for -m4-nofpu and passes -isa=sh4-nofpu to the assembler. */ 49#undef TARGET_PROCESSOR_SWITCHES 50#define TARGET_PROCESSOR_SWITCHES \ 51 {"4-500", TARGET_NONE, "SH4 500 series (FPU-less)" }, \ 52 {"4-500", SELECT_SH4_NOFPU, "" }, \ 53 {"4-400", TARGET_NONE, "SH4 400 series (MMU/FPU-less)" }, \ 54 {"4-400", SELECT_SH4_NOFPU, "" }, \ 55 {"4-200-single-only", TARGET_NONE, "SH4 200 series with double = float (SH3e ABI)" }, \ 56 {"4-200-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ 57 {"4-200-single", TARGET_NONE, "SH4 200 series with single precision pervading" }, \ 58 {"4-200-single", SELECT_SH4_SINGLE, "" }, \ 59 {"4-200-nofpu", TARGET_NONE, "SH4 200 series using soft floating point" }, \ 60 {"4-200-nofpu", SELECT_SH4_NOFPU, "" }, \ 61 {"4-200", TARGET_NONE, "SH4 200 series" }, \ 62 {"4-200", SELECT_SH4_NOFPU, "" }, \ 63 {"4-100-single-only", TARGET_NONE, "SH4 100 series with double = float (SH3e ABI)" }, \ 64 {"4-100-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ 65 {"4-100-single", TARGET_NONE, "SH4 100 series with single precision pervading" }, \ 66 {"4-100-single", SELECT_SH4_SINGLE, "" }, \ 67 {"4-100-nofpu", TARGET_NONE, "SH4 100 series using soft floating point" }, \ 68 {"4-100-nofpu", SELECT_SH4_NOFPU, "" }, \ 69 {"4-100", TARGET_NONE, "SH4 100 series" }, \ 70 {"4-100", SELECT_SH4_NOFPU, "" }, \ 71 {"4-single-only", TARGET_NONE, "Generic SH4 with double = float (SH3e ABI)" }, \ 72 {"4-single-only", SELECT_SH4_SINGLE_ONLY, "" }, \ 73 {"4-single", TARGET_NONE, "Generic SH4 with single precision pervading" }, \ 74 {"4-single", SELECT_SH4_SINGLE, "" }, \ 75 {"4-nofpu", TARGET_NONE, "Generic SH4 using soft floating point" }, \ 76 {"4-nofpu", SELECT_SH4_NOFPU, "" }, \ 77 {"4", TARGET_NONE, "Generic SH4 (default)" }, \ 78 {"4", SELECT_SH4, "" } 79 80 81/* Provide the -mboard= option used by the boardspecs file */ 82#undef SUBTARGET_OPTIONS 83#define SUBTARGET_OPTIONS \ 84 { "board=", &boardtype, "Board name [and momory region].", 0 }, \ 85 { "runtime=", &osruntime, "Runtime name.", 0 }, \ 86 87/* These are required by the mboard= option and runtime= option 88 and are defined in sh.c but are not used anywhere */ 89extern const char * boardtype; 90extern const char * osruntime; 91 92 93/* Override the linker spec strings to use the new emulation 94 The specstrings are concatenated as follows 95 LINK_EMUL_PREFIX.(''|'32'|'64'|LINK_DEFAULT_CPU_EMUL).SUBTARGET_LINK_EMUL_SUFFIX 96*/ 97#undef LINK_EMUL_PREFIX 98#undef SUBTARGET_LINK_EMUL_SUFFIX 99 100#define LINK_EMUL_PREFIX "superh" 101#define SUBTARGET_LINK_EMUL_SUFFIX "" 102 103/* Add the SUBTARGET_LINK_SPEC to add the board and runtime support and 104 change the endianness */ 105#undef SUBTARGET_LINK_SPEC 106#if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT 107#define SUBTARGET_LINK_SPEC "%(board_link) %(ldruntime) %{ml|!mb:-EL}%{mb:-EB}" 108#else 109#define SUBTARGET_LINK_SPEC "%(board_link) %(ldruntime) %{ml:-EL}%{mb|!ml:-EB}" 110#endif 111 112 113/* This is used by the link spec if the boardspecs file is not used (for whatever reason). 114 If the boardspecs file overrides this then an alternative can be used. */ 115#undef SUBTARGET_EXTRA_SPECS 116#define SUBTARGET_EXTRA_SPECS \ 117{ "board_link", "--defsym _start=0x1000 --defsym _stack=0x30000" }, \ 118{ "asruntime", "" }, \ 119{ "cppruntime", "-D__GDB_SIM__" }, \ 120{ "cc1runtime", "" }, \ 121{ "ldruntime", "" }, \ 122{ "libruntime", "-lc -lgloss" } 123 124 125/* Set the SUBTARGET_CPP_SPEC to define __EMBEDDED_CROSS__ which has an effect 126 on newlib and provide the runtime support */ 127#undef SUBTARGET_CPP_SPEC 128#define SUBTARGET_CPP_SPEC \ 129"-D__EMBEDDED_CROSS__ %{m4-100*:-D__SH4_100__} %{m4-200*:-D__SH4_200__} %{m4-400:-D__SH4_400__} %{m4-500:-D__SH4_500__} \ 130%(cppruntime)" 131 132/* Override the SUBTARGET_ASM_SPEC to add the runtime support */ 133#undef SUBTARGET_ASM_SPEC 134#define SUBTARGET_ASM_SPEC "%{m4-100*|m4-200*:-isa=sh4} %{m4-400:-isa=sh4-nommu-nofpu} %{m4-500:-isa=sh4-nofpu} %(asruntime)" 135 136/* Override the SUBTARGET_ASM_RELAX_SPEC so it doesn't interfere with the 137 runtime support by adding -isa=sh4 in the wrong place. */ 138#undef SUBTARGET_ASM_RELAX_SPEC 139#define SUBTARGET_ASM_RELAX_SPEC "%{!m4-100*:%{!m4-200*:%{!m4-400:%{!m4-500:-isa=sh4}}}}" 140 141/* Create the CC1_SPEC to add the runtime support */ 142#undef CC1_SPEC 143#define CC1_SPEC "%(cc1runtime)" 144 145#undef CC1PLUS_SPEC 146#define CC1PLUS_SPEC "%(cc1runtime)" 147 148 149/* Override the LIB_SPEC to add the runtime support */ 150#undef LIB_SPEC 151#define LIB_SPEC "%{!shared:%{!symbolic:%(libruntime) -lc}} %{pg:-lprofile -lc}" 152