mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 07:44:33 +08:00
darwin-ldouble.c (__gcc_qunord): Define if __NO_FPRS__, not just if _SOFT_DOUBLE.
* config/rs6000/darwin-ldouble.c (__gcc_qunord): Define if __NO_FPRS__, not just if _SOFT_DOUBLE. * config/rs6000/libgcc-ppc-glibc.ver (__gcc_qunord): Likewise. * config/rs6000/rs6000.c (rs6000_init_libfuncs): Use __gcc_qunord also for E500 double. * config/rs6000/rs6000.md (buneq, bunge, bungt, bunle, bunlt, suneq, sunge, sungt, sunle, sunlt): Disable for (TARGET_HARD_FLOAT && !TARGET_FPRS). From-SVN: r124332
This commit is contained in:
parent
0dd7ebb3fc
commit
b26941b46a
@ -1,3 +1,14 @@
|
||||
2007-05-01 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/rs6000/darwin-ldouble.c (__gcc_qunord): Define if
|
||||
__NO_FPRS__, not just if _SOFT_DOUBLE.
|
||||
* config/rs6000/libgcc-ppc-glibc.ver (__gcc_qunord): Likewise.
|
||||
* config/rs6000/rs6000.c (rs6000_init_libfuncs): Use __gcc_qunord
|
||||
also for E500 double.
|
||||
* config/rs6000/rs6000.md (buneq, bunge, bungt, bunle, bunlt,
|
||||
suneq, sunge, sungt, sunle, sunlt): Disable for (TARGET_HARD_FLOAT
|
||||
&& !TARGET_FPRS).
|
||||
|
||||
2007-05-01 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-loop-manip.c (ip_normal_pos): Check if last stmt
|
||||
|
@ -225,7 +225,6 @@ int __gcc_qeq (double, double, double, double);
|
||||
int __gcc_qne (double, double, double, double);
|
||||
int __gcc_qge (double, double, double, double);
|
||||
int __gcc_qle (double, double, double, double);
|
||||
int __gcc_qunord (double, double, double, double);
|
||||
long double __gcc_stoq (float);
|
||||
long double __gcc_dtoq (double);
|
||||
float __gcc_qtos (double, double);
|
||||
@ -238,7 +237,6 @@ long double __gcc_utoq (unsigned int);
|
||||
extern int __eqdf2 (double, double);
|
||||
extern int __ledf2 (double, double);
|
||||
extern int __gedf2 (double, double);
|
||||
extern int __unorddf2 (double, double);
|
||||
|
||||
/* Negate 'long double' value and return the result. */
|
||||
long double
|
||||
@ -284,15 +282,6 @@ __gcc_qge (double a, double aa, double c, double cc)
|
||||
|
||||
strong_alias (__gcc_qge, __gcc_qgt);
|
||||
|
||||
/* Compare two 'long double' values for unordered. */
|
||||
int
|
||||
__gcc_qunord (double a, double aa, double c, double cc)
|
||||
{
|
||||
if (__eqdf2 (a, c) == 0)
|
||||
return __unorddf2 (aa, cc);
|
||||
return __unorddf2 (a, c);
|
||||
}
|
||||
|
||||
/* Convert single to long double. */
|
||||
long double
|
||||
__gcc_stoq (float a)
|
||||
@ -365,6 +354,20 @@ __gcc_utoq (unsigned int a)
|
||||
|
||||
#ifdef __NO_FPRS__
|
||||
|
||||
int __gcc_qunord (double, double, double, double);
|
||||
|
||||
extern int __eqdf2 (double, double);
|
||||
extern int __unorddf2 (double, double);
|
||||
|
||||
/* Compare two 'long double' values for unordered. */
|
||||
int
|
||||
__gcc_qunord (double a, double aa, double c, double cc)
|
||||
{
|
||||
if (__eqdf2 (a, c) == 0)
|
||||
return __unorddf2 (aa, cc);
|
||||
return __unorddf2 (a, c);
|
||||
}
|
||||
|
||||
#include "config/soft-fp/soft-fp.h"
|
||||
#include "config/soft-fp/double.h"
|
||||
#include "config/soft-fp/quad.h"
|
||||
|
@ -39,7 +39,6 @@ GCC_4.2.0 {
|
||||
__gcc_qge
|
||||
__gcc_qlt
|
||||
__gcc_qle
|
||||
__gcc_qunord
|
||||
__gcc_stoq
|
||||
__gcc_dtoq
|
||||
__gcc_qtos
|
||||
@ -49,4 +48,8 @@ GCC_4.2.0 {
|
||||
__gcc_itoq
|
||||
__gcc_utoq
|
||||
%endif
|
||||
|
||||
%ifdef __NO_FPRS__
|
||||
__gcc_qunord
|
||||
%endif
|
||||
}
|
||||
|
@ -9587,7 +9587,6 @@ rs6000_init_libfuncs (void)
|
||||
set_optab_libfunc (ge_optab, TFmode, "__gcc_qge");
|
||||
set_optab_libfunc (lt_optab, TFmode, "__gcc_qlt");
|
||||
set_optab_libfunc (le_optab, TFmode, "__gcc_qle");
|
||||
set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord");
|
||||
|
||||
set_conv_libfunc (sext_optab, TFmode, SFmode, "__gcc_stoq");
|
||||
set_conv_libfunc (sext_optab, TFmode, DFmode, "__gcc_dtoq");
|
||||
@ -9598,6 +9597,9 @@ rs6000_init_libfuncs (void)
|
||||
set_conv_libfunc (sfloat_optab, TFmode, SImode, "__gcc_itoq");
|
||||
set_conv_libfunc (ufloat_optab, TFmode, SImode, "__gcc_utoq");
|
||||
}
|
||||
|
||||
if (!(TARGET_HARD_FLOAT && TARGET_FPRS))
|
||||
set_optab_libfunc (unord_optab, TFmode, "__gcc_qunord");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -11530,27 +11530,27 @@
|
||||
|
||||
(define_expand "buneq"
|
||||
[(use (match_operand 0 "" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_cbranch (UNEQ, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "bunge"
|
||||
[(use (match_operand 0 "" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_cbranch (UNGE, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "bungt"
|
||||
[(use (match_operand 0 "" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_cbranch (UNGT, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "bunle"
|
||||
[(use (match_operand 0 "" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_cbranch (UNLE, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "bunlt"
|
||||
[(use (match_operand 0 "" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_cbranch (UNLT, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "bltgt"
|
||||
@ -11664,27 +11664,27 @@
|
||||
|
||||
(define_expand "suneq"
|
||||
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_sCOND (UNEQ, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "sunge"
|
||||
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_sCOND (UNGE, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "sungt"
|
||||
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_sCOND (UNGT, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "sunle"
|
||||
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_sCOND (UNLE, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "sunlt"
|
||||
[(clobber (match_operand:SI 0 "gpc_reg_operand" ""))]
|
||||
""
|
||||
"! (TARGET_HARD_FLOAT && !TARGET_FPRS)"
|
||||
"{ rs6000_emit_sCOND (UNLT, operands[0]); DONE; }")
|
||||
|
||||
(define_expand "sltgt"
|
||||
|
Loading…
Reference in New Issue
Block a user