From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 942 invoked by alias); 1 Aug 2007 16:29:28 -0000 Received: (qmail 934 invoked by uid 22791); 1 Aug 2007 16:29:26 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 01 Aug 2007 16:29:19 +0000 Received: (qmail 25093 invoked from network); 1 Aug 2007 16:29:16 -0000 Received: from unknown (HELO bullfrog.localdomain) (sandra@127.0.0.2) by mail.codesourcery.com with ESMTPA; 1 Aug 2007 16:29:16 -0000 Message-ID: <46B0B50B.2030303@codesourcery.com> Date: Wed, 01 Aug 2007 16:29:00 -0000 From: Sandra Loosemore User-Agent: Thunderbird 2.0.0.5 (X11/20070716) MIME-Version: 1.0 To: GCC Patches , richard@codesourcery.com Subject: Re: MIPS PATCH: additional mips16 hard float library support References: <46AFF221.3060100@codesourcery.com> <87ps27g713.fsf@firetop.home> In-Reply-To: <87ps27g713.fsf@firetop.home> Content-Type: multipart/mixed; boundary="------------090708090106060003070701" 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 X-SW-Source: 2007-08/txt/msg00057.txt.bz2 This is a multi-part message in MIME format. --------------090708090106060003070701 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 628 Richard Sandiford wrote: > Sandra Loosemore writes: >> This patch adds mips16 library support for unordered float/double >> comparisons and conversions to float/double from unsigned. > > In case anyone's wondering, this library support is just an optimisation > rather than new functionality. The default libgcc implementation is far > less efficient, since it uses mips16 calls to non-mips16 hard-float > functions. Yes, sorry for not making that more clear. :-P > OK, thanks. I had to tweak the patch a bit for the recent MIPS makefile changes. Here's the final version I committed. -Sandra --------------090708090106060003070701 Content-Type: text/x-log; name="23-mips16-float.log" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="23-mips16-float.log" Content-length: 368 2007-08-01 Sandra Loosemore David Ung gcc/ * config/mips/mips16.S (__mips16_unordsf2, __mips16_floatunsisf): New. (__mips16_unorddf2, __mips16_floatunsidf): New. * config/mips/mips.c (mips_init_libfuncs): Add optab entries for above functions. * config/mips/t-libgcc-mips16 (LIB1ASMFUNCS): Add new functions. --------------090708090106060003070701 Content-Type: text/x-patch; name="23-mips16-float.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="23-mips16-float.patch" Content-length: 4690 Index: gcc/config/mips/t-libgcc-mips16 =================================================================== *** gcc/config/mips/t-libgcc-mips16 (revision 127126) --- gcc/config/mips/t-libgcc-mips16 (working copy) *************** *** 1,11 **** LIB1ASMSRC = mips/mips16.S LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \ _m16eqsf2 _m16nesf2 _m16gtsf2 _m16gesf2 _m16lesf2 _m16ltsf2 \ ! _m16fltsisf _m16fix_truncsfsi \ _m16adddf3 _m16subdf3 _m16muldf3 _m16divdf3 \ _m16extsfdf2 _m16trdfsf2 \ _m16eqdf2 _m16nedf2 _m16gtdf2 _m16gedf2 _m16ledf2 _m16ltdf2 \ ! _m16fltsidf _m16fix_truncdfsi \ _m16retsf _m16retdf \ _m16retsc _m16retdc \ _m16stub1 _m16stub2 _m16stub5 _m16stub6 _m16stub9 _m16stub10 \ --- 1,13 ---- LIB1ASMSRC = mips/mips16.S LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \ _m16eqsf2 _m16nesf2 _m16gtsf2 _m16gesf2 _m16lesf2 _m16ltsf2 \ ! _m16unordsf2 \ ! _m16fltsisf _m16fix_truncsfsi _m16fltunsisf \ _m16adddf3 _m16subdf3 _m16muldf3 _m16divdf3 \ _m16extsfdf2 _m16trdfsf2 \ _m16eqdf2 _m16nedf2 _m16gtdf2 _m16gedf2 _m16ledf2 _m16ltdf2 \ ! _m16unorddf2 \ ! _m16fltsidf _m16fix_truncdfsi _m16fltunsidf \ _m16retsf _m16retdf \ _m16retsc _m16retdc \ _m16stub1 _m16stub2 _m16stub5 _m16stub6 _m16stub9 _m16stub10 \ Index: gcc/config/mips/mips16.S =================================================================== *** gcc/config/mips/mips16.S (revision 127126) --- gcc/config/mips/mips16.S (working copy) *************** CMPSF (__mips16_lesf2, c.le.s, 0, 1) *** 286,291 **** --- 286,295 ---- #ifdef L_m16ltsf2 CMPSF (__mips16_ltsf2, c.lt.s, -1, 0) #endif + #ifdef L_m16unordsf2 + CMPSF(__mips16_unordsf2, c.un.s, 1, 0) + #endif + /* Single-precision conversions. */ *************** STARTFN (__mips16_floatsisf) *** 297,302 **** --- 301,321 ---- ENDFN (__mips16_floatsisf) #endif + #ifdef L_m16fltunsisf + STARTFN (__mips16_floatunsisf) + bltz $4,1f + j __mips16_floatsisf + 1: + and $2,$4,1 + srl $3,$4,1 + or $2,$2,$3 + mtc1 $2,RET + cvt.s.w RET,RET + add.s RET,RET,RET + MOVE_SF_RET (f, $31) + ENDFN (__mips16_floatunsisf) + #endif + #ifdef L_m16fix_truncsfsi STARTFN (__mips16_fix_truncsfsi) MOVE_SF_BYTE0 (t) *************** CMPDF (__mips16_ledf2, c.le.d, 0, 1) *** 420,425 **** --- 439,447 ---- #ifdef L_m16ltdf2 CMPDF (__mips16_ltdf2, c.lt.d, -1, 0) #endif + #ifdef L_m16unorddf2 + CMPDF(__mips16_unorddf2, c.un.d, 1, 0) + #endif /* Double-precision conversions. */ *************** STARTFN (__mips16_floatsidf) *** 430,436 **** MOVE_DF_RET (f, $31) ENDFN (__mips16_floatsidf) #endif ! #ifdef L_m16fix_truncdfsi STARTFN (__mips16_fix_truncdfsi) MOVE_DF_BYTE0 (t) --- 452,469 ---- MOVE_DF_RET (f, $31) ENDFN (__mips16_floatsidf) #endif ! ! #ifdef L_m16fltunsidf ! STARTFN (__mips16_floatunsidf) ! MOVE_SI_BYTE0 (t) ! cvt.d.w RET,ARG1 ! bgez $4,1f ! li.d ARG1, 4.294967296e+9 ! add.d RET, RET, ARG1 ! 1: MOVE_DF_RET (f, $31) ! ENDFN (__mips16_floatunsidf) ! #endif ! #ifdef L_m16fix_truncdfsi STARTFN (__mips16_fix_truncdfsi) MOVE_DF_BYTE0 (t) Index: gcc/config/mips/mips.c =================================================================== *** gcc/config/mips/mips.c (revision 127126) --- gcc/config/mips/mips.c (working copy) *************** mips_init_libfuncs (void) *** 10115,10123 **** --- 10115,10125 ---- set_optab_libfunc (ge_optab, SFmode, "__mips16_gesf2"); set_optab_libfunc (lt_optab, SFmode, "__mips16_ltsf2"); set_optab_libfunc (le_optab, SFmode, "__mips16_lesf2"); + set_optab_libfunc (unord_optab, SFmode, "__mips16_unordsf2"); set_conv_libfunc (sfix_optab, SImode, SFmode, "__mips16_fix_truncsfsi"); set_conv_libfunc (sfloat_optab, SFmode, SImode, "__mips16_floatsisf"); + set_conv_libfunc (ufloat_optab, SFmode, SImode, "__mips16_floatunsisf"); if (TARGET_DOUBLE_FLOAT) { *************** mips_init_libfuncs (void) *** 10132,10143 **** --- 10134,10147 ---- set_optab_libfunc (ge_optab, DFmode, "__mips16_gedf2"); set_optab_libfunc (lt_optab, DFmode, "__mips16_ltdf2"); set_optab_libfunc (le_optab, DFmode, "__mips16_ledf2"); + set_optab_libfunc (unord_optab, DFmode, "__mips16_unorddf2"); set_conv_libfunc (sext_optab, DFmode, SFmode, "__mips16_extendsfdf2"); set_conv_libfunc (trunc_optab, SFmode, DFmode, "__mips16_truncdfsf2"); set_conv_libfunc (sfix_optab, SImode, DFmode, "__mips16_fix_truncdfsi"); set_conv_libfunc (sfloat_optab, DFmode, SImode, "__mips16_floatsidf"); + set_conv_libfunc (ufloat_optab, DFmode, SImode, "__mips16_floatunsidf"); } } else --------------090708090106060003070701--