parent
f76b9db287
commit
96abdcb1dd
|
@ -50,7 +50,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
%{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
|
||||
%{mlong64:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
|
||||
%{mips3:-U__mips -D__mips=3}"
|
||||
%{mips3:-U__mips -D__mips=3} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
#endif
|
||||
|
||||
/* Always uses GNU ld. */
|
||||
|
|
|
@ -51,7 +51,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
%{.m: -D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C} \
|
||||
%{!.S:%{!.s: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
|
||||
%{mlong64:-D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__PTRDIFF_TYPE__=int}"
|
||||
%{!mlong64:-D__PTRDIFF_TYPE__=int} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
|
||||
/* turn off collect2 COFF support, since ldfcn now has elf declaration */
|
||||
#undef OBJECT_FORMAT_COFF
|
||||
|
|
|
@ -38,7 +38,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
%{!.S: %{!.s: %{!.cc: %{!.cxx: %{!.C: %{!.m: -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}}}}}} \
|
||||
%{mlong64:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
|
||||
%{mips3:-U__mips -D__mips=3}"
|
||||
%{mips3:-U__mips -D__mips=3} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
|
||||
#define LIB_SPEC \
|
||||
"%{!p:%{!pg:%{!static:%{!g*:-lc_s}} -lc}}%{p:-lc_p}%{pg:-lc_p} crtn.o%s"
|
||||
|
|
|
@ -73,7 +73,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
%{!mlong64: -D_MIPS_SZLONG=32}%{mlong64: -D_MIPS_SZLONG=64} \
|
||||
%{mlong64:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
|
||||
%{mips3:-U__mips -D__mips=3}"
|
||||
%{mips3:-U__mips -D__mips=3} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
|
||||
#undef LINK_SPEC
|
||||
#define LINK_SPEC "\
|
||||
|
|
|
@ -1328,9 +1328,8 @@ mips_move_2words (operands, insn)
|
|||
{
|
||||
if (TARGET_FLOAT64 && !TARGET_64BIT)
|
||||
{
|
||||
operands[2] = GEN_INT (CONST_DOUBLE_LOW (op1));
|
||||
operands[3] = GEN_INT (CONST_DOUBLE_HIGH (op1));
|
||||
ret = "li\t%M0,%3\n\tli\t%L0,%2";
|
||||
split_double (op1, operands + 2, operands + 3);
|
||||
ret = "li\t%0,%2\n\tli\t%D0,%3";
|
||||
}
|
||||
else
|
||||
ret = "li.d\t%0,%1\n\tdsll\t%D0,%0,32\n\tdsrl\t%D0,32\n\tdsrl\t%0,32";
|
||||
|
@ -1345,9 +1344,8 @@ mips_move_2words (operands, insn)
|
|||
|
||||
else
|
||||
{
|
||||
operands[2] = GEN_INT (CONST_DOUBLE_LOW (op1));
|
||||
operands[3] = GEN_INT (CONST_DOUBLE_HIGH (op1));
|
||||
ret = "li\t%M0,%3\n\tli\t%L0,%2";
|
||||
split_double (op1, operands + 2, operands + 3);
|
||||
ret = "li\t%0,%2\n\tli\t%D0,%3";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2481,19 +2479,22 @@ output_block_move (insn, operands, num_regs, move_type)
|
|||
/* ??? Fails because of a MIPS assembler bug? */
|
||||
else if (TARGET_64BIT && bytes >= 8)
|
||||
{
|
||||
#if BYTES_BIG_ENDIAN
|
||||
load_store[num].load = "ldl\t%0,%1\n\tldr\t%0,%2";
|
||||
load_store[num].load_nop = "ldl\t%0,%1\n\tldr\t%0,%2%#";
|
||||
load_store[num].store = "sdl\t%0,%1\n\tsdr\t%0,%2";
|
||||
load_store[num].last_store = "sdr\t%0,%2";
|
||||
load_store[num].final = "sdl\t%0,%1";
|
||||
#else
|
||||
load_store[num].load = "ldl\t%0,%2\n\tldr\t%0,%1";
|
||||
load_store[num].load_nop = "ldl\t%0,%2\n\tldr\t%0,%1%#";
|
||||
load_store[num].store = "sdl\t%0,%2\n\tsdr\t%0,%1";
|
||||
load_store[num].last_store = "sdr\t%0,%1";
|
||||
load_store[num].final = "sdl\t%0,%2";
|
||||
#endif
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
{
|
||||
load_store[num].load = "ldl\t%0,%1\n\tldr\t%0,%2";
|
||||
load_store[num].load_nop = "ldl\t%0,%1\n\tldr\t%0,%2%#";
|
||||
load_store[num].store = "sdl\t%0,%1\n\tsdr\t%0,%2";
|
||||
load_store[num].last_store = "sdr\t%0,%2";
|
||||
load_store[num].final = "sdl\t%0,%1";
|
||||
}
|
||||
else
|
||||
{
|
||||
load_store[num].load = "ldl\t%0,%2\n\tldr\t%0,%1";
|
||||
load_store[num].load_nop = "ldl\t%0,%2\n\tldr\t%0,%1%#";
|
||||
load_store[num].store = "sdl\t%0,%2\n\tsdr\t%0,%1";
|
||||
load_store[num].last_store = "sdr\t%0,%1";
|
||||
load_store[num].final = "sdl\t%0,%2";
|
||||
}
|
||||
load_store[num].mode = DImode;
|
||||
offset += 8;
|
||||
bytes -= 8;
|
||||
|
@ -2514,19 +2515,22 @@ output_block_move (insn, operands, num_regs, move_type)
|
|||
|
||||
else if (bytes >= 4)
|
||||
{
|
||||
#if BYTES_BIG_ENDIAN
|
||||
load_store[num].load = "lwl\t%0,%1\n\tlwr\t%0,%2";
|
||||
load_store[num].load_nop = "lwl\t%0,%1\n\tlwr\t%0,%2%#";
|
||||
load_store[num].store = "swl\t%0,%1\n\tswr\t%0,%2";
|
||||
load_store[num].last_store = "swr\t%0,%2";
|
||||
load_store[num].final = "swl\t%0,%1";
|
||||
#else
|
||||
load_store[num].load = "lwl\t%0,%2\n\tlwr\t%0,%1";
|
||||
load_store[num].load_nop = "lwl\t%0,%2\n\tlwr\t%0,%1%#";
|
||||
load_store[num].store = "swl\t%0,%2\n\tswr\t%0,%1";
|
||||
load_store[num].last_store = "swr\t%0,%1";
|
||||
load_store[num].final = "swl\t%0,%2";
|
||||
#endif
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
{
|
||||
load_store[num].load = "lwl\t%0,%1\n\tlwr\t%0,%2";
|
||||
load_store[num].load_nop = "lwl\t%0,%1\n\tlwr\t%0,%2%#";
|
||||
load_store[num].store = "swl\t%0,%1\n\tswr\t%0,%2";
|
||||
load_store[num].last_store = "swr\t%0,%2";
|
||||
load_store[num].final = "swl\t%0,%1";
|
||||
}
|
||||
else
|
||||
{
|
||||
load_store[num].load = "lwl\t%0,%2\n\tlwr\t%0,%1";
|
||||
load_store[num].load_nop = "lwl\t%0,%2\n\tlwr\t%0,%1%#";
|
||||
load_store[num].store = "swl\t%0,%2\n\tswr\t%0,%1";
|
||||
load_store[num].last_store = "swr\t%0,%1";
|
||||
load_store[num].final = "swl\t%0,%2";
|
||||
}
|
||||
load_store[num].mode = SImode;
|
||||
offset += 4;
|
||||
bytes -= 4;
|
||||
|
@ -3623,13 +3627,9 @@ print_operand (file, op, letter)
|
|||
{
|
||||
register int regnum = REGNO (op);
|
||||
|
||||
if (letter == 'M')
|
||||
regnum += MOST_SIGNIFICANT_WORD;
|
||||
|
||||
else if (letter == 'L')
|
||||
regnum += LEAST_SIGNIFICANT_WORD;
|
||||
|
||||
else if (letter == 'D')
|
||||
if ((letter == 'M' && ! WORDS_BIG_ENDIAN)
|
||||
|| (letter == 'L' && WORDS_BIG_ENDIAN)
|
||||
|| letter == 'D')
|
||||
regnum++;
|
||||
|
||||
fprintf (file, "%s", reg_names[regnum]);
|
||||
|
|
|
@ -259,7 +259,7 @@ extern char *mktemp ();
|
|||
#define MASK_64BIT 0x00002000 /* Use 64 bit GP registers and insns */
|
||||
#define MASK_EMBEDDED_PIC 0x00004000 /* Generate embedded PIC code */
|
||||
#define MASK_EMBEDDED_DATA 0x00008000 /* Reduce RAM usage, not fast code */
|
||||
#define MASK_UNUSED4 0x00010000
|
||||
#define MASK_BIG_ENDIAN 0x00010000 /* Generate big endian code */
|
||||
#define MASK_UNUSED3 0x00020000
|
||||
#define MASK_UNUSED2 0x00040000
|
||||
#define MASK_UNUSED1 0x00080000
|
||||
|
@ -338,6 +338,9 @@ extern char *mktemp ();
|
|||
fastest code. */
|
||||
#define TARGET_EMBEDDED_DATA (target_flags & MASK_EMBEDDED_DATA)
|
||||
|
||||
/* generate big endian code. */
|
||||
#define TARGET_BIG_ENDIAN (target_flags & MASK_BIG_ENDIAN)
|
||||
|
||||
/* Macro to define tables used to set the flags.
|
||||
This is a list in braces of pairs in braces,
|
||||
each pair being { "NAME", VALUE }
|
||||
|
@ -378,6 +381,8 @@ extern char *mktemp ();
|
|||
{"no-embedded-pic", -MASK_EMBEDDED_PIC}, \
|
||||
{"embedded-data", MASK_EMBEDDED_DATA}, \
|
||||
{"no-embedded-data", -MASK_EMBEDDED_DATA}, \
|
||||
{"eb", MASK_BIG_ENDIAN}, \
|
||||
{"el", -MASK_BIG_ENDIAN}, \
|
||||
{"debug", MASK_DEBUG}, \
|
||||
{"debuga", MASK_DEBUG_A}, \
|
||||
{"debugb", MASK_DEBUG_B}, \
|
||||
|
@ -389,7 +394,9 @@ extern char *mktemp ();
|
|||
{"debugh", MASK_DEBUG_H}, \
|
||||
{"debugi", MASK_DEBUG_I}, \
|
||||
{"debugj", MASK_DEBUG_J}, \
|
||||
{"", TARGET_DEFAULT | TARGET_CPU_DEFAULT} \
|
||||
{"", (TARGET_DEFAULT \
|
||||
| TARGET_CPU_DEFAULT \
|
||||
| TARGET_ENDIAN_DEFAULT)} \
|
||||
}
|
||||
|
||||
/* Default target_flags if no switches are specified */
|
||||
|
@ -402,6 +409,14 @@ extern char *mktemp ();
|
|||
#define TARGET_CPU_DEFAULT 0
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_ENDIAN_DEFAULT
|
||||
#ifndef DECSTATION
|
||||
#define TARGET_ENDIAN_DEFAULT MASK_BIG_ENDIAN
|
||||
#else
|
||||
#define TARGET_ENDIAN_DEFAULT 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* This macro is similar to `TARGET_SWITCHES' but defines names of
|
||||
command options that have values. Its definition is an
|
||||
initializer with a subgrouping for each command option.
|
||||
|
@ -648,7 +663,7 @@ while (0)
|
|||
#define CC1_SPEC "\
|
||||
%{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \
|
||||
%{mips1:-mfp32 -mgp32}%{mips2:-mfp32 -mgp32}%{mips3:-mfp64 -mgp64} \
|
||||
%{G*} \
|
||||
%{G*} %{EB:-meb} %{EL:-mel} %{EB:%{EL:%emay not use both -EB and -EL}} \
|
||||
%{pic-none: -mno-half-pic} \
|
||||
%{pic-lib: -mhalf-pic} \
|
||||
%{pic-extern: -mhalf-pic} \
|
||||
|
@ -669,7 +684,9 @@ while (0)
|
|||
%{!.S:%{!.s: -D__LANGUAGE_C -D_LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
|
||||
%{mlong64:-D__SIZE_TYPE__=long\\ unsigned\\ int -D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__SIZE_TYPE__=unsigned\\ int -D__PTRDIFF_TYPE__=int} \
|
||||
%{mips3:-U__mips -D__mips=3}"
|
||||
%{mips3:-U__mips -D__mips=3} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
#endif
|
||||
|
||||
/* If defined, this macro is an additional prefix to try after
|
||||
|
@ -900,39 +917,27 @@ do { \
|
|||
|
||||
/* Target machine storage layout */
|
||||
|
||||
/* Define in order to support both big and little endian float formats
|
||||
in the same gcc binary. */
|
||||
#define REAL_ARITHMETIC
|
||||
|
||||
/* Define this if most significant bit is lowest numbered
|
||||
in instructions that operate on numbered bit-fields.
|
||||
*/
|
||||
#define BITS_BIG_ENDIAN 0
|
||||
|
||||
/* Define this if most significant byte of a word is the lowest numbered. */
|
||||
#ifndef BYTES_BIG_ENDIAN
|
||||
#ifndef DECSTATION
|
||||
#define BYTES_BIG_ENDIAN 1
|
||||
#else
|
||||
#define BYTES_BIG_ENDIAN 0
|
||||
#endif
|
||||
#endif
|
||||
#define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
|
||||
|
||||
/* Define this if most significant word of a multiword number is the lowest. */
|
||||
#ifndef WORDS_BIG_ENDIAN
|
||||
#ifndef DECSTATION
|
||||
#define WORDS_BIG_ENDIAN 1
|
||||
#define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0)
|
||||
|
||||
/* Define this to set the endianness to use in libgcc2.c, which can
|
||||
not depend on target_flags. */
|
||||
#if !defined(MIPSEL) && !defined(__MIPSEL__)
|
||||
#define LIBGCC2_WORDS_BIG_ENDIAN 1
|
||||
#else
|
||||
#define WORDS_BIG_ENDIAN 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Define macros to easily access the most and least significant words
|
||||
without a lot of #ifdef's. */
|
||||
|
||||
#if WORDS_BIG_ENDIAN
|
||||
#define MOST_SIGNIFICANT_WORD 0
|
||||
#define LEAST_SIGNIFICANT_WORD 1
|
||||
|
||||
#else
|
||||
#define MOST_SIGNIFICANT_WORD 1
|
||||
#define LEAST_SIGNIFICANT_WORD 0
|
||||
#define LIBGCC2_WORDS_BIG_ENDIAN 0
|
||||
#endif
|
||||
|
||||
/* Number of bits in an addressable storage unit */
|
||||
|
@ -2602,9 +2607,13 @@ while (0)
|
|||
return COSTS_N_INSNS (SYMBOL_REF_FLAG (X) ? 1 : 2); \
|
||||
\
|
||||
case CONST_DOUBLE: \
|
||||
return COSTS_N_INSNS ((CONST_DOUBLE_HIGH (X) == 0 \
|
||||
&& CONST_DOUBLE_LOW (X)) ? 2 : 4);
|
||||
|
||||
{ \
|
||||
rtx high, low; \
|
||||
split_double (X, &high, &low); \
|
||||
return COSTS_N_INSNS ((high == CONST0_RTX (GET_MODE (high)) \
|
||||
|| low == CONST0_RTX (GET_MODE (low))) \
|
||||
? 2 : 4); \
|
||||
}
|
||||
|
||||
/* Like `CONST_COSTS' but applies to nonconstant RTL expressions.
|
||||
This can be used, for example, to indicate how costly a multiply
|
||||
|
|
|
@ -80,7 +80,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
%{!.S:%{!.s: -D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}} \
|
||||
%{mlong64:-D__PTRDIFF_TYPE__=long\\ int} \
|
||||
%{!mlong64:-D__PTRDIFF_TYPE__=int} \
|
||||
%{mips3:-U__mips -D__mips=3}"
|
||||
%{mips3:-U__mips -D__mips=3} \
|
||||
%{EB:-UMIPSEL -U_MIPSEL -U__MIPSEL -U__MIPSEL__ -D_MIPSEB -D__MIPSEB -D__MIPSEB__ %{!ansi:-DMIPSEB}} \
|
||||
%{EL:-UMIPSEB -U_MIPSEB -U__MIPSEB -U__MIPSEB__ -D_MIPSEL -D__MIPSEL -D__MIPSEL__ %{!ansi:-DMIPSEL}}"
|
||||
|
||||
/* ??? This assumes that GNU as is always used with GNU ld, and MIPS as is
|
||||
always used with MIPS ld. */
|
||||
|
|
|
@ -6,3 +6,10 @@
|
|||
# and does not need anything from libgcc1.a.
|
||||
LIBGCC1 = libgcc1.null
|
||||
CROSS_LIBGCC1 = libgcc1.null
|
||||
|
||||
MULTILIB_OPTIONS=EL/EB
|
||||
MULTILIB_DIRNAMES=el eb
|
||||
MULTILIB_MATCHES=
|
||||
|
||||
LIBGCC = stmp-multilib
|
||||
INSTALL_LIBGCC = install-multilib
|
||||
|
|
|
@ -2,3 +2,10 @@
|
|||
# and does not need anything from libgcc1.a.
|
||||
LIBGCC1 = libgcc1.null
|
||||
CROSS_LIBGCC1 = libgcc1.null
|
||||
|
||||
MULTILIB_OPTIONS=EL/EB
|
||||
MULTILIB_DIRNAMES=el eb
|
||||
MULTILIB_MATCHES=
|
||||
|
||||
LIBGCC = stmp-multilib
|
||||
INSTALL_LIBGCC = install-multilib
|
||||
|
|
Loading…
Reference in New Issue