Commit 38c1f2d7 by Michael Meissner

Fix various problems; Add -m{,no-}fused-madd, -m{,no-}no-update switches; Allow…

Fix various problems; Add -m{,no-}fused-madd, -m{,no-}no-update switches; Allow add/and/ior/xor of 32 bit constants

From-SVN: r14361
parent 8b0c969e
...@@ -208,33 +208,33 @@ Boston, MA 02111-1307, USA. */ ...@@ -208,33 +208,33 @@ Boston, MA 02111-1307, USA. */
extern int target_flags; extern int target_flags;
/* Use POWER architecture instructions and MQ register. */ /* Use POWER architecture instructions and MQ register. */
#define MASK_POWER 0x01 #define MASK_POWER 0x00000001
/* Use POWER2 extensions to POWER architecture. */ /* Use POWER2 extensions to POWER architecture. */
#define MASK_POWER2 0x02 #define MASK_POWER2 0x00000002
/* Use PowerPC architecture instructions. */ /* Use PowerPC architecture instructions. */
#define MASK_POWERPC 0x04 #define MASK_POWERPC 0x00000004
/* Use PowerPC General Purpose group optional instructions, e.g. fsqrt. */ /* Use PowerPC General Purpose group optional instructions, e.g. fsqrt. */
#define MASK_PPC_GPOPT 0x08 #define MASK_PPC_GPOPT 0x00000008
/* Use PowerPC Graphics group optional instructions, e.g. fsel. */ /* Use PowerPC Graphics group optional instructions, e.g. fsel. */
#define MASK_PPC_GFXOPT 0x10 #define MASK_PPC_GFXOPT 0x00000010
/* Use PowerPC-64 architecture instructions. */ /* Use PowerPC-64 architecture instructions. */
#define MASK_POWERPC64 0x20 #define MASK_POWERPC64 0x00000020
/* Use revised mnemonic names defined for PowerPC architecture. */ /* Use revised mnemonic names defined for PowerPC architecture. */
#define MASK_NEW_MNEMONICS 0x40 #define MASK_NEW_MNEMONICS 0x00000040
/* Disable placing fp constants in the TOC; can be turned on when the /* Disable placing fp constants in the TOC; can be turned on when the
TOC overflows. */ TOC overflows. */
#define MASK_NO_FP_IN_TOC 0x80 #define MASK_NO_FP_IN_TOC 0x00000080
/* Disable placing symbol+offset constants in the TOC; can be turned on when /* Disable placing symbol+offset constants in the TOC; can be turned on when
the TOC overflows. */ the TOC overflows. */
#define MASK_NO_SUM_IN_TOC 0x100 #define MASK_NO_SUM_IN_TOC 0x00000100
/* Output only one TOC entry per module. Normally linking fails if /* Output only one TOC entry per module. Normally linking fails if
there are more than 16K unique variables/constants in an executable. With there are more than 16K unique variables/constants in an executable. With
...@@ -243,25 +243,27 @@ extern int target_flags; ...@@ -243,25 +243,27 @@ extern int target_flags;
This is at the cost of having 2 extra loads and one extra store per This is at the cost of having 2 extra loads and one extra store per
function, and one less allocatable register. */ function, and one less allocatable register. */
#define MASK_MINIMAL_TOC 0x200 #define MASK_MINIMAL_TOC 0x00000200
/* Nonzero for the 64bit model: ints, longs, and pointers are 64 bits. */ /* Nonzero for the 64bit model: ints, longs, and pointers are 64 bits. */
#define MASK_64BIT 0x400 #define MASK_64BIT 0x00000400
/* Disable use of FPRs. */ /* Disable use of FPRs. */
#define MASK_SOFT_FLOAT 0x800 #define MASK_SOFT_FLOAT 0x00000800
/* Enable load/store multiple, even on powerpc */ /* Enable load/store multiple, even on powerpc */
#define MASK_MULTIPLE 0x1000 #define MASK_MULTIPLE 0x00001000
#define MASK_MULTIPLE_SET 0x2000 #define MASK_MULTIPLE_SET 0x00002000
/* Use string instructions for block moves */ /* Use string instructions for block moves */
#define MASK_STRING 0x4000 #define MASK_STRING 0x00004000
#define MASK_STRING_SET 0x8000 #define MASK_STRING_SET 0x00008000
/* Temporary debug switches */ /* Disable update form of load/store */
#define MASK_DEBUG_STACK 0x10000 #define MASK_NO_UPDATE 0x00010000
#define MASK_DEBUG_ARG 0x20000
/* Disable fused multiply/add operations */
#define MASK_NO_FUSED_MADD 0x00020000
#define TARGET_POWER (target_flags & MASK_POWER) #define TARGET_POWER (target_flags & MASK_POWER)
#define TARGET_POWER2 (target_flags & MASK_POWER2) #define TARGET_POWER2 (target_flags & MASK_POWER2)
...@@ -279,11 +281,13 @@ extern int target_flags; ...@@ -279,11 +281,13 @@ extern int target_flags;
#define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET) #define TARGET_MULTIPLE_SET (target_flags & MASK_MULTIPLE_SET)
#define TARGET_STRING (target_flags & MASK_STRING) #define TARGET_STRING (target_flags & MASK_STRING)
#define TARGET_STRING_SET (target_flags & MASK_STRING_SET) #define TARGET_STRING_SET (target_flags & MASK_STRING_SET)
#define TARGET_DEBUG_STACK (target_flags & MASK_DEBUG_STACK) #define TARGET_NO_UPDATE (target_flags & MASK_NO_UPDATE)
#define TARGET_DEBUG_ARG (target_flags & MASK_DEBUG_ARG) #define TARGET_NO_FUSED_MADD (target_flags & MASK_NO_FUSED_MADD)
#define TARGET_32BIT (! TARGET_64BIT) #define TARGET_32BIT (! TARGET_64BIT)
#define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT) #define TARGET_HARD_FLOAT (! TARGET_SOFT_FLOAT)
#define TARGET_UPDATE (! TARGET_NO_UPDATE)
#define TARGET_FUSED_MADD (! TARGET_NO_FUSED_MADD)
/* Pseudo target to indicate whether the object format is ELF /* Pseudo target to indicate whether the object format is ELF
(to get around not having conditional compilation in the md file) */ (to get around not having conditional compilation in the md file) */
...@@ -366,8 +370,10 @@ extern int target_flags; ...@@ -366,8 +370,10 @@ extern int target_flags;
{"string", MASK_STRING | MASK_STRING_SET}, \ {"string", MASK_STRING | MASK_STRING_SET}, \
{"no-string", - MASK_STRING}, \ {"no-string", - MASK_STRING}, \
{"no-string", MASK_STRING_SET}, \ {"no-string", MASK_STRING_SET}, \
{"debug-stack", MASK_DEBUG_STACK}, \ {"update", - MASK_NO_UPDATE}, \
{"debug-arg", MASK_DEBUG_ARG}, \ {"no-update", MASK_NO_UPDATE}, \
{"fused-madd", - MASK_NO_FUSED_MADD}, \
{"no-fused-madd", MASK_NO_FUSED_MADD}, \
SUBTARGET_SWITCHES \ SUBTARGET_SWITCHES \
{"", TARGET_DEFAULT}} {"", TARGET_DEFAULT}}
...@@ -427,6 +433,8 @@ extern enum processor_type rs6000_cpu; ...@@ -427,6 +433,8 @@ extern enum processor_type rs6000_cpu;
{ \ { \
{"cpu=", &rs6000_select[1].string}, \ {"cpu=", &rs6000_select[1].string}, \
{"tune=", &rs6000_select[2].string}, \ {"tune=", &rs6000_select[2].string}, \
{"debug-", &rs6000_debug_name}, \
{"debug=", &rs6000_debug_name}, \
SUBTARGET_OPTIONS \ SUBTARGET_OPTIONS \
} }
...@@ -441,6 +449,14 @@ struct rs6000_cpu_select ...@@ -441,6 +449,14 @@ struct rs6000_cpu_select
extern struct rs6000_cpu_select rs6000_select[]; extern struct rs6000_cpu_select rs6000_select[];
/* Debug support */
extern char *rs6000_debug_name; /* Name for -mdebug-xxxx option */
extern int rs6000_debug_stack; /* debug stack applications */
extern int rs6000_debug_arg; /* debug argument handling */
#define TARGET_DEBUG_STACK rs6000_debug_stack
#define TARGET_DEBUG_ARG rs6000_debug_arg
/* Sometimes certain combinations of command options do not make sense /* Sometimes certain combinations of command options do not make sense
on a particular target machine. You can define a macro on a particular target machine. You can define a macro
`OVERRIDE_OPTIONS' to take account of this. This macro, if `OVERRIDE_OPTIONS' to take account of this. This macro, if
...@@ -1811,6 +1827,7 @@ typedef struct rs6000_args ...@@ -1811,6 +1827,7 @@ typedef struct rs6000_args
{ if (LEGITIMATE_INDIRECT_ADDRESS_P (X)) \ { if (LEGITIMATE_INDIRECT_ADDRESS_P (X)) \
goto ADDR; \ goto ADDR; \
if ((GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \ if ((GET_CODE (X) == PRE_INC || GET_CODE (X) == PRE_DEC) \
&& TARGET_UPDATE \
&& LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0))) \ && LEGITIMATE_INDIRECT_ADDRESS_P (XEXP (X, 0))) \
goto ADDR; \ goto ADDR; \
if (LEGITIMATE_SMALL_DATA_P (MODE, X)) \ if (LEGITIMATE_SMALL_DATA_P (MODE, X)) \
...@@ -1904,9 +1921,9 @@ typedef struct rs6000_args ...@@ -1904,9 +1921,9 @@ typedef struct rs6000_args
&& ! LEGITIMATE_ADDRESS_INTEGER_P (XEXP (ADDR, 1), \ && ! LEGITIMATE_ADDRESS_INTEGER_P (XEXP (ADDR, 1), \
(TARGET_32BIT ? 4 : 8))) \ (TARGET_32BIT ? 4 : 8))) \
goto LABEL; \ goto LABEL; \
if (GET_CODE (ADDR) == PRE_INC) \ if (TARGET_UPDATE && GET_CODE (ADDR) == PRE_INC) \
goto LABEL; \ goto LABEL; \
if (GET_CODE (ADDR) == PRE_DEC) \ if (TARGET_UPDATE && GET_CODE (ADDR) == PRE_DEC) \
goto LABEL; \ goto LABEL; \
if (GET_CODE (ADDR) == LO_SUM) \ if (GET_CODE (ADDR) == LO_SUM) \
goto LABEL; \ goto LABEL; \
...@@ -2097,6 +2114,21 @@ typedef struct rs6000_args ...@@ -2097,6 +2114,21 @@ typedef struct rs6000_args
switch on CODE. */ switch on CODE. */
#define RTX_COSTS(X,CODE,OUTER_CODE) \ #define RTX_COSTS(X,CODE,OUTER_CODE) \
case PLUS: \
return ((GET_CODE (XEXP (X, 1)) == CONST_INT \
&& (unsigned HOST_WIDE_INT) ((INTVAL (XEXP (X, 1)) \
+ 0x8000) >= 0x10000)) \
? COSTS_N_INSNS (2) \
: COSTS_N_INSNS (1)); \
case AND: \
return ((non_and_cint_operand (XEXP (X, 1), SImode)) \
? COSTS_N_INSNS (2) \
: COSTS_N_INSNS (1)); \
case IOR: \
case XOR: \
return ((non_logical_cint_operand (XEXP (X, 1), SImode)) \
? COSTS_N_INSNS (2) \
: COSTS_N_INSNS (1)); \
case MULT: \ case MULT: \
switch (rs6000_cpu) \ switch (rs6000_cpu) \
{ \ { \
...@@ -2373,8 +2405,6 @@ toc_section () \ ...@@ -2373,8 +2405,6 @@ toc_section () \
{ \ { \
if (TARGET_MINIMAL_TOC) \ if (TARGET_MINIMAL_TOC) \
{ \ { \
static int toc_initialized = 0; \
\
/* toc_section is always called at least once from ASM_FILE_START, \ /* toc_section is always called at least once from ASM_FILE_START, \
so this is guaranteed to always be defined once and only once \ so this is guaranteed to always be defined once and only once \
in each file. */ \ in each file. */ \
...@@ -2396,6 +2426,9 @@ toc_section () \ ...@@ -2396,6 +2426,9 @@ toc_section () \
in_section = toc; \ in_section = toc; \
} }
/* Flag to say the TOC is initialized */
extern int toc_initialized;
/* This macro produces the initial definition of a function name. /* This macro produces the initial definition of a function name.
On the RS/6000, we need to place an extra '.' in the function name and On the RS/6000, we need to place an extra '.' in the function name and
output the function descriptor. output the function descriptor.
...@@ -2998,6 +3031,7 @@ do { \ ...@@ -2998,6 +3031,7 @@ do { \
{"reg_or_u_short_operand", {SUBREG, REG, CONST_INT}}, \ {"reg_or_u_short_operand", {SUBREG, REG, CONST_INT}}, \
{"reg_or_cint_operand", {SUBREG, REG, CONST_INT}}, \ {"reg_or_cint_operand", {SUBREG, REG, CONST_INT}}, \
{"got_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \ {"got_operand", {SYMBOL_REF, CONST, LABEL_REF}}, \
{"got_no_const_operand", {SYMBOL_REF, LABEL_REF}}, \
{"easy_fp_constant", {CONST_DOUBLE}}, \ {"easy_fp_constant", {CONST_DOUBLE}}, \
{"reg_or_mem_operand", {SUBREG, MEM, REG}}, \ {"reg_or_mem_operand", {SUBREG, MEM, REG}}, \
{"lwa_operand", {SUBREG, MEM, REG}}, \ {"lwa_operand", {SUBREG, MEM, REG}}, \
...@@ -3058,6 +3092,7 @@ extern int reg_or_neg_short_operand (); ...@@ -3058,6 +3092,7 @@ extern int reg_or_neg_short_operand ();
extern int reg_or_u_short_operand (); extern int reg_or_u_short_operand ();
extern int reg_or_cint_operand (); extern int reg_or_cint_operand ();
extern int got_operand (); extern int got_operand ();
extern int got_no_const_operand ();
extern int num_insns_constant (); extern int num_insns_constant ();
extern int easy_fp_constant (); extern int easy_fp_constant ();
extern int volatile_mem_operand (); extern int volatile_mem_operand ();
......
...@@ -33,20 +33,18 @@ extern enum rs6000_sdata_type rs6000_sdata; ...@@ -33,20 +33,18 @@ extern enum rs6000_sdata_type rs6000_sdata;
#define MASK_NO_BITFIELD_TYPE 0x40000000 /* Set PCC_BITFIELD_TYPE_MATTERS to 0 */ #define MASK_NO_BITFIELD_TYPE 0x40000000 /* Set PCC_BITFIELD_TYPE_MATTERS to 0 */
#define MASK_STRICT_ALIGN 0x20000000 /* Set STRICT_ALIGNMENT to 1. */ #define MASK_STRICT_ALIGN 0x20000000 /* Set STRICT_ALIGNMENT to 1. */
#define MASK_RELOCATABLE 0x10000000 /* GOT pointers are PC relative */ #define MASK_RELOCATABLE 0x10000000 /* GOT pointers are PC relative */
#define MASK_SDATA 0x08000000 /* use small data areas */ #define MASK_EABI 0x08000000 /* Adhere to eabi, not System V spec */
#define MASK_LITTLE_ENDIAN 0x04000000 /* target is little endian */ #define MASK_LITTLE_ENDIAN 0x04000000 /* target is little endian */
#define MASK_REGNAMES 0x02000000 /* use alternate register names. */ #define MASK_REGNAMES 0x02000000 /* use alternate register names. */
#define MASK_PROTOTYPE 0x01000000 /* Only prototyped fcns pass variable args */ #define MASK_PROTOTYPE 0x01000000 /* Only prototyped fcns pass variable args */
#define MASK_EABI 0x00800000 /* Adhere to eabi, not System V spec */
#define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE) #define TARGET_NO_BITFIELD_TYPE (target_flags & MASK_NO_BITFIELD_TYPE)
#define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN) #define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN)
#define TARGET_RELOCATABLE (target_flags & MASK_RELOCATABLE) #define TARGET_RELOCATABLE (target_flags & MASK_RELOCATABLE)
#define TARGET_SDATA (target_flags & MASK_SDATA) #define TARGET_EABI (target_flags & MASK_EABI)
#define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN) #define TARGET_LITTLE_ENDIAN (target_flags & MASK_LITTLE_ENDIAN)
#define TARGET_REGNAMES (target_flags & MASK_REGNAMES) #define TARGET_REGNAMES (target_flags & MASK_REGNAMES)
#define TARGET_PROTOTYPE (target_flags & MASK_PROTOTYPE) #define TARGET_PROTOTYPE (target_flags & MASK_PROTOTYPE)
#define TARGET_EABI (target_flags & MASK_EABI)
#define TARGET_TOC ((target_flags & MASK_64BIT) \ #define TARGET_TOC ((target_flags & MASK_64BIT) \
|| ((target_flags & (MASK_RELOCATABLE \ || ((target_flags & (MASK_RELOCATABLE \
| MASK_MINIMAL_TOC)) \ | MASK_MINIMAL_TOC)) \
...@@ -73,13 +71,9 @@ extern enum rs6000_sdata_type rs6000_sdata; ...@@ -73,13 +71,9 @@ extern enum rs6000_sdata_type rs6000_sdata;
{ "strict-align", MASK_STRICT_ALIGN }, \ { "strict-align", MASK_STRICT_ALIGN }, \
{ "no-strict-align", -MASK_STRICT_ALIGN }, \ { "no-strict-align", -MASK_STRICT_ALIGN }, \
{ "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \ { "relocatable", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
{ "relocatable", -MASK_SDATA }, \
{ "no-relocatable", -MASK_RELOCATABLE }, \ { "no-relocatable", -MASK_RELOCATABLE }, \
{ "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \ { "relocatable-lib", MASK_RELOCATABLE | MASK_MINIMAL_TOC | MASK_NO_FP_IN_TOC }, \
{ "relocatable-lib", -MASK_SDATA }, \
{ "no-relocatable-lib", -MASK_RELOCATABLE }, \ { "no-relocatable-lib", -MASK_RELOCATABLE }, \
{ "sdata", MASK_SDATA }, \
{ "no-sdata", -MASK_SDATA }, \
{ "little-endian", MASK_LITTLE_ENDIAN }, \ { "little-endian", MASK_LITTLE_ENDIAN }, \
{ "little", MASK_LITTLE_ENDIAN }, \ { "little", MASK_LITTLE_ENDIAN }, \
{ "big-endian", -MASK_LITTLE_ENDIAN }, \ { "big-endian", -MASK_LITTLE_ENDIAN }, \
...@@ -94,6 +88,8 @@ extern enum rs6000_sdata_type rs6000_sdata; ...@@ -94,6 +88,8 @@ extern enum rs6000_sdata_type rs6000_sdata;
{ "no-eabi", -MASK_EABI }, \ { "no-eabi", -MASK_EABI }, \
{ "regnames", MASK_REGNAMES }, \ { "regnames", MASK_REGNAMES }, \
{ "no-regnames", -MASK_REGNAMES }, \ { "no-regnames", -MASK_REGNAMES }, \
{ "sdata", 0 }, \
{ "no-sdata", 0 }, \
{ "sim", 0 }, \ { "sim", 0 }, \
{ "mvme", 0 }, \ { "mvme", 0 }, \
{ "emb", 0 }, \ { "emb", 0 }, \
...@@ -169,12 +165,8 @@ do { \ ...@@ -169,12 +165,8 @@ do { \
\ \
if (rs6000_sdata_name) \ if (rs6000_sdata_name) \
{ \ { \
target_flags |= MASK_SDATA; \
if (!strcmp (rs6000_sdata_name, "none")) \ if (!strcmp (rs6000_sdata_name, "none")) \
{ \
rs6000_sdata = SDATA_NONE; \ rs6000_sdata = SDATA_NONE; \
target_flags &= ~MASK_SDATA; \
} \
else if (!strcmp (rs6000_sdata_name, "data")) \ else if (!strcmp (rs6000_sdata_name, "data")) \
rs6000_sdata = SDATA_DATA; \ rs6000_sdata = SDATA_DATA; \
else if (!strcmp (rs6000_sdata_name, "default")) \ else if (!strcmp (rs6000_sdata_name, "default")) \
...@@ -186,21 +178,10 @@ do { \ ...@@ -186,21 +178,10 @@ do { \
else \ else \
error ("Bad value for -msdata=%s", rs6000_sdata_name); \ error ("Bad value for -msdata=%s", rs6000_sdata_name); \
} \ } \
else if (TARGET_SDATA && TARGET_EABI) \
{ \
rs6000_sdata = SDATA_EABI; \
rs6000_sdata_name = "eabi"; \
} \
else if (TARGET_SDATA) \
{ \
rs6000_sdata = SDATA_SYSV; \
rs6000_sdata_name = "sysv"; \
} \
else if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) \ else if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) \
{ \ { \
rs6000_sdata = SDATA_DATA; \ rs6000_sdata = SDATA_DATA; \
rs6000_sdata_name = "data"; \ rs6000_sdata_name = "data"; \
target_flags |= MASK_SDATA; \
} \ } \
else \ else \
{ \ { \
...@@ -225,10 +206,12 @@ do { \ ...@@ -225,10 +206,12 @@ do { \
rs6000_sdata_name); \ rs6000_sdata_name); \
} \ } \
\ \
if (TARGET_SDATA && DEFAULT_ABI != ABI_V4 && DEFAULT_ABI != ABI_SOLARIS) \ if (rs6000_sdata != SDATA_NONE && DEFAULT_ABI != ABI_V4 \
&& DEFAULT_ABI != ABI_SOLARIS) \
{ \ { \
target_flags &= ~MASK_SDATA; \ rs6000_sdata = SDATA_NONE; \
error ("-msdata and -mcall-%s are incompatible.", rs6000_abi_name); \ error ("-msdata=%s and -mcall-%s are incompatible.", \
rs6000_sdata_name, rs6000_abi_name); \
} \ } \
\ \
if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \ if (TARGET_RELOCATABLE && !TARGET_MINIMAL_TOC) \
...@@ -467,8 +450,6 @@ extern void sbss_section (); ...@@ -467,8 +450,6 @@ extern void sbss_section ();
void \ void \
toc_section () \ toc_section () \
{ \ { \
static int toc_initialized = 0; \
\
if (in_section != in_toc) \ if (in_section != in_toc) \
{ \ { \
in_section = in_toc; \ in_section = in_toc; \
...@@ -628,7 +609,7 @@ extern int rs6000_pic_labelno; ...@@ -628,7 +609,7 @@ extern int rs6000_pic_labelno;
char *init_ptr = (TARGET_64BIT) ? ".quad" : ".long"; \ char *init_ptr = (TARGET_64BIT) ? ".quad" : ".long"; \
STRIP_NAME_ENCODING (orig_name, NAME); \ STRIP_NAME_ENCODING (orig_name, NAME); \
\ \
if (TARGET_RELOCATABLE && get_pool_size () != 0) \ if (TARGET_RELOCATABLE && (get_pool_size () != 0 || profile_flag)) \
{ \ { \
char buf[256], *buf_ptr; \ char buf[256], *buf_ptr; \
\ \
...@@ -701,7 +682,8 @@ extern int rs6000_pic_labelno; ...@@ -701,7 +682,8 @@ extern int rs6000_pic_labelno;
#undef ASM_OUTPUT_ALIGNED_LOCAL #undef ASM_OUTPUT_ALIGNED_LOCAL
#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
do { \ do { \
if (TARGET_SDATA && (SIZE) > 0 && (SIZE) <= g_switch_value) \ if (rs6000_sdata != SDATA_NONE && (SIZE) > 0 \
&& (SIZE) <= g_switch_value) \
{ \ { \
sdata_section (); \ sdata_section (); \
ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \ ASM_OUTPUT_ALIGN (FILE, exact_log2 (ALIGN / BITS_PER_UNIT)); \
...@@ -961,7 +943,8 @@ do { \ ...@@ -961,7 +943,8 @@ do { \
/* Pass various options to the assembler */ /* Pass various options to the assembler */
#undef ASM_SPEC #undef ASM_SPEC
#define ASM_SPEC "%(asm_cpu) %{mregnames} %{mno-regnames} \ #define ASM_SPEC "%(asm_cpu) \
%{.s: %{mregnames} %{mno-regnames}} %{.S: %{mregnames} %{mno-regnames}} \
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
%{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \ %{mrelocatable} %{mrelocatable-lib} %{fpic:-K PIC} %{fPIC:-K PIC} \
%{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \ %{memb} %{!memb: %{msdata: -memb} %{msdata=eabi: -memb}} \
...@@ -983,7 +966,9 @@ do { \ ...@@ -983,7 +966,9 @@ do { \
%{!meabi: %{!mno-eabi: \ %{!meabi: %{!mno-eabi: \
%{mrelocatable: -meabi } \ %{mrelocatable: -meabi } \
%{mcall-solaris: -mno-eabi } \ %{mcall-solaris: -mno-eabi } \
%{mcall-linux: -mno-eabi }}}" %{mcall-linux: -mno-eabi }}} \
%{msdata: -msdata=default} \
%{mno-sdata: -msdata=none}"
/* Don't put -Y P,<path> for cross compilers */ /* Don't put -Y P,<path> for cross compilers */
#undef LINK_PATH_SPEC #undef LINK_PATH_SPEC
...@@ -1357,3 +1342,12 @@ do { \ ...@@ -1357,3 +1342,12 @@ do { \
#undef MULTILIB_DEFAULTS #undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" } #define MULTILIB_DEFAULTS { "mbig", "mcall-sysv" }
/* Define this macro if the code for function profiling should come
before the function prologue. Normally, the profiling code comes
after. */
#define PROFILE_BEFORE_PROLOGUE 1
/* Function name to call to do profiling. */
#undef RS6000_MCOUNT
#define RS6000_MCOUNT "_mcount"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment