]> gcc.gnu.org Git - gcc.git/commitdiff
mips16.S (__mips16_unordsf2, [...]): New.
authorSandra Loosemore <sandra@codesourcery.com>
Wed, 1 Aug 2007 16:26:49 +0000 (12:26 -0400)
committerSandra Loosemore <sandra@gcc.gnu.org>
Wed, 1 Aug 2007 16:26:49 +0000 (12:26 -0400)
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

gcc/ChangeLog
gcc/config/mips/mips.c
gcc/config/mips/mips16.S
gcc/config/mips/t-libgcc-mips16

index d7afe17fd9cdc9d04492f6f18740f44d4f4758d7..12d7e6782040d9d8e7c2db85492b6a326c3fadf1 100644 (file)
@@ -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.
index 0ff91db811eb1c20877a7b891f61232bfc94fb8a..22a2add8fff67ff012213d9aa012bd53b7b14bac 100644 (file)
@@ -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
index 17e7d0e92b55313c6456b0af3e1cf333843baf4a..90651b196b3442998f1b962e1f44d150f2e4a56b 100644 (file)
@@ -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)
index ba015e7aa27295daf859b6e4a472d5156fbed51f..819f5c6fc21feb9a1210ad98873e87f2f9cb4dec 100644 (file)
@@ -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 \
This page took 0.117459 seconds and 5 git commands to generate.