OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc33?expand=0&rev=3
613 lines
25 KiB
Diff
613 lines
25 KiB
Diff
Index: gcc-3.3.3/gcc/Makefile.in
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/Makefile.in 2009-11-20 13:06:00.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/Makefile.in 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -449,6 +449,10 @@ LIB2FUNCS_EXTRA =
|
||
# Assembler files should have names ending in `.asm'.
|
||
LIB2FUNCS_STATIC_EXTRA =
|
||
|
||
+# List of extra C and assembler files to add to shared libgcc2.
|
||
+# Assembler files should have names ending in `.asm'.
|
||
+LIB2FUNCS_SHARED_EXTRA =
|
||
+
|
||
# Program to convert libraries.
|
||
LIBCONVERT =
|
||
|
||
@@ -1027,8 +1031,10 @@ xlimits.h: glimits.h limitx.h limity.h
|
||
|
||
LIB2ADD = $(LIB2FUNCS_EXTRA)
|
||
LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
|
||
+LIB2ADD_SH = $(LIB2FUNCS_SHARED_EXTRA)
|
||
|
||
-libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) xgcc$(exeext) specs
|
||
+libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) \
|
||
+ $(LIB2ADD_SH) xgcc$(exeext) specs
|
||
objext='$(objext)' \
|
||
LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
|
||
LIB2FUNCS_1='$(LIB2FUNCS_1)' \
|
||
@@ -1036,6 +1042,7 @@ libgcc.mk: config.status Makefile mklibg
|
||
LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
|
||
LIB2ADD='$(LIB2ADD)' \
|
||
LIB2ADD_ST='$(LIB2ADD_ST)' \
|
||
+ LIB2ADD_SH='$(LIB2ADD_SH)' \
|
||
LIB2ADDEH='$(LIB2ADDEH)' \
|
||
LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
|
||
FPBIT='$(FPBIT)' \
|
||
@@ -1065,8 +1072,8 @@ LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES)
|
||
libgcc.mk $(srcdir)/libgcc2.c $(TCONFIG_H) \
|
||
$(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \
|
||
tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
|
||
- $(LIB2ADD_ST) $(LIB2ADDEH) $(LIB2ADDEHDEP) $(EXTRA_PARTS) \
|
||
- $(srcdir)/config/$(LIB1ASMSRC)
|
||
+ $(LIB2ADD_ST) $(LIB2ADD_SH) $(LIB2ADDEH) $(LIB2ADDEHDEP) \
|
||
+ $(EXTRA_PARTS) $(srcdir)/config/$(LIB1ASMSRC)
|
||
|
||
libgcc.a: $(LIBGCC_DEPS)
|
||
$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
|
||
Index: gcc-3.3.3/gcc/mklibgcc.in
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/mklibgcc.in 2003-12-24 23:42:28.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/mklibgcc.in 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -14,6 +14,7 @@
|
||
# LIB2FUNCS_ST
|
||
# LIB2ADD
|
||
# LIB2ADD_ST
|
||
+# LIB2ADD_SH
|
||
# LIB2ADDEH
|
||
# LIB2ADDEHDEP
|
||
# FPBIT
|
||
@@ -267,7 +268,31 @@ for ml in $MULTILIBS; do
|
||
for o in $libgcc2_eh_objs; do
|
||
libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o"
|
||
done
|
||
+
|
||
+ if [ "$SHLIB_LINK" ]; then
|
||
+ for file in $LIB2ADD_SH; do
|
||
+ name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
|
||
+ oname=`echo $name | sed -e 's,.*/,,'`
|
||
+
|
||
+ for ml in $MULTILIBS; do
|
||
+ dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
|
||
+ flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
|
||
+ out="libgcc/${dir}/${oname}${objext}"
|
||
+ if [ ${name}.asm = ${file} ]; then
|
||
+ flags="$flags -xassembler-with-cpp"
|
||
+ fi
|
||
+
|
||
+ echo $out: stmp-dirs $file
|
||
+ echo " $gcc_compile" $flags -c $file -o $out
|
||
+ done
|
||
+ libgcc2_sh_objs="$libgcc2_sh_objs ${oname}${objext}"
|
||
+ done
|
||
+ fi
|
||
+
|
||
libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs"
|
||
+ for o in $libgcc2_sh_objs; do
|
||
+ libgcc_sh_objs="$libgcc_sh_objs libgcc/${dir}/$o"
|
||
+ done
|
||
shlib_deps="$libgcc_sh_objs"
|
||
|
||
libgcc_st_objs=""
|
||
Index: gcc-3.3.3/gcc/reload.c
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/reload.c 2009-11-20 13:04:56.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/reload.c 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -2202,12 +2202,15 @@ operands_match_p (x, y)
|
||
j = REGNO (y);
|
||
|
||
/* On a WORDS_BIG_ENDIAN machine, point to the last register of a
|
||
- multiple hard register group, so that for example (reg:DI 0) and
|
||
- (reg:SI 1) will be considered the same register. */
|
||
+ multiple hard register group of scalar integer registers, so that
|
||
+ for example (reg:DI 0) and (reg:SI 1) will be considered the same
|
||
+ register. */
|
||
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD
|
||
+ && SCALAR_INT_MODE_P (GET_MODE (x))
|
||
&& i < FIRST_PSEUDO_REGISTER)
|
||
i += (GET_MODE_SIZE (GET_MODE (x)) / UNITS_PER_WORD) - 1;
|
||
if (WORDS_BIG_ENDIAN && GET_MODE_SIZE (GET_MODE (y)) > UNITS_PER_WORD
|
||
+ && SCALAR_INT_MODE_P (GET_MODE (y))
|
||
&& j < FIRST_PSEUDO_REGISTER)
|
||
j += (GET_MODE_SIZE (GET_MODE (y)) / UNITS_PER_WORD) - 1;
|
||
|
||
Index: gcc-3.3.3/gcc/config/rs6000/aix.h
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/aix.h 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/aix.h 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,6 +1,6 @@
|
||
/* Definitions of target machine for GNU compiler,
|
||
for IBM RS/6000 POWER running AIX.
|
||
- Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
|
||
This file is part of GCC.
|
||
|
||
@@ -175,15 +175,15 @@
|
||
#define JUMP_TABLES_IN_TEXT_SECTION 1
|
||
|
||
/* Enable AIX XL compiler calling convention breakage compatibility. */
|
||
-#undef TARGET_XL_CALL
|
||
-#define MASK_XL_CALL 0x40000000
|
||
-#define TARGET_XL_CALL (target_flags & MASK_XL_CALL)
|
||
+#undef TARGET_XL_COMPAT
|
||
+#define MASK_XL_COMPAT 0x40000000
|
||
+#define TARGET_XL_COMPAT (target_flags & MASK_XL_COMPAT)
|
||
#undef SUBTARGET_SWITCHES
|
||
#define SUBTARGET_SWITCHES \
|
||
- {"xl-call", MASK_XL_CALL, \
|
||
- N_("Always pass floating-point arguments in memory") }, \
|
||
- {"no-xl-call", - MASK_XL_CALL, \
|
||
- N_("Don't always pass floating-point arguments in memory") }, \
|
||
+ {"xl-compat", MASK_XL_COMPAT, \
|
||
+ N_("Conform more closely to IBM XLC semantics") }, \
|
||
+ {"no-xl-compat", - MASK_XL_COMPAT, \
|
||
+ N_("Default GCC semantics that differ from IBM XLC") }, \
|
||
SUBSUBTARGET_SWITCHES
|
||
#define SUBSUBTARGET_SWITCHES
|
||
|
||
Index: gcc-3.3.3/gcc/config/rs6000/beos.h
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/beos.h 2002-07-10 02:33:51.000000000 +0200
|
||
+++ gcc-3.3.3/gcc/config/rs6000/beos.h 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -23,18 +23,6 @@ Boston, MA 02111-1307, USA. */
|
||
#undef TARGET_VERSION
|
||
#define TARGET_VERSION fprintf (stderr, " (BeOS/PowerPC)");
|
||
|
||
-/* Enable AIX XL compiler calling convention breakage compatibility. */
|
||
-#define MASK_XL_CALL 0x40000000
|
||
-#define TARGET_XL_CALL (target_flags & MASK_XL_CALL)
|
||
-#undef SUBTARGET_SWITCHES
|
||
-#define SUBTARGET_SWITCHES \
|
||
- {"xl-call", MASK_XL_CALL, \
|
||
- N_("Always pass floating-point arguments in memory") }, \
|
||
- {"no-xl-call", - MASK_XL_CALL, \
|
||
- N_("Don't always pass floating-point arguments in memory") }, \
|
||
- {"threads", 0}, \
|
||
- {"pe", 0},
|
||
-
|
||
#undef ASM_SPEC
|
||
#define ASM_SPEC "-u %(asm_cpu)"
|
||
|
||
Index: gcc-3.3.3/gcc/config/rs6000/darwin-ldouble-shared.c
|
||
===================================================================
|
||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||
+++ gcc-3.3.3/gcc/config/rs6000/darwin-ldouble-shared.c 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -0,0 +1,2 @@
|
||
+#define IN_LIBGCC2_S 1
|
||
+#include "darwin-ldouble.c"
|
||
Index: gcc-3.3.3/gcc/config/rs6000/darwin-ldouble.c
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/darwin-ldouble.c 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/darwin-ldouble.c 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,5 +1,5 @@
|
||
/* 128-bit long double support routines for Darwin.
|
||
- Copyright (C) 1993, 2003, 2004 Free Software Foundation, Inc.
|
||
+ Copyright (C) 1993, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
|
||
This file is part of GCC.
|
||
|
||
@@ -48,7 +48,7 @@ Software Foundation, 59 Temple Place - S
|
||
|
||
This code currently assumes big-endian. */
|
||
|
||
-#if !_SOFT_FLOAT && (defined (__MACH__) || defined (__powerpc64__))
|
||
+#if !_SOFT_FLOAT && (defined (__MACH__) || defined (__powerpc64__) || defined (_AIX))
|
||
|
||
#define fabs(x) __builtin_fabs(x)
|
||
|
||
@@ -58,10 +58,27 @@ Software Foundation, 59 Temple Place - S
|
||
but GCC currently generates poor code when a union is used to turn
|
||
a long double into a pair of doubles. */
|
||
|
||
-extern long double _xlqadd (double, double, double, double);
|
||
-extern long double _xlqsub (double, double, double, double);
|
||
-extern long double _xlqmul (double, double, double, double);
|
||
-extern long double _xlqdiv (double, double, double, double);
|
||
+extern long double __gcc_qadd (double, double, double, double);
|
||
+extern long double __gcc_qsub (double, double, double, double);
|
||
+extern long double __gcc_qmul (double, double, double, double);
|
||
+extern long double __gcc_qdiv (double, double, double, double);
|
||
+
|
||
+#if defined __ELF__ && defined IN_LIBGCC2_S
|
||
+/* Provide definitions of the old symbol names to statisfy apps and
|
||
+ shared libs built against an older libgcc. To access the _xlq
|
||
+ symbols an explicit version reference is needed, so these won't
|
||
+ satisfy an unadorned reference like _xlqadd. If dot symbols are
|
||
+ not needed, the assembler will remove the aliases from the symbol
|
||
+ table. */
|
||
+__asm__ (".symver __gcc_qadd,_xlqadd@GCC_3.4\n\t"
|
||
+ ".symver __gcc_qsub,_xlqsub@GCC_3.4\n\t"
|
||
+ ".symver __gcc_qmul,_xlqmul@GCC_3.4\n\t"
|
||
+ ".symver __gcc_qdiv,_xlqdiv@GCC_3.4\n\t"
|
||
+ ".symver .__gcc_qadd,._xlqadd@GCC_3.4\n\t"
|
||
+ ".symver .__gcc_qsub,._xlqsub@GCC_3.4\n\t"
|
||
+ ".symver .__gcc_qmul,._xlqmul@GCC_3.4\n\t"
|
||
+ ".symver .__gcc_qdiv,._xlqdiv@GCC_3.4");
|
||
+#endif
|
||
|
||
typedef union
|
||
{
|
||
@@ -73,7 +90,7 @@ static const double FPKINF = 1.0/0.0;
|
||
|
||
/* Add two 'long double' values and return the result. */
|
||
long double
|
||
-_xlqadd (double a, double b, double c, double d)
|
||
+__gcc_qadd (double a, double b, double c, double d)
|
||
{
|
||
longDblUnion z;
|
||
double t, tau, u, FPR_zero, FPR_PosInf;
|
||
@@ -132,13 +149,13 @@ _xlqadd (double a, double b, double c, d
|
||
}
|
||
|
||
long double
|
||
-_xlqsub (double a, double b, double c, double d)
|
||
+__gcc_qsub (double a, double b, double c, double d)
|
||
{
|
||
- return _xlqadd (a, b, -c, -d);
|
||
+ return __gcc_qadd (a, b, -c, -d);
|
||
}
|
||
|
||
long double
|
||
-_xlqmul (double a, double b, double c, double d)
|
||
+__gcc_qmul (double a, double b, double c, double d)
|
||
{
|
||
longDblUnion z;
|
||
double t, tau, u, v, w, FPR_zero, FPR_PosInf;
|
||
@@ -169,7 +186,7 @@ _xlqmul (double a, double b, double c, d
|
||
}
|
||
|
||
long double
|
||
-_xlqdiv (double a, double b, double c, double d)
|
||
+__gcc_qdiv (double a, double b, double c, double d)
|
||
{
|
||
longDblUnion z;
|
||
double s, sigma, t, tau, u, v, w, FPR_zero, FPR_PosInf;
|
||
Index: gcc-3.3.3/gcc/config/rs6000/libgcc-ppc64.ver
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/libgcc-ppc64.ver 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/libgcc-ppc64.ver 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,7 +1,7 @@
|
||
-GCC_3.4 {
|
||
+GCC_3.4.4 {
|
||
# long double support
|
||
- _xlqadd
|
||
- _xlqsub
|
||
- _xlqmul
|
||
- _xlqdiv
|
||
+ __gcc_qadd
|
||
+ __gcc_qsub
|
||
+ __gcc_qmul
|
||
+ __gcc_qdiv
|
||
}
|
||
Index: gcc-3.3.3/gcc/config/rs6000/rs6000.c
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/rs6000.c 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/rs6000.c 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,6 +1,6 @@
|
||
/* Subroutines used for code generation on IBM RS/6000.
|
||
Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||
- 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||
+ 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
|
||
|
||
This file is part of GCC.
|
||
@@ -4636,7 +4636,7 @@ function_arg (cum, mode, type, named)
|
||
needs_psave = (type
|
||
&& (cum->nargs_prototype <= 0
|
||
|| (DEFAULT_ABI == ABI_AIX
|
||
- && TARGET_XL_CALL
|
||
+ && TARGET_XL_COMPAT
|
||
&& align_words >= GP_ARG_NUM_REG)));
|
||
|
||
if (!needs_psave && mode == fmode)
|
||
@@ -4733,7 +4733,7 @@ function_arg_partial_nregs (cum, mode, t
|
||
&& !(type
|
||
&& (cum->nargs_prototype <= 0
|
||
|| (DEFAULT_ABI == ABI_AIX
|
||
- && TARGET_XL_CALL
|
||
+ && TARGET_XL_COMPAT
|
||
&& align_words >= GP_ARG_NUM_REG))))
|
||
{
|
||
if (cum->fregno + ((GET_MODE_SIZE (mode) + 7) >> 3) > FP_ARG_MAX_REG + 1)
|
||
@@ -10119,10 +10119,34 @@ rs6000_generate_compare (code)
|
||
emit_insn (cmp);
|
||
}
|
||
else
|
||
- emit_insn (gen_rtx_SET (VOIDmode, compare_result,
|
||
- gen_rtx_COMPARE (comp_mode,
|
||
- rs6000_compare_op0,
|
||
- rs6000_compare_op1)));
|
||
+ {
|
||
+ /* Generate XLC-compatible TFmode compare as PARALLEL with extra
|
||
+ CLOBBERs to match cmptf_internal2 pattern. */
|
||
+ if (comp_mode == CCFPmode && TARGET_XL_COMPAT
|
||
+ && GET_MODE (rs6000_compare_op0) == TFmode
|
||
+ && (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
|
||
+ && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128)
|
||
+ emit_insn (gen_rtx_PARALLEL (VOIDmode,
|
||
+ gen_rtvec (9,
|
||
+ gen_rtx_SET (VOIDmode,
|
||
+ compare_result,
|
||
+ gen_rtx_COMPARE (comp_mode,
|
||
+ rs6000_compare_op0,
|
||
+ rs6000_compare_op1)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)),
|
||
+ gen_rtx_CLOBBER (VOIDmode, gen_rtx_SCRATCH (DFmode)))));
|
||
+ else
|
||
+ emit_insn (gen_rtx_SET (VOIDmode, compare_result,
|
||
+ gen_rtx_COMPARE (comp_mode,
|
||
+ rs6000_compare_op0,
|
||
+ rs6000_compare_op1)));
|
||
+ }
|
||
|
||
/* Some kinds of FP comparisons need an OR operation;
|
||
under flag_finite_math_only we don't bother. */
|
||
Index: gcc-3.3.3/gcc/config/rs6000/rs6000.h
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/rs6000.h 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/rs6000.h 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -257,7 +257,7 @@ extern int target_flags;
|
||
#define TARGET_POWERPC64 (target_flags & MASK_POWERPC64)
|
||
#endif
|
||
|
||
-#define TARGET_XL_CALL 0
|
||
+#define TARGET_XL_COMPAT 0
|
||
|
||
/* Run-time compilation parameters selecting different hardware subsets.
|
||
|
||
@@ -3393,13 +3393,13 @@ do { \
|
||
\
|
||
/* AIX/Darwin/64-bit SVR4 quad floating point routines. */ \
|
||
add_optab->handlers[(int) TFmode].libfunc \
|
||
- = init_one_libfunc ("_xlqadd"); \
|
||
+ = init_one_libfunc ("__gcc_qadd"); \
|
||
sub_optab->handlers[(int) TFmode].libfunc \
|
||
- = init_one_libfunc ("_xlqsub"); \
|
||
+ = init_one_libfunc ("__gcc_qsub"); \
|
||
smul_optab->handlers[(int) TFmode].libfunc \
|
||
- = init_one_libfunc ("_xlqmul"); \
|
||
+ = init_one_libfunc ("__gcc_qmul"); \
|
||
sdiv_optab->handlers[(int) TFmode].libfunc \
|
||
- = init_one_libfunc ("_xlqdiv"); \
|
||
+ = init_one_libfunc ("__gcc_qdiv"); \
|
||
} \
|
||
else \
|
||
{ \
|
||
Index: gcc-3.3.3/gcc/config/rs6000/rs6000.md
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/rs6000.md 2009-11-20 13:06:29.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/rs6000.md 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,6 +1,6 @@
|
||
;; Machine description for IBM RISC System 6000 (POWER) for GNU C compiler
|
||
;; Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||
-;; 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||
+;; 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
;; Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
|
||
|
||
;; This file is part of GCC.
|
||
@@ -8213,14 +8213,36 @@
|
||
DONE;
|
||
})
|
||
|
||
-(define_insn "trunctfdf2"
|
||
+(define_expand "trunctfdf2"
|
||
+ [(set (match_operand:DF 0 "gpc_reg_operand" "")
|
||
+ (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "")))]
|
||
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
|
||
+ && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
|
||
+ "")
|
||
+
|
||
+(define_insn_and_split "trunctfdf2_internal1"
|
||
+ [(set (match_operand:DF 0 "gpc_reg_operand" "=f,?f")
|
||
+ (float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "0,f")))]
|
||
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) && !TARGET_XL_COMPAT
|
||
+ && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
|
||
+ "@
|
||
+ #
|
||
+ fmr %0,%1"
|
||
+ "&& reload_completed && REGNO (operands[0]) == REGNO (operands[1])"
|
||
+ [(const_int 0)]
|
||
+{
|
||
+ emit_note (0, NOTE_INSN_DELETED);
|
||
+ DONE;
|
||
+}
|
||
+ [(set_attr "type" "fp")])
|
||
+
|
||
+(define_insn "trunctfdf2_internal2"
|
||
[(set (match_operand:DF 0 "gpc_reg_operand" "=f")
|
||
(float_truncate:DF (match_operand:TF 1 "gpc_reg_operand" "f")))]
|
||
- "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
|
||
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) && TARGET_XL_COMPAT
|
||
&& TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
|
||
"fadd %0,%1,%L1"
|
||
- [(set_attr "type" "fp")
|
||
- (set_attr "length" "4")])
|
||
+ [(set_attr "type" "fp")])
|
||
|
||
(define_insn_and_split "trunctfsf2"
|
||
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")
|
||
@@ -11210,11 +11232,73 @@
|
||
[(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
|
||
(compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "f")
|
||
(match_operand:TF 2 "gpc_reg_operand" "f")))]
|
||
- "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN)
|
||
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) && !TARGET_XL_COMPAT
|
||
&& TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
|
||
"fcmpu %0,%1,%2\;bne %0,$+8\;fcmpu %0,%L1,%L2"
|
||
[(set_attr "type" "fpcompare")
|
||
(set_attr "length" "12")])
|
||
+
|
||
+
|
||
+(define_insn_and_split "*cmptf_internal2"
|
||
+ [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
|
||
+ (compare:CCFP (match_operand:TF 1 "gpc_reg_operand" "f")
|
||
+ (match_operand:TF 2 "gpc_reg_operand" "f")))
|
||
+ (clobber (match_scratch:DF 3 "=f"))
|
||
+ (clobber (match_scratch:DF 4 "=f"))
|
||
+ (clobber (match_scratch:DF 5 "=f"))
|
||
+ (clobber (match_scratch:DF 6 "=f"))
|
||
+ (clobber (match_scratch:DF 7 "=f"))
|
||
+ (clobber (match_scratch:DF 8 "=f"))
|
||
+ (clobber (match_scratch:DF 9 "=f"))
|
||
+ (clobber (match_scratch:DF 10 "=f"))]
|
||
+ "(DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_DARWIN) && TARGET_XL_COMPAT
|
||
+ && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_LONG_DOUBLE_128"
|
||
+ "#"
|
||
+ "&& reload_completed"
|
||
+ [(set (match_dup 3) (match_dup 13))
|
||
+ (set (match_dup 4) (match_dup 14))
|
||
+ (set (match_dup 9) (abs:DF (match_dup 5)))
|
||
+ (set (match_dup 0) (compare:CCFP (match_dup 9) (match_dup 3)))
|
||
+ (set (pc) (if_then_else (ne (match_dup 0) (const_int 0))
|
||
+ (label_ref (match_dup 11))
|
||
+ (pc)))
|
||
+ (set (match_dup 0) (compare:CCFP (match_dup 5) (match_dup 7)))
|
||
+ (set (pc) (label_ref (match_dup 12)))
|
||
+ (match_dup 11)
|
||
+ (set (match_dup 10) (minus:DF (match_dup 5) (match_dup 7)))
|
||
+ (set (match_dup 9) (minus:DF (match_dup 6) (match_dup 8)))
|
||
+ (set (match_dup 9) (plus:DF (match_dup 10) (match_dup 9)))
|
||
+ (set (match_dup 0) (compare:CCFP (match_dup 7) (match_dup 4)))
|
||
+ (match_dup 12)]
|
||
+{
|
||
+ REAL_VALUE_TYPE rv;
|
||
+ const int lo_word = FLOAT_WORDS_BIG_ENDIAN ? GET_MODE_SIZE (DFmode) : 0;
|
||
+ const int hi_word = FLOAT_WORDS_BIG_ENDIAN ? 0 : GET_MODE_SIZE (DFmode);
|
||
+
|
||
+ operands[5] = simplify_gen_subreg (DFmode, operands[1], TFmode, hi_word);
|
||
+ operands[6] = simplify_gen_subreg (DFmode, operands[1], TFmode, lo_word);
|
||
+ operands[7] = simplify_gen_subreg (DFmode, operands[2], TFmode, hi_word);
|
||
+ operands[8] = simplify_gen_subreg (DFmode, operands[2], TFmode, lo_word);
|
||
+ operands[11] = gen_label_rtx ();
|
||
+ operands[12] = gen_label_rtx ();
|
||
+ real_inf (&rv);
|
||
+ operands[13] = force_const_mem (DFmode,
|
||
+ CONST_DOUBLE_FROM_REAL_VALUE (rv, DFmode));
|
||
+ operands[14] = force_const_mem (DFmode,
|
||
+ CONST_DOUBLE_FROM_REAL_VALUE (dconst0,
|
||
+ DFmode));
|
||
+ if (TARGET_TOC)
|
||
+ {
|
||
+ operands[13] = gen_rtx_MEM (DFmode,
|
||
+ create_TOC_reference (XEXP (operands[13], 0)));
|
||
+ operands[14] = gen_rtx_MEM (DFmode,
|
||
+ create_TOC_reference (XEXP (operands[14], 0)));
|
||
+ set_mem_alias_set (operands[13], get_TOC_alias_set ());
|
||
+ set_mem_alias_set (operands[14], get_TOC_alias_set ());
|
||
+ RTX_UNCHANGING_P (operands[13]) = 1;
|
||
+ RTX_UNCHANGING_P (operands[14]) = 1;
|
||
+ }
|
||
+})
|
||
|
||
;; Now we have the scc insns. We can do some combinations because of the
|
||
;; way the machine works.
|
||
Index: gcc-3.3.3/gcc/config/rs6000/t-aix43
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/t-aix43 2003-01-26 12:35:08.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/t-aix43 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -58,9 +58,12 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2
|
||
SHLIB_INSTALL = $(INSTALL_DATA) @shlib_base_name@.a $$(DESTDIR)$$(slibdir)/
|
||
SHLIB_LIBS = -lc `case @shlib_base_name@ in *pthread*) echo -lpthread ;; esac`
|
||
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
|
||
-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
|
||
+SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/rs6000/libgcc-ppc64.ver
|
||
SHLIB_NM_FLAGS = -Bpg -X32_64
|
||
|
||
+# GCC 128-bit long double support routines.
|
||
+LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-ldouble.c
|
||
+
|
||
# Either 32-bit and 64-bit objects in archives.
|
||
AR_FLAGS_FOR_TARGET = -X32_64
|
||
|
||
Index: gcc-3.3.3/gcc/config/rs6000/t-aix52
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/t-aix52 2003-01-26 12:35:08.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/config/rs6000/t-aix52 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -39,9 +39,12 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2
|
||
SHLIB_INSTALL = $(INSTALL_DATA) @shlib_base_name@.a $$(DESTDIR)$$(slibdir)/
|
||
SHLIB_LIBS = -lc `case @shlib_base_name@ in *pthread*) echo -lpthread ;; esac`
|
||
SHLIB_MKMAP = $(srcdir)/mkmap-flat.awk
|
||
-SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver
|
||
+SHLIB_MAPFILES = $(srcdir)/libgcc-std.ver $(srcdir)/config/rs6000/libgcc-ppc64.ver
|
||
SHLIB_NM_FLAGS = -Bpg -X32_64
|
||
|
||
+# GCC 128-bit long double support routines.
|
||
+LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-ldouble.c
|
||
+
|
||
# Either 32-bit and 64-bit objects in archives.
|
||
AR_FLAGS_FOR_TARGET = -X32_64
|
||
|
||
Index: gcc-3.3.3/gcc/config/rs6000/t-newas
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/config/rs6000/t-newas 2001-05-17 05:16:11.000000000 +0200
|
||
+++ gcc-3.3.3/gcc/config/rs6000/t-newas 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -42,6 +42,9 @@ MULTILIB_MATCHES = msoft-float=mcpu?403
|
||
LIBGCC = stmp-multilib
|
||
INSTALL_LIBGCC = install-multilib
|
||
|
||
+# GCC 128-bit long double support routines.
|
||
+LIB2FUNCS_EXTRA = $(srcdir)/config/rs6000/darwin-ldouble.c
|
||
+
|
||
# Aix 3.2.x needs milli.exp for -mcpu=common
|
||
EXTRA_PARTS = milli.exp
|
||
milli.exp: $(srcdir)/config/rs6000/milli.exp
|
||
Index: gcc-3.3.3/gcc/doc/invoke.texi
|
||
===================================================================
|
||
--- gcc-3.3.3.orig/gcc/doc/invoke.texi 2009-11-20 13:04:57.000000000 +0100
|
||
+++ gcc-3.3.3/gcc/doc/invoke.texi 2009-11-20 13:06:36.000000000 +0100
|
||
@@ -1,12 +1,12 @@
|
||
@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||
-@c 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||
+@c 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
@c This is part of the GCC manual.
|
||
@c For copying conditions, see the file gcc.texi.
|
||
|
||
@ignore
|
||
@c man begin COPYRIGHT
|
||
Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
|
||
-1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||
|
||
Permission is granted to copy, distribute and/or modify this document
|
||
under the terms of the GNU Free Documentation License, Version 1.2 or
|
||
@@ -406,7 +406,7 @@ in the following sections.
|
||
-mpowerpc-gfxopt -mno-powerpc-gfxopt @gol
|
||
-mnew-mnemonics -mold-mnemonics @gol
|
||
-mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc @gol
|
||
--m64 -m32 -mxl-call -mno-xl-call -mpe @gol
|
||
+-m64 -m32 -mxl-compat -mno-xl-compat -mpe @gol
|
||
-msoft-float -mhard-float -mmultiple -mno-multiple @gol
|
||
-mstring -mno-string -mupdate -mno-update @gol
|
||
-mfused-madd -mno-fused-madd -mbit-align -mno-bit-align @gol
|
||
@@ -6937,13 +6937,17 @@ Specifying @option{-maix64} implies @opt
|
||
@option{-mpowerpc}, while @option{-maix32} disables the 64-bit ABI and
|
||
implies @option{-mno-powerpc64}. GCC defaults to @option{-maix32}.
|
||
|
||
-@item -mxl-call
|
||
-@itemx -mno-xl-call
|
||
-@opindex mxl-call
|
||
-@opindex mno-xl-call
|
||
-On AIX, pass floating-point arguments to prototyped functions beyond the
|
||
-register save area (RSA) on the stack in addition to argument FPRs. The
|
||
-AIX calling convention was extended but not initially documented to
|
||
+@item -mxl-compat
|
||
+@itemx -mno-xl-compat
|
||
+@opindex mxl-compat
|
||
+@opindex mno-xl-compat
|
||
+Produce code that conforms more closely to IBM XLC semantics when using
|
||
+AIX-compatible ABI. Pass floating-point arguments to prototyped
|
||
+functions beyond the register save area (RSA) on the stack in addition
|
||
+to argument FPRs. Do not assume that most significant double in 128
|
||
+bit long double value is properly rounded when comparing values.
|
||
+
|
||
+The AIX calling convention was extended but not initially documented to
|
||
handle an obscure K&R C case of calling a function that takes the
|
||
address of its arguments with fewer arguments than declared. AIX XL
|
||
compilers access floating point arguments which do not fit in the
|