From: Sandra Loosemore <sandra@codesourcery.com>
To: GCC Patches <gcc-patches@gcc.gnu.org>, richard@codesourcery.com
Subject: Re: MIPS PATCH: additional mips16 hard float library support
Date: Wed, 01 Aug 2007 16:29:00 -0000 [thread overview]
Message-ID: <46B0B50B.2030303@codesourcery.com> (raw)
In-Reply-To: <87ps27g713.fsf@firetop.home>
[-- Attachment #1: Type: text/plain, Size: 628 bytes --]
Richard Sandiford wrote:
> Sandra Loosemore <sandra@codesourcery.com> 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
[-- Attachment #2: 23-mips16-float.log --]
[-- Type: text/x-log, Size: 368 bytes --]
2007-08-01 Sandra Loosemore <sandra@codesourcery.com>
David Ung <davidu@mips.com>
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.
[-- Attachment #3: 23-mips16-float.patch --]
[-- Type: text/x-patch, Size: 4690 bytes --]
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
prev parent reply other threads:[~2007-08-01 16:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-01 2:37 Sandra Loosemore
2007-08-01 5:26 ` Richard Sandiford
2007-08-01 16:29 ` Sandra Loosemore [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=46B0B50B.2030303@codesourcery.com \
--to=sandra@codesourcery.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=richard@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).