/* The low-part must be zero-extended when ELEN == 32 and
mode == 64. */
if (num == 2 && i == 0)
- emit_insn (gen_extend_insn (int_reg, result, mode, smode,
- true));
+ int_reg = convert_modes (mode, smode, result, true);
if (i == 1)
{
temp_reg = gen_reg_rtx (word_mode);
zero_extend_p = (LOAD_EXTEND_OP (mode) == ZERO_EXTEND);
+ /* SRC is a MEM, so we can always extend it directly, so
+ no need to indirect through convert_modes. */
emit_insn (gen_extend_insn (temp_reg, src, word_mode, mode,
zero_extend_p));
riscv_emit_move (dest, gen_lowpart (mode, temp_reg));
{
rtx mask = force_reg (word_mode, gen_int_mode (-65536, word_mode));
rtx temp = gen_reg_rtx (word_mode);
- emit_insn (gen_extend_insn (temp,
- gen_lowpart (HImode, src),
- word_mode, HImode, 1));
+ temp = convert_modes (word_mode, HImode,
+ gen_lowpart (HImode, src), true);
if (word_mode == SImode)
emit_insn (gen_iorsi3 (temp, mask, temp));
else
if (tmode != VOIDmode)
{
rtx tmp = gen_lowpart (tmode, operands[1]);
- emit_insn (gen_extend_insn (operands[0], tmp, word_mode, tmode, 1));
+ emit_move_insn (operands[0], convert_modes (word_mode, tmode,
+ tmp, true));
return true;
}
}
rtx t6 = gen_reg_rtx (DImode);
emit_insn (gen_addsi3_extended (t6, operands[1], operands[2]));
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t4, operands[1], DImode, SImode, 0));
- else
- t4 = operands[1];
- if (GET_CODE (operands[2]) != CONST_INT)
- emit_insn (gen_extend_insn (t5, operands[2], DImode, SImode, 0));
- else
- t5 = operands[2];
+ t4 = convert_modes (DImode, SImode, operands[1], false);
+ t5 = convert_modes (DImode, SImode, operands[2], false);
emit_insn (gen_adddi3 (t3, t4, t5));
rtx t7 = gen_lowpart (SImode, t6);
SUBREG_PROMOTED_VAR_P (t7) = 1;
rtx t3 = gen_reg_rtx (DImode);
rtx t4 = gen_reg_rtx (DImode);
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t3, operands[1], DImode, SImode, 0));
- else
- t3 = operands[1];
+ t3 = convert_modes (DImode, SImode, operands[1], 0);
emit_insn (gen_addsi3_extended (t4, operands[1], operands[2]));
rtx t5 = gen_lowpart (SImode, t4);
SUBREG_PROMOTED_VAR_P (t5) = 1;
rtx t6 = gen_reg_rtx (DImode);
emit_insn (gen_subsi3_extended (t6, operands[1], operands[2]));
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t4, operands[1], DImode, SImode, 0));
- else
- t4 = operands[1];
- if (GET_CODE (operands[2]) != CONST_INT)
- emit_insn (gen_extend_insn (t5, operands[2], DImode, SImode, 0));
- else
- t5 = operands[2];
+ t4 = convert_modes (DImode, SImode, operands[1], false);
+ t5 = convert_modes (DImode, SImode, operands[2], false);
emit_insn (gen_subdi3 (t3, t4, t5));
rtx t7 = gen_lowpart (SImode, t6);
SUBREG_PROMOTED_VAR_P (t7) = 1;
rtx t3 = gen_reg_rtx (DImode);
rtx t4 = gen_reg_rtx (DImode);
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t3, operands[1], DImode, SImode, 0));
- else
- t3 = operands[1];
+ t3 = convert_modes (DImode, SImode, operands[1], false);
emit_insn (gen_subsi3_extended (t4, operands[1], operands[2]));
rtx t5 = gen_lowpart (SImode, t4);
SUBREG_PROMOTED_VAR_P (t5) = 1;
rtx t5 = gen_reg_rtx (DImode);
rtx t6 = gen_reg_rtx (DImode);
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t4, operands[1], DImode, SImode, 0));
- else
- t4 = operands[1];
- if (GET_CODE (operands[2]) != CONST_INT)
- emit_insn (gen_extend_insn (t5, operands[2], DImode, SImode, 0));
- else
- t5 = operands[2];
+ t4 = convert_modes (DImode, SImode, operands[1], false);
+ t5 = convert_modes (DImode, SImode, operands[2], false);
emit_insn (gen_muldi3 (t3, t4, t5));
emit_move_insn (operands[0], gen_lowpart (SImode, t3));
- emit_insn (gen_extend_insn (t6, operands[0], DImode, SImode, 0));
+ t6 = convert_modes (DImode, SImode, operands[0], false);
riscv_expand_conditional_branch (operands[3], NE, t6, t3);
}
rtx t7 = gen_reg_rtx (DImode);
rtx t8 = gen_reg_rtx (DImode);
- if (GET_CODE (operands[1]) != CONST_INT)
- emit_insn (gen_extend_insn (t3, operands[1], DImode, SImode, 0));
- else
- t3 = operands[1];
- if (GET_CODE (operands[2]) != CONST_INT)
- emit_insn (gen_extend_insn (t4, operands[2], DImode, SImode, 0));
- else
- t4 = operands[2];
+ t3 = convert_modes (DImode, SImode, operands[1], false);
+ t4 = convert_modes (DImode, SImode, operands[2], false);
emit_insn (gen_ashldi3 (t5, t3, GEN_INT (32)));
emit_insn (gen_ashldi3 (t6, t4, GEN_INT (32)));
{
/* We don't have SI mode compare on RV64, so we need to make sure expected
value is sign-extended. */
- rtx tmp0 = gen_reg_rtx (word_mode);
- emit_insn (gen_extend_insn (tmp0, operands[3], word_mode, <MODE>mode, 0));
+ rtx tmp0 = convert_modes (word_mode, <MODE>mode, operands[3], false);
operands[3] = gen_lowpart (<MODE>mode, tmp0);
}
operands[6],
operands[7]));
- rtx val = gen_reg_rtx (SImode);
- if (operands[1] != const0_rtx)
- emit_move_insn (val, gen_rtx_SIGN_EXTEND (SImode, operands[1]));
- else
- emit_move_insn (val, const0_rtx);
-
- rtx exp = gen_reg_rtx (SImode);
- if (operands[3] != const0_rtx)
- emit_move_insn (exp, gen_rtx_SIGN_EXTEND (SImode, operands[3]));
- else
- emit_move_insn (exp, const0_rtx);
+ rtx val = convert_modes (SImode, <SHORT:MODE>mode, operands[1], false);
+ rtx exp = convert_modes (SImode, <SHORT:MODE>mode, operands[3], false);
rtx compare = val;
if (exp != const0_rtx)