From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32601 invoked by alias); 1 Aug 2007 02:37:38 -0000 Received: (qmail 32590 invoked by uid 22791); 1 Aug 2007 02:37:36 -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 02:37:33 +0000 Received: (qmail 14384 invoked from network); 1 Aug 2007 02:37:30 -0000 Received: from unknown (HELO bullfrog.localdomain) (sandra@127.0.0.2) by mail.codesourcery.com with ESMTPA; 1 Aug 2007 02:37:30 -0000 Message-ID: <46AFF221.3060100@codesourcery.com> Date: Wed, 01 Aug 2007 02:37:00 -0000 From: Sandra Loosemore User-Agent: Thunderbird 2.0.0.5 (X11/20070716) MIME-Version: 1.0 To: GCC Patches Subject: MIPS PATCH: additional mips16 hard float library support Content-Type: multipart/mixed; boundary="------------090604060804070406050907" 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/msg00007.txt.bz2 This is a multi-part message in MIME format. --------------090604060804070406050907 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 194 This patch adds mips16 library support for unordered float/double comparisons and conversions to float/double from unsigned. Tests clean on both mips32r2 and mips64. OK to commit? -Sandra --------------090604060804070406050907 Content-Type: text/x-log; name="23-mips16-float.log" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="23-mips16-float.log" Content-length: 458 2007-07-31 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-elf (LIB1ASMFUNCS): Add new functions. * config/mips/t-isa3264 (LIB1ASMFUNCS): Likewise. * config/mips/t-r3900 (LIB1ASMFUNCS): Likewise. --------------090604060804070406050907 Content-Type: text/x-patch; name="23-mips16-float.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="23-mips16-float.patch" Content-length: 7292 Index: gcc/config/mips/mips16.S =================================================================== *** gcc/config/mips/mips16.S (revision 127069) --- 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 127069) --- 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 Index: gcc/config/mips/t-elf =================================================================== *** gcc/config/mips/t-elf (revision 127069) --- gcc/config/mips/t-elf (working copy) *************** $(T)crtn.o: $(srcdir)/config/mips/crtn.a *** 13,23 **** 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 \ --- 13,25 ---- 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/t-isa3264 =================================================================== *** gcc/config/mips/t-isa3264 (revision 127069) --- gcc/config/mips/t-isa3264 (working copy) *************** $(T)crtn.o: $(srcdir)/config/mips/crtn.a *** 13,23 **** 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 \ --- 13,25 ---- 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/t-r3900 =================================================================== *** gcc/config/mips/t-r3900 (revision 127069) --- gcc/config/mips/t-r3900 (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 \ --------------090604060804070406050907--