of logical operations, but not right shifts. */
static rtx
-widen_operand (op, mode, unsignedp, no_extend)
+widen_operand (op, mode, oldmode, unsignedp, no_extend)
rtx op;
- enum machine_mode mode;
+ enum machine_mode mode, oldmode;
int unsignedp;
int no_extend;
{
if (! no_extend
|| GET_MODE (op) == VOIDmode
|| (GET_CODE (op) == SUBREG && SUBREG_PROMOTED_VAR_P (op)))
- return convert_to_mode (mode, op, unsignedp);
+ return convert_modes (mode, oldmode, op, unsignedp);
/* If MODE is no wider than a single word, we return a paradoxical
SUBREG. */
&& class == MODE_INT)
no_extend = 1;
- xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend);
+ xop0 = widen_operand (xop0, wider_mode, mode, unsignedp, no_extend);
/* The second operand of a shift must always be extended. */
- xop1 = widen_operand (xop1, wider_mode, unsignedp,
+ xop1 = widen_operand (xop1, wider_mode, mode, unsignedp,
no_extend && binoptab != ashl_optab
&& binoptab != lshl_optab);
&& class == MODE_INT)
no_extend = 1;
- xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend);
+ xop0 = widen_operand (xop0, wider_mode, mode,
+ unsignedp, no_extend);
/* The second operand of a shift must always be extended. */
- xop1 = widen_operand (xop1, wider_mode, unsignedp,
+ xop1 = widen_operand (xop1, wider_mode, mode, unsignedp,
no_extend && binoptab != ashl_optab
&& binoptab != lshl_optab);
register rtx t1 = gen_reg_rtx (wider_mode);
if (expand_twoval_binop (binoptab,
- convert_to_mode (wider_mode, op0,
- unsignedp),
- convert_to_mode (wider_mode, op1,
- unsignedp),
+ convert_modes (wider_mode, mode, op0,
+ unsignedp),
+ convert_modes (wider_mode, mode, op1,
+ unsignedp),
t0, t1, unsignedp))
{
convert_move (targ0, t0, unsignedp);
the narrow operand, as long as we will truncate the
results to the same narrowness. */
- xop0 = widen_operand (xop0, wider_mode, unsignedp,
+ xop0 = widen_operand (xop0, wider_mode, mode, unsignedp,
(unoptab == neg_optab
|| unoptab == one_cmpl_optab)
&& class == MODE_INT);
the narrow operand, as long as we will truncate the
results to the same narrowness. */
- xop0 = widen_operand (xop0, wider_mode, unsignedp,
+ xop0 = widen_operand (xop0, wider_mode, mode, unsignedp,
(unoptab == neg_optab
|| unoptab == one_cmpl_optab)
&& class == MODE_INT);
{
rtx xop0 = op0;
- xop0 = convert_to_mode (wider_mode, xop0, unsignedp);
+ xop0 = convert_modes (wider_mode, mode, xop0, unsignedp);
temp = expand_complex_abs (wider_mode, xop0, NULL_RTX, unsignedp);
if (temp)
{
rtx xop0 = op0;
- xop0 = convert_to_mode (wider_mode, xop0, unsignedp);
+ xop0 = convert_modes (wider_mode, mode, xop0, unsignedp);
temp = expand_complex_abs (wider_mode, xop0, NULL_RTX, unsignedp);
{
x = protect_from_queue (x, 0);
y = protect_from_queue (y, 0);
- x = convert_to_mode (wider_mode, x, unsignedp);
- y = convert_to_mode (wider_mode, y, unsignedp);
+ x = convert_modes (wider_mode, mode, x, unsignedp);
+ y = convert_modes (wider_mode, mode, y, unsignedp);
emit_cmp_insn (x, y, comparison, NULL_RTX,
wider_mode, unsignedp, align);
return;