From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 74813 invoked by alias); 30 Nov 2017 20:54:35 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 74802 invoked by uid 89); 30 Nov 2017 20:54:35 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-9.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,KB_WAM_FROM_NAME_SINGLEWORD,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy= X-HELO: mx0a-001b2d01.pphosted.com Received: from mx0b-001b2d01.pphosted.com (HELO mx0a-001b2d01.pphosted.com) (148.163.158.5) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 30 Nov 2017 20:54:32 +0000 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vAUKrqah119443 for ; Thu, 30 Nov 2017 15:54:31 -0500 Received: from e11.ny.us.ibm.com (e11.ny.us.ibm.com [129.33.205.201]) by mx0b-001b2d01.pphosted.com with ESMTP id 2ejrj22wgk-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 30 Nov 2017 15:54:30 -0500 Received: from localhost by e11.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 30 Nov 2017 15:54:29 -0500 Received: from b01cxnp22034.gho.pok.ibm.com (9.57.198.24) by e11.ny.us.ibm.com (146.89.104.198) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 30 Nov 2017 15:54:26 -0500 Received: from b01ledav006.gho.pok.ibm.com (b01ledav006.gho.pok.ibm.com [9.57.199.111]) by b01cxnp22034.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id vAUKsQXC52691040; Thu, 30 Nov 2017 20:54:26 GMT Received: from b01ledav006.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0195CAC046; Thu, 30 Nov 2017 15:55:24 -0500 (EST) Received: from ibm-tiger.the-meissners.org (unknown [9.32.77.111]) by b01ledav006.gho.pok.ibm.com (Postfix) with ESMTP id C7DFAAC041; Thu, 30 Nov 2017 15:55:23 -0500 (EST) Received: by ibm-tiger.the-meissners.org (Postfix, from userid 500) id C853047E6A; Thu, 30 Nov 2017 15:54:25 -0500 (EST) Date: Thu, 30 Nov 2017 21:52:00 -0000 From: Michael Meissner To: Segher Boessenkool Cc: Michael Meissner , Martin Sebor , GCC Patches , David Edelsohn , Bill Schmidt Subject: Re: [PATCH] PR libgcc/83112, Fix warnings on libgcc float128-ifunc.c Mail-Followup-To: Michael Meissner , Segher Boessenkool , Martin Sebor , GCC Patches , David Edelsohn , Bill Schmidt References: <20171127192131.GA15914@ibm-tiger.the-meissners.org> <20171127234009.GA28990@ibm-tiger.the-meissners.org> <20171130024250.GX10515@gate.crashing.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="gKMricLos+KVdGMg" Content-Disposition: inline In-Reply-To: <20171130024250.GX10515@gate.crashing.org> User-Agent: Mutt/1.5.20 (2009-12-10) X-TM-AS-GCONF: 00 x-cbid: 17113020-2213-0000-0000-00000243CECD X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00008129; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000242; SDB=6.00953540; UDB=6.00481810; IPR=6.00733616; BA=6.00005722; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00018277; XFM=3.00000015; UTC=2017-11-30 20:54:28 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17113020-2214-0000-0000-0000584FEC0E Message-Id: <20171130205425.GA11524@ibm-tiger.the-meissners.org> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-30_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1711300267 X-IsSubscribed: yes X-SW-Source: 2017-11/txt/msg02623.txt.bz2 --gKMricLos+KVdGMg Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 3833 On Wed, Nov 29, 2017 at 08:42:51PM -0600, Segher Boessenkool wrote: > Hi, > > On Mon, Nov 27, 2017 at 06:40:09PM -0500, Michael Meissner wrote: > > @@ -33,3 +35,13 @@ $(fp128_hw_obj) : $(srcdir)/config/rs6 > > > > $(fp128_ifunc_obj) : INTERNAL_CFLAGS += $(FP128_CFLAGS_SW) > > $(fp128_ifunc_obj) : $(srcdir)/config/rs6000/t-float128-hw > > + > > +_mulkc3-hw.c: $(srcdir)/config/rs6000/_mulkc3.c > > + rm -rf _mulkc3.c > > + (echo "#define __mulkc3 __mulkc3_hw"; \ > > + cat $(srcdir)/config/rs6000/_mulkc3.c) > _mulkc3-hw.c > > Please don't -rf. -rf is a dangerous habit. > > This also won't work if anything tries to build _mulkc3-hw.c a second > time; you have deleted its prerequisite. > > Maybe some other scheme is better? > > > --- libgcc/config/rs6000/t-float128 (revision 255177) > > +++ libgcc/config/rs6000/t-float128 (working copy) > > @@ -86,7 +86,7 @@ test: > > for x in $(fp128_obj); do echo " $$x"; done; > > > > clean-float128: > > - rm -rf $(fp128_softfp_src) > > + rm -rf $(fp128_softfp_src) $(fp128_hardfp_src) > > @$(MULTICLEAN) multi-clean DO=clean-float128 > > -rm to avoid warnings from rm if you clean without the files being there. > > Otherwise looks good. Thanks! As we discussed on private IRC, I mistakenly deleted the _{mul,div}kc3.c file when I meant to delete the _{mul,div}kc3-hw.c file before recreating it. This is the patch I checked in (subversion id 255282): 2017-11-30 Michael Meissner PR libgcc/83112 * config/rs6000/float128-ifunc.c (__addkf3_resolve): Use the correct type for all ifunc resolvers to silence -Wattribute-alias warnings. Eliminate the forward declaration of the resolver functions which is no longer needed. (__subkf3_resolve): Likewise. (__mulkf3_resolve): Likewise. (__divkf3_resolve): Likewise. (__negkf2_resolve): Likewise. (__eqkf2_resolve): Likewise. (__nekf2_resolve): Likewise. (__gekf2_resolve): Likewise. (__gtkf2_resolve): Likewise. (__lekf2_resolve): Likewise. (__ltkf2_resolve): Likewise. (__unordkf2_resolve): Likewise. (__extendsfkf2_resolve): Likewise. (__extenddfkf2_resolve): Likewise. (__trunckfsf2_resolve): Likewise. (__trunckfdf2_resolve): Likewise. (__fixkfsi_resolve): Likewise. (__fixkfdi_resolve): Likewise. (__fixunskfsi_resolve): Likewise. (__fixunskfdi_resolve): Likewise. (__floatsikf_resolve): Likewise. (__floatdikf_resolve): Likewise. (__floatunsikf_resolve): Likewise. (__floatundikf_resolve): Likewise. (__extendkftf2_resolve): Likewise. (__trunctfkf2_resolve): Likewise. PR libgcc/83103 * config/rs6000/quad-float128.h (TF): Don't define if long double is IEEE 128-bit floating point. (TCtype): Define as either TCmode or KCmode, depending on whether long double is IEEE 128-bit floating point. (__mulkc3_sw): Add declarations for software/hardware versions of complex multiply/divide. (__divkc3_sw): Likewise. (__mulkc3_hw): Likewise. (__divkc3_hw): Likewise. * config/rs6000/_mulkc3.c (_mulkc3): If we are building ifunc handlers to switch between using software emulation and hardware float128 instructions, build the complex multiply/divide functions for both software and hardware support. * config/rs6000/_divkc3.c (_divkc3): Likewise. * config/rs6000/float128-ifunc.c (__mulkc3_resolve): Likewise. (__divkc3_resolve): Likewise. (__mulkc3): Likewise. (__divkc3): Likewise. * config/rs6000/t-float128-hw (fp128_hardfp_src): Likewise. (fp128_hw_src): Likewise. (fp128_hw_static_obj): Likewise. (fp128_hw_shared_obj): Likewise. (_mulkc3-hw.c): Likewise. (_divkc3-hw.c): Likewise. * config/rs6000/t-float128 (clean-float128): Delete _mulkc3-hw.c and _divkc3-hw.c. -- Michael Meissner, IBM IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797 --gKMricLos+KVdGMg Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="pr83112.patch03b" Content-length: 12079 Index: libgcc/config/rs6000/quad-float128.h =================================================================== --- libgcc/config/rs6000/quad-float128.h (revision 255281) +++ libgcc/config/rs6000/quad-float128.h (working copy) @@ -30,13 +30,20 @@ /* quad.h defines the TFtype type by: typedef float TFtype __attribute__ ((mode (TF))); - This define forces it to use KFmode (aka, ieee 128-bit floating point). */ + This define forces it to use KFmode (aka, ieee 128-bit floating point). + However, when the compiler's default is changed so that long double is IEEE + 128-bit floating point, we need to go back to using TFmode and TCmode. */ +#ifndef __LONG_DOUBLE_IEEE128__ #define TF KF /* We also need TCtype to represent complex ieee 128-bit float for __mulkc3 and __divkc3. */ typedef __complex float TCtype __attribute__ ((mode (KC))); +#else +typedef __complex float TCtype __attribute__ ((mode (TC))); +#endif + /* Force the use of the VSX instruction set. */ #if defined(_ARCH_PPC) && (!defined(__VSX__) || !defined(__FLOAT128__)) #pragma GCC target ("vsx,float128") @@ -88,6 +95,8 @@ extern TFtype __floatunsikf_sw (USItype_ extern TFtype __floatundikf_sw (UDItype_ppc); extern IBM128_TYPE __extendkftf2_sw (TFtype); extern TFtype __trunctfkf2_sw (IBM128_TYPE); +extern TCtype __mulkc3_sw (TFtype, TFtype, TFtype, TFtype); +extern TCtype __divkc3_sw (TFtype, TFtype, TFtype, TFtype); #ifdef _ARCH_PPC64 /* We do not provide ifunc resolvers for __fixkfti, __fixunskfti, __floattikf, @@ -128,6 +137,8 @@ extern TFtype __floatunsikf_hw (USItype_ extern TFtype __floatundikf_hw (UDItype_ppc); extern IBM128_TYPE __extendkftf2_hw (TFtype); extern TFtype __trunctfkf2_hw (IBM128_TYPE); +extern TCtype __mulkc3_hw (TFtype, TFtype, TFtype, TFtype); +extern TCtype __divkc3_hw (TFtype, TFtype, TFtype, TFtype); /* Ifunc function declarations, to automatically switch between software emulation and hardware support. */ Index: libgcc/config/rs6000/_mulkc3.c =================================================================== --- libgcc/config/rs6000/_mulkc3.c (revision 255281) +++ libgcc/config/rs6000/_mulkc3.c (working copy) @@ -31,6 +31,10 @@ typedef __complex float KCtype __attribu #define isnan __builtin_isnan #define isinf __builtin_isinf +#if defined(FLOAT128_HW_INSNS) && !defined(__mulkc3) +#define __mulkc3 __mulkc3_sw +#endif + KCtype __mulkc3 (KFtype a, KFtype b, KFtype c, KFtype d) { Index: libgcc/config/rs6000/_divkc3.c =================================================================== --- libgcc/config/rs6000/_divkc3.c (revision 255281) +++ libgcc/config/rs6000/_divkc3.c (working copy) @@ -33,6 +33,10 @@ typedef __complex float KCtype __attribu #define isinf __builtin_isinf #define isfinite __builtin_isfinite +#if defined(FLOAT128_HW_INSNS) && !defined(__divkc3) +#define __divkc3 __divkc3_sw +#endif + KCtype __divkc3 (KFtype a, KFtype b, KFtype c, KFtype d) { Index: libgcc/config/rs6000/float128-ifunc.c =================================================================== --- libgcc/config/rs6000/float128-ifunc.c (revision 255281) +++ libgcc/config/rs6000/float128-ifunc.c (working copy) @@ -54,190 +54,175 @@ 128-bit integer types and 128-bit IEEE floating point, or vice versa. So use the emulator functions for these conversions. */ -static void *__addkf3_resolve (void); -static void *__subkf3_resolve (void); -static void *__mulkf3_resolve (void); -static void *__divkf3_resolve (void); -static void *__negkf2_resolve (void); -static void *__eqkf2_resolve (void); -static void *__nekf2_resolve (void); -static void *__gekf2_resolve (void); -static void *__gtkf2_resolve (void); -static void *__lekf2_resolve (void); -static void *__ltkf2_resolve (void); -static void *__unordkf2_resolve (void); -static void *__extendsfkf2_resolve (void); -static void *__extenddfkf2_resolve (void); -static void *__trunckfsf2_resolve (void); -static void *__trunckfdf2_resolve (void); -static void *__fixkfsi_resolve (void); -static void *__fixkfdi_resolve (void); -static void *__fixunskfsi_resolve (void); -static void *__fixunskfdi_resolve (void); -static void *__floatsikf_resolve (void); -static void *__floatdikf_resolve (void); -static void *__floatunsikf_resolve (void); -static void *__floatundikf_resolve (void); -static void *__extendkftf2_resolve (void); -static void *__trunctfkf2_resolve (void); - -static void * +static __typeof__ (__addkf3_sw) * __addkf3_resolve (void) { - return (void *) SW_OR_HW (__addkf3_sw, __addkf3_hw); + return SW_OR_HW (__addkf3_sw, __addkf3_hw); } -static void * +static __typeof__ (__subkf3_sw) * __subkf3_resolve (void) { - return (void *) SW_OR_HW (__subkf3_sw, __subkf3_hw); + return SW_OR_HW (__subkf3_sw, __subkf3_hw); } -static void * +static __typeof__ (__mulkf3_sw) * __mulkf3_resolve (void) { - return (void *) SW_OR_HW (__mulkf3_sw, __mulkf3_hw); + return SW_OR_HW (__mulkf3_sw, __mulkf3_hw); } -static void * +static __typeof__ (__divkf3_sw) * __divkf3_resolve (void) { - return (void *) SW_OR_HW (__divkf3_sw, __divkf3_hw); + return SW_OR_HW (__divkf3_sw, __divkf3_hw); } -static void * +static __typeof__ (__negkf2_sw) * __negkf2_resolve (void) { - return (void *) SW_OR_HW (__negkf2_sw, __negkf2_hw); + return SW_OR_HW (__negkf2_sw, __negkf2_hw); } -static void * +static __typeof__ (__floatsikf_sw) * __floatsikf_resolve (void) { - return (void *) SW_OR_HW (__floatsikf_sw, __floatsikf_hw); + return SW_OR_HW (__floatsikf_sw, __floatsikf_hw); } -static void * +static __typeof__ (__floatdikf_sw) * __floatdikf_resolve (void) { - return (void *) SW_OR_HW (__floatdikf_sw, __floatdikf_hw); + return SW_OR_HW (__floatdikf_sw, __floatdikf_hw); } -static void * +static __typeof__ (__floatunsikf_sw) * __floatunsikf_resolve (void) { - return (void *) SW_OR_HW (__floatunsikf_sw, __floatunsikf_hw); + return SW_OR_HW (__floatunsikf_sw, __floatunsikf_hw); } -static void * +static __typeof__ (__floatundikf_sw) * __floatundikf_resolve (void) { - return (void *) SW_OR_HW (__floatundikf_sw, __floatundikf_hw); + return SW_OR_HW (__floatundikf_sw, __floatundikf_hw); } -static void * +static __typeof__ (__fixkfsi_sw) * __fixkfsi_resolve (void) { - return (void *) SW_OR_HW (__fixkfsi_sw, __fixkfsi_hw); + return SW_OR_HW (__fixkfsi_sw, __fixkfsi_hw); } -static void * +static __typeof__ (__fixkfdi_sw) * __fixkfdi_resolve (void) { - return (void *) SW_OR_HW (__fixkfdi_sw, __fixkfdi_hw); + return SW_OR_HW (__fixkfdi_sw, __fixkfdi_hw); } -static void * +static __typeof__ (__fixunskfsi_sw) * __fixunskfsi_resolve (void) { - return (void *) SW_OR_HW (__fixunskfsi_sw, __fixunskfsi_hw); + return SW_OR_HW (__fixunskfsi_sw, __fixunskfsi_hw); } -static void * +static __typeof__ (__fixunskfdi_sw) * __fixunskfdi_resolve (void) { - return (void *) SW_OR_HW (__fixunskfdi_sw, __fixunskfdi_hw); + return SW_OR_HW (__fixunskfdi_sw, __fixunskfdi_hw); } -static void * +static __typeof__ (__extendsfkf2_sw) * __extendsfkf2_resolve (void) { - return (void *) SW_OR_HW (__extendsfkf2_sw, __extendsfkf2_hw); + return SW_OR_HW (__extendsfkf2_sw, __extendsfkf2_hw); } -static void * +static __typeof__ (__extenddfkf2_sw) * __extenddfkf2_resolve (void) { - return (void *) SW_OR_HW (__extenddfkf2_sw, __extenddfkf2_hw); + return SW_OR_HW (__extenddfkf2_sw, __extenddfkf2_hw); } -static void * +static __typeof__ (__trunckfsf2_sw) * __trunckfsf2_resolve (void) { - return (void *) SW_OR_HW (__trunckfsf2_sw, __trunckfsf2_hw); + return SW_OR_HW (__trunckfsf2_sw, __trunckfsf2_hw); } -static void * +static __typeof__ (__trunckfdf2_sw) * __trunckfdf2_resolve (void) { return (void *) SW_OR_HW (__trunckfdf2_sw, __trunckfdf2_hw); } -static void * +static __typeof__ (__extendkftf2_sw) * __extendkftf2_resolve (void) { - return (void *) SW_OR_HW (__extendkftf2_sw, __extendkftf2_hw); + return SW_OR_HW (__extendkftf2_sw, __extendkftf2_hw); } -static void * +static __typeof__ (__trunctfkf2_sw) * __trunctfkf2_resolve (void) { - return (void *) SW_OR_HW (__trunctfkf2_sw, __trunctfkf2_hw); + return SW_OR_HW (__trunctfkf2_sw, __trunctfkf2_hw); } -static void * +static __typeof__ (__mulkc3_sw) * +__mulkc3_resolve (void) +{ + return SW_OR_HW (__mulkc3_sw, __mulkc3_hw); +} + +static __typeof__ (__divkc3_sw) * +__divkc3_resolve (void) +{ + return SW_OR_HW (__divkc3_sw, __divkc3_hw); +} + +static __typeof__ (__eqkf2_sw) * __eqkf2_resolve (void) { - return (void *) SW_OR_HW (__eqkf2_sw, __eqkf2_hw); + return SW_OR_HW (__eqkf2_sw, __eqkf2_hw); } -static void * +static __typeof__ (__gekf2_sw) * __gekf2_resolve (void) { - return (void *) SW_OR_HW (__gekf2_sw, __gekf2_hw); + return SW_OR_HW (__gekf2_sw, __gekf2_hw); } -static void * +static __typeof__ (__lekf2_sw) * __lekf2_resolve (void) { - return (void *) SW_OR_HW (__lekf2_sw, __lekf2_hw); + return SW_OR_HW (__lekf2_sw, __lekf2_hw); } -static void * +static __typeof__ (__unordkf2_sw) * __unordkf2_resolve (void) { - return (void *) SW_OR_HW (__unordkf2_sw, __unordkf2_hw); + return SW_OR_HW (__unordkf2_sw, __unordkf2_hw); } /* Resolve __nekf2, __gtkf2, __ltkf2 like __eqkf2, __gekf2, and __lekf2, since the functions return the same values. */ -static void * +static __typeof__ (__eqkf2_sw) * __nekf2_resolve (void) { - return (void *) SW_OR_HW (__eqkf2_sw, __eqkf2_hw); + return SW_OR_HW (__eqkf2_sw, __eqkf2_hw); } -static void * +static __typeof__ (__eqkf2_sw) * __gtkf2_resolve (void) { - return (void *) SW_OR_HW (__gekf2_sw, __gekf2_hw); + return SW_OR_HW (__gekf2_sw, __gekf2_hw); } -static void * +static __typeof__ (__eqkf2_sw) * __ltkf2_resolve (void) { - return (void *) SW_OR_HW (__lekf2_sw, __lekf2_hw); + return SW_OR_HW (__lekf2_sw, __lekf2_hw); } @@ -320,3 +305,9 @@ IBM128_TYPE __extendkftf2 (TFtype) TFtype __trunctfkf2 (IBM128_TYPE) __attribute__ ((__ifunc__ ("__trunctfkf2_resolve"))); + +TCtype __mulkc3 (TFtype, TFtype, TFtype, TFtype) + __attribute__ ((__ifunc__ ("__mulkc3_resolve"))); + +TCtype __divkc3 (TFtype, TFtype, TFtype, TFtype) + __attribute__ ((__ifunc__ ("__divkc3_resolve"))); Index: libgcc/config/rs6000/t-float128-hw =================================================================== --- libgcc/config/rs6000/t-float128-hw (revision 255281) +++ libgcc/config/rs6000/t-float128-hw (working copy) @@ -5,10 +5,12 @@ FLOAT128_HW_INSNS = -DFLOAT128_HW_INSNS # New functions for hardware support -fp128_hw_funcs = float128-hw -fp128_hw_src = $(srcdir)/config/rs6000/float128-hw.c -fp128_hw_static_obj = float128-hw$(objext) -fp128_hw_shared_obj = float128-hw_s$(objext) +fp128_hardfp_src = _mulkc3-hw.c _divkc3-hw.c +fp128_hw_funcs = float128-hw _mulkc3-hw _divkc3-hw +fp128_hw_src = $(srcdir)/config/rs6000/float128-hw.c _mulkc3-hw.c \ + _divkc3-hw.c +fp128_hw_static_obj = $(addsuffix $(objext),$(fp128_hw_funcs)) +fp128_hw_shared_obj = $(addsuffix _s$(objext),$(fp128_hw_funcs)) fp128_hw_obj = $(fp128_hw_static_obj) $(fp128_hw_shared_obj) fp128_ifunc_funcs = float128-ifunc @@ -33,3 +35,11 @@ $(fp128_hw_obj) : $(srcdir)/config/rs6 $(fp128_ifunc_obj) : INTERNAL_CFLAGS += $(FP128_CFLAGS_SW) $(fp128_ifunc_obj) : $(srcdir)/config/rs6000/t-float128-hw + +_mulkc3-hw.c: $(srcdir)/config/rs6000/_mulkc3.c + (echo "#define __mulkc3 __mulkc3_hw"; \ + cat $(srcdir)/config/rs6000/_mulkc3.c) > _mulkc3-hw.c + +_divkc3-hw.c: $(srcdir)/config/rs6000/_divkc3.c + (echo "#define __divkc3 __divkc3_hw"; \ + cat $(srcdir)/config/rs6000/_divkc3.c) > _divkc3-hw.c Index: libgcc/config/rs6000/t-float128 =================================================================== --- libgcc/config/rs6000/t-float128 (revision 255281) +++ libgcc/config/rs6000/t-float128 (working copy) @@ -86,7 +86,7 @@ test: for x in $(fp128_obj); do echo " $$x"; done; clean-float128: - rm -rf $(fp128_softfp_src) + -rm -f $(fp128_softfp_src) $(fp128_hardfp_src) @$(MULTICLEAN) multi-clean DO=clean-float128 # For now, only put it in the static library --gKMricLos+KVdGMg--