mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-08 21:57:13 +08:00
expr.c (force_operand): Use expand_fix and expand_float to implement integer <-> FP conversions instead...
* expr.c (force_operand): Use expand_fix and expand_float to implement integer <-> FP conversions instead of convert_to_mode. From-SVN: r109041
This commit is contained in:
parent
4fe70c9b0d
commit
72a10effc6
@ -1,3 +1,8 @@
|
||||
2005-12-24 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* expr.c (force_operand): Use expand_fix and expand_float to
|
||||
implement integer <-> FP conversions instead of convert_to_mode.
|
||||
|
||||
2005-12-24 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/23171
|
||||
|
33
gcc/expr.c
33
gcc/expr.c
@ -5805,15 +5805,6 @@ force_operand (rtx value, rtx target)
|
||||
return subtarget;
|
||||
}
|
||||
|
||||
if (code == ZERO_EXTEND || code == SIGN_EXTEND)
|
||||
{
|
||||
if (!target)
|
||||
target = gen_reg_rtx (GET_MODE (value));
|
||||
convert_move (target, force_operand (XEXP (value, 0), NULL),
|
||||
code == ZERO_EXTEND);
|
||||
return target;
|
||||
}
|
||||
|
||||
if (ARITHMETIC_P (value))
|
||||
{
|
||||
op2 = XEXP (value, 1);
|
||||
@ -5885,17 +5876,27 @@ force_operand (rtx value, rtx target)
|
||||
}
|
||||
if (UNARY_P (value))
|
||||
{
|
||||
int unsignedp = 0;
|
||||
|
||||
if (!target)
|
||||
target = gen_reg_rtx (GET_MODE (value));
|
||||
op1 = force_operand (XEXP (value, 0), NULL_RTX);
|
||||
switch (code)
|
||||
{
|
||||
case ZERO_EXTEND: case UNSIGNED_FIX: case UNSIGNED_FLOAT:
|
||||
unsignedp = 1;
|
||||
/* fall through. */
|
||||
case ZERO_EXTEND:
|
||||
case SIGN_EXTEND:
|
||||
case TRUNCATE:
|
||||
case SIGN_EXTEND: case FIX: case FLOAT:
|
||||
return convert_to_mode (GET_MODE (value), op1, unsignedp);
|
||||
convert_move (target, op1, code == ZERO_EXTEND);
|
||||
return target;
|
||||
|
||||
case FIX:
|
||||
case UNSIGNED_FIX:
|
||||
expand_fix (target, op1, code == UNSIGNED_FIX);
|
||||
return target;
|
||||
|
||||
case FLOAT:
|
||||
case UNSIGNED_FLOAT:
|
||||
expand_float (target, op1, code == UNSIGNED_FLOAT);
|
||||
return target;
|
||||
|
||||
default:
|
||||
return expand_simple_unop (GET_MODE (value), code, op1, target, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user