Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.2
libgcj33
nov65883.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nov65883.diff of Package libgcj33
Index: gcc/gcc/Makefile.in =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/Makefile.in,v retrieving revision 1.955.2.35 diff -u -3 -r1.955.2.35 Makefile.in --- gcc/gcc/Makefile.in 14 Jun 2004 18:18:49 -0000 1.955.2.35 +++ gcc/gcc/Makefile.in 25 Feb 2005 21:50:42 -0000 @@ -449,6 +449,10 @@ # 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 @@ 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 @@ 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.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/gcc/mklibgcc.in =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/mklibgcc.in,v retrieving revision 1.48.2.6 diff -u -3 -r1.48.2.6 mklibgcc.in --- gcc/gcc/mklibgcc.in 27 Jan 2004 23:21:58 -0000 1.48.2.6 +++ gcc/gcc/mklibgcc.in 25 Feb 2005 21:35:35 -0000 @@ -14,6 +14,7 @@ # LIB2FUNCS_ST # LIB2ADD # LIB2ADD_ST +# LIB2ADD_SH # LIB2ADDEH # LIB2ADDEHDEP # FPBIT @@ -267,7 +268,31 @@ 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/gcc/reload.c =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/reload.c,v retrieving revision 1.197.2.15 diff -u -3 -r1.197.2.15 reload.c --- gcc/gcc/reload.c 14 Jun 2004 18:19:20 -0000 1.197.2.15 +++ gcc/gcc/reload.c 25 Feb 2005 22:57:15 -0000 @@ -2202,12 +2202,15 @@ 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/gcc/config/rs6000/aix.h =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/aix.h,v retrieving revision 1.33.12.3 diff -u -3 -r1.33.12.3 aix.h --- gcc/gcc/config/rs6000/aix.h 6 Feb 2004 07:17:38 -0000 1.33.12.3 +++ gcc/gcc/config/rs6000/aix.h 25 Feb 2005 17:44:06 -0000 @@ -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/gcc/config/rs6000/beos.h =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/beos.h,v retrieving revision 1.11 diff -u -3 -r1.11 beos.h --- gcc/gcc/config/rs6000/beos.h 10 Jul 2002 00:33:51 -0000 1.11 +++ gcc/gcc/config/rs6000/beos.h 25 Feb 2005 17:44:06 -0000 @@ -23,18 +23,6 @@ #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/gcc/config/rs6000/darwin-ldouble-shared.c =================================================================== RCS file: gcc/gcc/config/rs6000/darwin-ldouble-shared.c diff -N gcc/gcc/config/rs6000/darwin-ldouble-shared.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gcc/gcc/config/rs6000/darwin-ldouble-shared.c 26 Feb 2005 01:20:40 -0000 @@ -0,0 +1,2 @@ +#define IN_LIBGCC2_S 1 +#include "darwin-ldouble.c" Index: gcc/gcc/config/rs6000/darwin-ldouble.c =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/darwin-ldouble.c,v retrieving revision 1.5.2.1 diff -u -3 -r1.5.2.1 darwin-ldouble.c --- gcc/gcc/config/rs6000/darwin-ldouble.c 6 Feb 2004 07:17:38 -0000 1.5.2.1 +++ gcc/gcc/config/rs6000/darwin-ldouble.c 25 Feb 2005 21:08:58 -0000 @@ -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 @@ 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 @@ 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 @@ /* 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 @@ } 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 @@ } 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/gcc/config/rs6000/libgcc-ppc64.ver =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/libgcc-ppc64.ver,v retrieving revision 1.1.2.1 diff -u -3 -r1.1.2.1 libgcc-ppc64.ver --- gcc/gcc/config/rs6000/libgcc-ppc64.ver 6 Feb 2004 07:17:38 -0000 1.1.2.1 +++ gcc/gcc/config/rs6000/libgcc-ppc64.ver 25 Feb 2005 17:44:06 -0000 @@ -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/gcc/config/rs6000/rs6000.c =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/rs6000.c,v retrieving revision 1.397.2.47 diff -u -3 -r1.397.2.47 rs6000.c --- gcc/gcc/config/rs6000/rs6000.c 17 Jan 2005 19:24:26 -0000 1.397.2.47 +++ gcc/gcc/config/rs6000/rs6000.c 25 Feb 2005 19:54:32 -0000 @@ -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. @@ -4638,7 +4638,7 @@ 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) @@ -4735,7 +4735,7 @@ && !(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) @@ -10121,10 +10121,34 @@ 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/gcc/config/rs6000/rs6000.h =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/rs6000.h,v retrieving revision 1.234.2.29 diff -u -3 -r1.234.2.29 rs6000.h --- gcc/gcc/config/rs6000/rs6000.h 25 May 2004 06:08:57 -0000 1.234.2.29 +++ gcc/gcc/config/rs6000/rs6000.h 25 Feb 2005 19:05:15 -0000 @@ -257,7 +257,7 @@ #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 @@ \ /* 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/gcc/config/rs6000/rs6000.md =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/rs6000.md,v retrieving revision 1.221.4.20 diff -u -3 -r1.221.4.20 rs6000.md --- gcc/gcc/config/rs6000/rs6000.md 17 Jan 2005 19:24:30 -0000 1.221.4.20 +++ gcc/gcc/config/rs6000/rs6000.md 25 Feb 2005 22:59:05 -0000 @@ -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. @@ -8159,14 +8159,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") @@ -11156,11 +11178,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/gcc/config/rs6000/t-aix43 =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/t-aix43,v retrieving revision 1.18.12.1 diff -u -3 -r1.18.12.1 t-aix43 --- gcc/gcc/config/rs6000/t-aix43 31 Jan 2003 21:50:11 -0000 1.18.12.1 +++ gcc/gcc/config/rs6000/t-aix43 25 Feb 2005 17:44:06 -0000 @@ -58,9 +58,12 @@ 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/gcc/config/rs6000/t-aix52 =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/t-aix52,v retrieving revision 1.1.10.1 diff -u -3 -r1.1.10.1 t-aix52 --- gcc/gcc/config/rs6000/t-aix52 31 Jan 2003 21:50:11 -0000 1.1.10.1 +++ gcc/gcc/config/rs6000/t-aix52 25 Feb 2005 17:44:06 -0000 @@ -39,9 +39,12 @@ 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/gcc/config/rs6000/t-newas =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/config/rs6000/t-newas,v retrieving revision 1.5 diff -u -3 -r1.5 t-newas --- gcc/gcc/config/rs6000/t-newas 17 May 2001 03:16:11 -0000 1.5 +++ gcc/gcc/config/rs6000/t-newas 25 Feb 2005 19:36:15 -0000 @@ -42,6 +42,9 @@ 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/gcc/doc/invoke.texi =================================================================== RCS file: /home/jgrimm/gcc-cvs/gcc/gcc/doc/invoke.texi,v retrieving revision 1.198.2.44 diff -u -3 -r1.198.2.44 invoke.texi --- gcc/gcc/doc/invoke.texi 17 Jan 2005 19:24:56 -0000 1.198.2.44 +++ gcc/gcc/doc/invoke.texi 25 Feb 2005 17:49:28 -0000 @@ -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 @@ -407,7 +407,7 @@ -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 @@ -6956,13 +6956,17 @@ @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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor