📄 rs6000.h
字号:
/* Definitions of target machine for GNU compiler, for IBM RS/6000. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING. If not, write tothe Free Software Foundation, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA. *//* Note that some other tm.h files include this one and then override many of the definitions. *//* Definitions for the object file format. These are set at compile-time. */#define OBJECT_XCOFF 1#define OBJECT_ELF 2#define OBJECT_PEF 3#define OBJECT_MACHO 4#define TARGET_ELF (TARGET_OBJECT_FORMAT == OBJECT_ELF)#define TARGET_XCOFF (TARGET_OBJECT_FORMAT == OBJECT_XCOFF)#define TARGET_MACOS (TARGET_OBJECT_FORMAT == OBJECT_PEF)#define TARGET_MACHO (TARGET_OBJECT_FORMAT == OBJECT_MACHO)#ifndef TARGET_AIX#define TARGET_AIX 0#endif/* Default string to use for cpu if not specified. */#ifndef TARGET_CPU_DEFAULT#define TARGET_CPU_DEFAULT ((char *)0)#endif/* Common ASM definitions used by ASM_SPEC among the various targets for handling -mcpu=xxx switches. */#define ASM_CPU_SPEC \"%{!mcpu*: \ %{mpower: %{!mpower2: -mpwr}} \ %{mpower2: -mpwrx} \ %{mpowerpc*: -mppc} \ %{mno-power: %{!mpowerpc*: -mcom}} \ %{!mno-power: %{!mpower2: %(asm_default)}}} \%{mcpu=common: -mcom} \%{mcpu=power: -mpwr} \%{mcpu=power2: -mpwrx} \%{mcpu=power3: -m604} \%{mcpu=power4: -mpower4} \%{mcpu=powerpc: -mppc} \%{mcpu=rios: -mpwr} \%{mcpu=rios1: -mpwr} \%{mcpu=rios2: -mpwrx} \%{mcpu=rsc: -mpwr} \%{mcpu=rsc1: -mpwr} \%{mcpu=401: -mppc} \%{mcpu=403: -m403} \%{mcpu=405: -m405} \%{mcpu=505: -mppc} \%{mcpu=601: -m601} \%{mcpu=602: -mppc} \%{mcpu=603: -mppc} \%{mcpu=603e: -mppc} \%{mcpu=ec603e: -mppc} \%{mcpu=604: -mppc} \%{mcpu=604e: -mppc} \%{mcpu=620: -mppc} \%{mcpu=630: -m604} \%{mcpu=740: -mppc} \%{mcpu=7400: -mppc} \%{mcpu=7450: -mppc} \%{mcpu=750: -mppc} \%{mcpu=801: -mppc} \%{mcpu=821: -mppc} \%{mcpu=823: -mppc} \%{mcpu=860: -mppc} \%{mcpu=8540: -me500} \%{maltivec: -maltivec}"#define CPP_DEFAULT_SPEC ""#define ASM_DEFAULT_SPEC ""/* This macro defines names of additional specifications to put in the specs that can be used in various specifications like CC1_SPEC. Its definition is an initializer with a subgrouping for each command option. Each subgrouping contains a string constant, that defines the specification name, and a string constant that used by the GNU CC driver program. Do not define this macro if it does not need to do anything. */#define SUBTARGET_EXTRA_SPECS#define EXTRA_SPECS \ { "cpp_default", CPP_DEFAULT_SPEC }, \ { "asm_cpu", ASM_CPU_SPEC }, \ { "asm_default", ASM_DEFAULT_SPEC }, \ SUBTARGET_EXTRA_SPECS/* Architecture type. */extern int target_flags;/* Use POWER architecture instructions and MQ register. */#define MASK_POWER 0x00000001/* Use POWER2 extensions to POWER architecture. */#define MASK_POWER2 0x00000002/* Use PowerPC architecture instructions. */#define MASK_POWERPC 0x00000004/* Use PowerPC General Purpose group optional instructions, e.g. fsqrt. */#define MASK_PPC_GPOPT 0x00000008/* Use PowerPC Graphics group optional instructions, e.g. fsel. */#define MASK_PPC_GFXOPT 0x00000010/* Use PowerPC-64 architecture instructions. */#define MASK_POWERPC64 0x00000020/* Use revised mnemonic names defined for PowerPC architecture. */#define MASK_NEW_MNEMONICS 0x00000040/* Disable placing fp constants in the TOC; can be turned on when the TOC overflows. */#define MASK_NO_FP_IN_TOC 0x00000080/* Disable placing symbol+offset constants in the TOC; can be turned on when the TOC overflows. */#define MASK_NO_SUM_IN_TOC 0x00000100/* Output only one TOC entry per module. Normally linking fails if there are more than 16K unique variables/constants in an executable. With this option, linking fails only if there are more than 16K modules, or if there are more than 16K unique variables/constant in a single module. This is at the cost of having 2 extra loads and one extra store per function, and one less allocable register. */#define MASK_MINIMAL_TOC 0x00000200/* Nonzero for the 64bit model: longs and pointers are 64 bits. */#define MASK_64BIT 0x00000400/* Disable use of FPRs. */#define MASK_SOFT_FLOAT 0x00000800/* Enable load/store multiple, even on PowerPC */#define MASK_MULTIPLE 0x00001000#define MASK_MULTIPLE_SET 0x00002000/* Use string instructions for block moves */#define MASK_STRING 0x00004000#define MASK_STRING_SET 0x00008000/* Disable update form of load/store */#define MASK_NO_UPDATE 0x00010000/* Disable fused multiply/add operations */#define MASK_NO_FUSED_MADD 0x00020000/* Nonzero if we need to schedule the prolog and epilog. */#define MASK_SCHED_PROLOG 0x00040000/* Use AltiVec instructions. */#define MASK_ALTIVEC 0x00080000/* Return small structures in memory (as the AIX ABI requires). */#define MASK_AIX_STRUCT_RET 0x00100000#define MASK_AIX_STRUCT_RET_SET 0x00200000/* The only remaining free bit is 0x00400000. sysv4.h uses 0x00800000 -> 0x40000000, and 0x80000000 is not available because target_flags is signed. */#define TARGET_POWER (target_flags & MASK_POWER)#define TARGET_POWER2 (target_flags & MASK_POWER2)#define TARGET_POWERPC (target_flags & MASK_POWERPC)#define TARGET_PPC_GPOPT (target_flags & MASK_PPC_GPOPT)#define TARGET_PPC_GFXOPT (target_flags & MASK_PPC_GFXOPT)#define TARGET_NEW_MNEMONICS (target_flags & MASK_NEW_MNEMONICS)#define TARGET_NO_FP_IN_TOC (target_flags & MASK_NO_FP_IN_TOC)#define TARGET_NO_SUM_IN_TOC (target_flags & MASK_NO_SUM_IN_TOC)#define TARGET_MINIMAL_TOC (target_flags & MASK_MINIMAL_TOC)#define TARGET_64BIT (target_flags & MASK_64BIT)#define TARGET_SOFT_FLOAT (target_flags & MASK_SOFT_FLOAT)#define TARGET_MULTIPLE (target_flags & MASK_MULTIPLE)#define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET)#define TARGET_STRING (target_flags & MASK_STRING)#define TARGET_STRING_SET (target_flags & MASK_STRING_SET)#define TARGET_NO_UPDATE (target_flags & MASK_NO_UPDATE)#define TARGET_NO_FUSED_MADD (target_flags & MASK_NO_FUSED_MADD)#define TARGET_SCHED_PROLOG (target_flags & MASK_SCHED_PROLOG)#define TARGET_ALTIVEC (target_flags & MASK_ALTIVEC)#define TARGET_AIX_STRUCT_RET (target_flags & MASK_AIX_STRUCT_RET)#define TARGET_32BIT (! TARGET_64BIT)#define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)#define TARGET_UPDATE (! TARGET_NO_UPDATE)#define TARGET_FUSED_MADD (! TARGET_NO_FUSED_MADD)#ifdef IN_LIBGCC2/* For libgcc2 we make sure this is a compile time constant */#if defined (__64BIT__) || defined (__powerpc64__)#define TARGET_POWERPC64 1#else#define TARGET_POWERPC64 0#endif#else#define TARGET_POWERPC64 (target_flags & MASK_POWERPC64)#endif#define TARGET_XL_CALL 0/* Run-time compilation parameters selecting different hardware subsets. Macro to define tables used to set the flags. This is a list in braces of pairs in braces, each pair being { "NAME", VALUE } where VALUE is the bits to set or minus the bits to clear. An empty string NAME is used to identify the default VALUE. */#define TARGET_SWITCHES \ {{"power", MASK_POWER | MASK_MULTIPLE | MASK_STRING, \ N_("Use POWER instruction set")}, \ {"power2", (MASK_POWER | MASK_MULTIPLE | MASK_STRING \ | MASK_POWER2), \ N_("Use POWER2 instruction set")}, \ {"no-power2", - MASK_POWER2, \ N_("Do not use POWER2 instruction set")}, \ {"no-power", - (MASK_POWER | MASK_POWER2 | MASK_MULTIPLE \ | MASK_STRING), \ N_("Do not use POWER instruction set")}, \ {"powerpc", MASK_POWERPC, \ N_("Use PowerPC instruction set")}, \ {"no-powerpc", - (MASK_POWERPC | MASK_PPC_GPOPT \ | MASK_PPC_GFXOPT | MASK_POWERPC64), \ N_("Do not use PowerPC instruction set")}, \ {"powerpc-gpopt", MASK_POWERPC | MASK_PPC_GPOPT, \ N_("Use PowerPC General Purpose group optional instructions")},\ {"no-powerpc-gpopt", - MASK_PPC_GPOPT, \ N_("Don't use PowerPC General Purpose group optional instructions")},\ {"powerpc-gfxopt", MASK_POWERPC | MASK_PPC_GFXOPT, \ N_("Use PowerPC Graphics group optional instructions")},\ {"no-powerpc-gfxopt", - MASK_PPC_GFXOPT, \ N_("Don't use PowerPC Graphics group optional instructions")},\ {"powerpc64", MASK_POWERPC64, \ N_("Use PowerPC-64 instruction set")}, \ {"no-powerpc64", - MASK_POWERPC64, \ N_("Don't use PowerPC-64 instruction set")}, \ {"altivec", MASK_ALTIVEC , \ N_("Use AltiVec instructions")}, \ {"no-altivec", - MASK_ALTIVEC , \ N_("Don't use AltiVec instructions")}, \ {"new-mnemonics", MASK_NEW_MNEMONICS, \ N_("Use new mnemonics for PowerPC architecture")},\ {"old-mnemonics", -MASK_NEW_MNEMONICS, \ N_("Use old mnemonics for PowerPC architecture")},\ {"full-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC \ | MASK_MINIMAL_TOC), \ N_("Put everything in the regular TOC")}, \ {"fp-in-toc", - MASK_NO_FP_IN_TOC, \ N_("Place floating point constants in TOC")}, \ {"no-fp-in-toc", MASK_NO_FP_IN_TOC, \ N_("Don't place floating point constants in TOC")},\ {"sum-in-toc", - MASK_NO_SUM_IN_TOC, \ N_("Place symbol+offset constants in TOC")}, \ {"no-sum-in-toc", MASK_NO_SUM_IN_TOC, \ N_("Don't place symbol+offset constants in TOC")},\ {"minimal-toc", MASK_MINIMAL_TOC, \ "Use only one TOC entry per procedure"}, \ {"minimal-toc", - (MASK_NO_FP_IN_TOC | MASK_NO_SUM_IN_TOC), \ ""}, \ {"no-minimal-toc", - MASK_MINIMAL_TOC, \ N_("Place variable addresses in the regular TOC")},\ {"hard-float", - MASK_SOFT_FLOAT, \ N_("Use hardware fp")}, \ {"soft-float", MASK_SOFT_FLOAT, \ N_("Do not use hardware fp")}, \ {"multiple", MASK_MULTIPLE | MASK_MULTIPLE_SET, \ N_("Generate load/store multiple instructions")}, \ {"no-multiple", - MASK_MULTIPLE, \ N_("Do not generate load/store multiple instructions")},\ {"no-multiple", MASK_MULTIPLE_SET, \ ""}, \ {"string", MASK_STRING | MASK_STRING_SET, \ N_("Generate string instructions for block moves")},\ {"no-string", - MASK_STRING, \ N_("Do not generate string instructions for block moves")},\ {"no-string", MASK_STRING_SET, \ ""}, \ {"update", - MASK_NO_UPDATE, \ N_("Generate load/store with update instructions")},\ {"no-update", MASK_NO_UPDATE, \ N_("Do not generate load/store with update instructions")},\ {"fused-madd", - MASK_NO_FUSED_MADD, \ N_("Generate fused multiply/add instructions")},\ {"no-fused-madd", MASK_NO_FUSED_MADD, \ N_("Don't generate fused multiply/add instructions")},\ {"sched-prolog", MASK_SCHED_PROLOG, \ ""}, \ {"no-sched-prolog", -MASK_SCHED_PROLOG, \ N_("Don't schedule the start and end of the procedure")},\ {"sched-epilog", MASK_SCHED_PROLOG, \ ""}, \ {"no-sched-epilog", -MASK_SCHED_PROLOG, \ ""}, \ {"aix-struct-return", MASK_AIX_STRUCT_RET | MASK_AIX_STRUCT_RET_SET, \ N_("Return all structures in memory (AIX default)")},\ {"svr4-struct-return", - MASK_AIX_STRUCT_RET,\ N_("Return small structures in registers (SVR4 default)")},\ {"svr4-struct-return",MASK_AIX_STRUCT_RET_SET,\ ""},\ {"no-aix-struct-return", - MASK_AIX_STRUCT_RET,\ ""},\ {"no-aix-struct-return", MASK_AIX_STRUCT_RET_SET,\ ""},\ {"no-svr4-struct-return", MASK_AIX_STRUCT_RET | MASK_AIX_STRUCT_RET_SET,\ ""},\ SUBTARGET_SWITCHES \ {"", TARGET_DEFAULT | MASK_SCHED_PROLOG, \ ""}}#define TARGET_DEFAULT (MASK_POWER | MASK_MULTIPLE | MASK_STRING)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -