diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2007-08-01 12:26:49 -0400 |
---|---|---|
committer | Sandra Loosemore <sandra@gcc.gnu.org> | 2007-08-01 12:26:49 -0400 |
commit | 45059ab1e55ce7dbe4d3a499628e092235bc8b1c (patch) | |
tree | e840ba072bd1d98fb25a707a666a84a2e895b391 | |
parent | cd976c16a3f88dbb24268d3523ac09643e863ce5 (diff) | |
download | gcc-45059ab1e55ce7dbe4d3a499628e092235bc8b1c.zip gcc-45059ab1e55ce7dbe4d3a499628e092235bc8b1c.tar.gz gcc-45059ab1e55ce7dbe4d3a499628e092235bc8b1c.tar.bz2 |
mips16.S (__mips16_unordsf2, [...]): New.
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.
Co-Authored-By: David Ung <davidu@mips.com>
From-SVN: r127128
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 4 | ||||
-rw-r--r-- | gcc/config/mips/mips16.S | 35 | ||||
-rw-r--r-- | gcc/config/mips/t-libgcc-mips16 | 6 |
4 files changed, 52 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d7afe17..12d7e67 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +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. + 2007-08-01 Zdenek Dvorak <ook@ucw.cz> * tree-pretty-print.c (dump_generic_node): Dump OMP_SECTIONS_SWITCH. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 0ff91db..22a2add 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -10115,9 +10115,11 @@ mips_init_libfuncs (void) 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) { @@ -10132,12 +10134,14 @@ mips_init_libfuncs (void) 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 diff --git a/gcc/config/mips/mips16.S b/gcc/config/mips/mips16.S index 17e7d0e9..90651b1 100644 --- a/gcc/config/mips/mips16.S +++ b/gcc/config/mips/mips16.S @@ -286,6 +286,10 @@ CMPSF (__mips16_lesf2, c.le.s, 0, 1) #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. */ @@ -297,6 +301,21 @@ STARTFN (__mips16_floatsisf) 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) @@ -420,6 +439,9 @@ CMPDF (__mips16_ledf2, c.le.d, 0, 1) #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. */ @@ -430,7 +452,18 @@ STARTFN (__mips16_floatsidf) 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) diff --git a/gcc/config/mips/t-libgcc-mips16 b/gcc/config/mips/t-libgcc-mips16 index ba015e7..819f5c6 100644 --- a/gcc/config/mips/t-libgcc-mips16 +++ b/gcc/config/mips/t-libgcc-mips16 @@ -1,11 +1,13 @@ LIB1ASMSRC = mips/mips16.S LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \ _m16eqsf2 _m16nesf2 _m16gtsf2 _m16gesf2 _m16lesf2 _m16ltsf2 \ - _m16fltsisf _m16fix_truncsfsi \ + _m16unordsf2 \ + _m16fltsisf _m16fix_truncsfsi _m16fltunsisf \ _m16adddf3 _m16subdf3 _m16muldf3 _m16divdf3 \ _m16extsfdf2 _m16trdfsf2 \ _m16eqdf2 _m16nedf2 _m16gtdf2 _m16gedf2 _m16ledf2 _m16ltdf2 \ - _m16fltsidf _m16fix_truncdfsi \ + _m16unorddf2 \ + _m16fltsidf _m16fix_truncdfsi _m16fltunsidf \ _m16retsf _m16retdf \ _m16retsc _m16retdc \ _m16stub1 _m16stub2 _m16stub5 _m16stub6 _m16stub9 _m16stub10 \ |