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