📄 frv.h
字号:
/* Target macros for the FRV port of GCC. Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Red Hat Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef __FRV_H__#define __FRV_H__/* Frv general purpose macros. *//* Align an address. */#define ADDR_ALIGN(addr,align) (((addr) + (align) - 1) & ~((align) - 1))/* Return true if a value is inside a range. */#define IN_RANGE_P(VALUE, LOW, HIGH) \ ( (((HOST_WIDE_INT)(VALUE)) >= (HOST_WIDE_INT)(LOW)) \ && (((HOST_WIDE_INT)(VALUE)) <= ((HOST_WIDE_INT)(HIGH))))/* Driver configuration. *//* A C expression which determines whether the option `-CHAR' takes arguments. The value should be the number of arguments that option takes-zero, for many options. By default, this macro is defined to handle the standard options properly. You need not define it unless you wish to add additional options which take arguments. Defined in svr4.h. */#undef SWITCH_TAKES_ARG#define SWITCH_TAKES_ARG(CHAR) \ (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')/* A C expression which determines whether the option `-NAME' takes arguments. The value should be the number of arguments that option takes-zero, for many options. This macro rather than `SWITCH_TAKES_ARG' is used for multi-character option names. By default, this macro is defined as `DEFAULT_WORD_SWITCH_TAKES_ARG', which handles the standard options properly. You need not define `WORD_SWITCH_TAKES_ARG' unless you wish to add additional options which take arguments. Any redefinition should call `DEFAULT_WORD_SWITCH_TAKES_ARG' and then check for additional options. Defined in svr4.h. */#undef WORD_SWITCH_TAKES_ARG/* -fpic and -fPIC used to imply the -mlibrary-pic multilib, but with FDPIC which multilib to use depends on whether FDPIC is in use or not. The trick we use is to introduce -multilib-library-pic as a pseudo-flag that selects the library-pic multilib, and map fpic and fPIC to it only if fdpic is not selected. Also, if fdpic is selected and no PIC/PIE options are present, we imply -fPIE. Otherwise, if -fpic or -fPIC are enabled and we're optimizing for speed, or if we have -On with n>=3, enable inlining of PLTs. As for -mgprel-ro, we want to enable it by default, but not for -fpic or -fpie. */#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS \"%{mno-pack:\ %{!mhard-float:-msoft-float}\ %{!mmedia:-mno-media}}\ %{!mfdpic:%{fpic|fPIC: -multilib-library-pic}}\ %{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\ %{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fPIE}}}}}}}} \ %{!mno-inline-plt:%{O*:%{!O0:%{!Os:%{fpic|fPIC:-minline-plt} \ %{!fpic:%{!fPIC:%{!O:%{!O1:%{!O2:-minline-plt}}}}}}}}} \ %{!mno-gprel-ro:%{!fpic:%{!fpie:-mgprel-ro}}}} \"#ifndef SUBTARGET_DRIVER_SELF_SPECS# define SUBTARGET_DRIVER_SELF_SPECS#endif/* A C string constant that tells the GCC driver program options to pass to the assembler. It can also specify how to translate options you give to GNU CC into options for GCC to pass to the assembler. See the file `sun3.h' for an example of this. Do not define this macro if it does not need to do anything. Defined in svr4.h. */#undef ASM_SPEC#define ASM_SPEC "\%{G*} %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \%{mtomcat-stats} \%{!mno-eflags: \ %{mcpu=*} \ %{mgpr-*} %{mfpr-*} \ %{msoft-float} %{mhard-float} \ %{mdword} %{mno-dword} \ %{mdouble} %{mno-double} \ %{mmedia} %{mno-media} \ %{mmuladd} %{mno-muladd} \ %{mpack} %{mno-pack} \ %{mno-fdpic:-mnopic} %{mfdpic} \ %{fpic|fpie: -mpic} %{fPIC|fPIE: -mPIC} %{mlibrary-pic}}"/* Another C string constant used much like `LINK_SPEC'. The difference between the two is that `STARTFILE_SPEC' is used at the very beginning of the command given to the linker. If this macro is not defined, a default is provided that loads the standard C startup file from the usual place. See `gcc.c'. Defined in svr4.h. */#undef STARTFILE_SPEC#define STARTFILE_SPEC "crt0%O%s frvbegin%O%s"/* Another C string constant used much like `LINK_SPEC'. The difference between the two is that `ENDFILE_SPEC' is used at the very end of the command given to the linker. Do not define this macro if it does not need to do anything. Defined in svr4.h. */#undef ENDFILE_SPEC#define ENDFILE_SPEC "frvend%O%s"#define MASK_DEFAULT_FRV \ (MASK_MEDIA \ | MASK_DOUBLE \ | MASK_MULADD \ | MASK_DWORD \ | MASK_PACK)#define MASK_DEFAULT_FR500 \ (MASK_MEDIA | MASK_DWORD | MASK_PACK)#define MASK_DEFAULT_FR550 \ (MASK_MEDIA | MASK_DWORD | MASK_PACK)#define MASK_DEFAULT_FR450 \ (MASK_GPR_32 \ | MASK_FPR_32 \ | MASK_MEDIA \ | MASK_SOFT_FLOAT \ | MASK_DWORD \ | MASK_PACK)#define MASK_DEFAULT_FR400 \ (MASK_GPR_32 \ | MASK_FPR_32 \ | MASK_MEDIA \ | MASK_ACC_4 \ | MASK_SOFT_FLOAT \ | MASK_DWORD \ | MASK_PACK)#define MASK_DEFAULT_SIMPLE \ (MASK_GPR_32 | MASK_SOFT_FLOAT)/* A C string constant that tells the GCC driver program options to pass to `cc1'. It can also specify how to translate options you give to GCC into options for GCC to pass to the `cc1'. Do not define this macro if it does not need to do anything. *//* For ABI compliance, we need to put bss data into the normal data section. */#define CC1_SPEC "%{G*}"/* A C string constant that tells the GCC driver program options to pass to the linker. It can also specify how to translate options you give to GCC into options for GCC to pass to the linker. Do not define this macro if it does not need to do anything. Defined in svr4.h. *//* Override the svr4.h version with one that dispenses without the svr4 shared library options, notably -G. */#undef LINK_SPEC#define LINK_SPEC "\%{h*} %{v:-V} \%{b} %{Wl,*:%*} \%{mfdpic:-melf32frvfd -z text} \%{static:-dn -Bstatic} \%{shared:-Bdynamic} \%{symbolic:-Bsymbolic} \%{G*} \%{YP,*} \%{Qy:} %{!Qn:-Qy}"/* Another C string constant used much like `LINK_SPEC'. The difference between the two is that `LIB_SPEC' is used at the end of the command given to the linker. If this macro is not defined, a default is provided that loads the standard C library from the usual place. See `gcc.c'. Defined in svr4.h. */#undef LIB_SPEC#define LIB_SPEC "--start-group -lc -lsim --end-group"#ifndef CPU_TYPE#define CPU_TYPE FRV_CPU_FR500#endif/* Allow us to easily change the default for -malloc-cc. */#ifndef DEFAULT_NO_ALLOC_CC#define MASK_DEFAULT_ALLOC_CC MASK_ALLOC_CC#else#define MASK_DEFAULT_ALLOC_CC 0#endif/* Run-time target specifications */#define TARGET_CPU_CPP_BUILTINS() \ do \ { \ int issue_rate; \ \ builtin_define ("__frv__"); \ builtin_assert ("machine=frv"); \ \ issue_rate = frv_issue_rate (); \ if (issue_rate > 1) \ builtin_define_with_int_value ("__FRV_VLIW__", issue_rate); \ builtin_define_with_int_value ("__FRV_GPR__", NUM_GPRS); \ builtin_define_with_int_value ("__FRV_FPR__", NUM_FPRS); \ builtin_define_with_int_value ("__FRV_ACC__", NUM_ACCS); \ \ switch (frv_cpu_type) \ { \ case FRV_CPU_GENERIC: \ builtin_define ("__CPU_GENERIC__"); \ break; \ case FRV_CPU_FR550: \ builtin_define ("__CPU_FR550__"); \ break; \ case FRV_CPU_FR500: \ case FRV_CPU_TOMCAT: \ builtin_define ("__CPU_FR500__"); \ break; \ case FRV_CPU_FR450: \ builtin_define ("__CPU_FR450__"); \ break; \ case FRV_CPU_FR405: \ builtin_define ("__CPU_FR405__"); \ break; \ case FRV_CPU_FR400: \ builtin_define ("__CPU_FR400__"); \ break; \ case FRV_CPU_FR300: \ case FRV_CPU_SIMPLE: \ builtin_define ("__CPU_FR300__"); \ break; \ } \ \ if (TARGET_HARD_FLOAT) \ builtin_define ("__FRV_HARD_FLOAT__"); \ if (TARGET_DWORD) \ builtin_define ("__FRV_DWORD__"); \ if (TARGET_FDPIC) \ builtin_define ("__FRV_FDPIC__"); \ if (flag_leading_underscore > 0) \ builtin_define ("__FRV_UNDERSCORE__"); \ } \ while (0)/* This declaration should be present. */extern int target_flags;/* This series of macros is to allow compiler command arguments to enable or disable the use of optional features of the target machine. For example, one machine description serves both the 68000 and the 68020; a command argument tells the compiler whether it should use 68020-only instructions or not. This command argument works by means of a macro `TARGET_68020' that tests a bit in `target_flags'. Define a macro `TARGET_FEATURENAME' for each such option. Its definition should test a bit in `target_flags'; for example: #define TARGET_68020 (target_flags & 1) One place where these macros are used is in the condition-expressions of instruction patterns. Note how `TARGET_68020' appears frequently in the 68000 machine description file, `m68k.md'. Another place they are used is
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -