Lines Matching refs:mode
209 widen_operand (rtx op, enum machine_mode mode, enum machine_mode oldmode, in widen_operand() argument
224 return convert_modes (mode, oldmode, op, unsignedp); in widen_operand()
228 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD) in widen_operand()
229 return gen_rtx_SUBREG (mode, force_reg (GET_MODE (op), op), 0); in widen_operand()
234 result = gen_reg_rtx (mode); in widen_operand()
387 xmode0 = insn_data[icode].operand[1].mode; in expand_widen_pattern_expr()
393 xmode1 = insn_data[icode].operand[2].mode; in expand_widen_pattern_expr()
408 wxmode = insn_data[icode].operand[3].mode; in expand_widen_pattern_expr()
412 wmode = wxmode = insn_data[icode].operand[0].mode; in expand_widen_pattern_expr()
507 expand_ternary_op (enum machine_mode mode, optab ternary_optab, rtx op0, in expand_ternary_op() argument
510 int icode = (int) ternary_optab->handlers[(int) mode].insn_code; in expand_ternary_op()
511 enum machine_mode mode0 = insn_data[icode].operand[1].mode; in expand_ternary_op()
512 enum machine_mode mode1 = insn_data[icode].operand[2].mode; in expand_ternary_op()
513 enum machine_mode mode2 = insn_data[icode].operand[3].mode; in expand_ternary_op()
518 gcc_assert (ternary_optab->handlers[(int) mode].insn_code in expand_ternary_op()
521 if (!target || !insn_data[icode].operand[0].predicate (target, mode)) in expand_ternary_op()
522 temp = gen_reg_rtx (mode); in expand_ternary_op()
536 : mode, in expand_ternary_op()
543 : mode, in expand_ternary_op()
550 : mode, in expand_ternary_op()
580 simplify_expand_binop (enum machine_mode mode, optab binoptab, in simplify_expand_binop() argument
586 rtx x = simplify_binary_operation (binoptab->code, mode, op0, op1); in simplify_expand_binop()
592 return expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods); in simplify_expand_binop()
599 force_expand_binop (enum machine_mode mode, optab binoptab, in force_expand_binop() argument
603 rtx x = simplify_expand_binop (mode, binoptab, op0, op1, in force_expand_binop()
621 enum machine_mode mode = TYPE_MODE (TREE_TYPE (vec_shift_expr)); in expand_vec_shift_expr() local
639 icode = (int) shift_optab->handlers[(int) mode].insn_code; in expand_vec_shift_expr()
642 mode1 = insn_data[icode].operand[1].mode; in expand_vec_shift_expr()
643 mode2 = insn_data[icode].operand[2].mode; in expand_vec_shift_expr()
656 || ! (*insn_data[icode].operand[0].predicate) (target, mode)) in expand_vec_shift_expr()
657 target = gen_reg_rtx (mode); in expand_vec_shift_expr()
1044 expand_doubleword_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target, in expand_doubleword_mult() argument
1052 rtx op0_high = operand_subword_force (op0, high, mode); in expand_doubleword_mult()
1053 rtx op0_low = operand_subword_force (op0, low, mode); in expand_doubleword_mult()
1054 rtx op1_high = operand_subword_force (op1, high, mode); in expand_doubleword_mult()
1055 rtx op1_low = operand_subword_force (op1, low, mode); in expand_doubleword_mult()
1132 product = expand_binop (mode, umul_widen_optab, op0_low, op1_low, in expand_doubleword_mult()
1135 product = expand_binop (mode, smul_widen_optab, op0_low, op1_low, in expand_doubleword_mult()
1141 product_high = operand_subword (product, high, 1, mode); in expand_doubleword_mult()
1153 expand_simple_binop (enum machine_mode mode, enum rtx_code code, rtx op0, in expand_simple_binop() argument
1160 return expand_binop (mode, binop, op0, op1, target, unsignedp, methods); in expand_simple_binop()
1199 expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, in expand_binop() argument
1218 class = GET_MODE_CLASS (mode); in expand_binop()
1225 op1 = negate_rtx (mode, op1); in expand_binop()
1235 op0 = convert_modes (mode, VOIDmode, op0, unsignedp); in expand_binop()
1236 op0 = force_reg (mode, op0); in expand_binop()
1243 op1 = convert_modes (mode, VOIDmode, op1, unsignedp); in expand_binop()
1244 op1 = force_reg (mode, op1); in expand_binop()
1275 && binoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in expand_binop()
1277 int icode = (int) binoptab->handlers[(int) mode].insn_code; in expand_binop()
1278 enum machine_mode mode0 = insn_data[icode].operand[1].mode; in expand_binop()
1279 enum machine_mode mode1 = insn_data[icode].operand[2].mode; in expand_binop()
1286 temp = gen_reg_rtx (mode); in expand_binop()
1312 : mode, in expand_binop()
1319 : mode, in expand_binop()
1333 if (!insn_data[icode].operand[0].predicate (temp, mode)) in expand_binop()
1334 temp = gen_reg_rtx (mode); in expand_binop()
1346 return expand_binop (mode, binoptab, op0, op1, NULL_RTX, in expand_binop()
1365 && (unsigned int) INTVAL (op1) < GET_MODE_BITSIZE (mode)) in expand_binop()
1368 op1 = GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1)); in expand_binop()
1377 && GET_MODE_WIDER_MODE (mode) != VOIDmode in expand_binop()
1379 ->handlers[(int) GET_MODE_WIDER_MODE (mode)].insn_code) in expand_binop()
1382 temp = expand_binop (GET_MODE_WIDER_MODE (mode), in expand_binop()
1388 if (GET_MODE_CLASS (mode) == MODE_INT in expand_binop()
1389 && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), in expand_binop()
1391 return gen_lowpart (mode, temp); in expand_binop()
1393 return convert_to_mode (mode, temp, unsignedp); in expand_binop()
1403 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_binop()
1428 xop0 = widen_operand (xop0, wider_mode, mode, unsignedp, no_extend); in expand_binop()
1431 xop1 = widen_operand (xop1, wider_mode, mode, unsignedp, in expand_binop()
1439 || !TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), in expand_binop()
1443 target = gen_reg_rtx (mode); in expand_binop()
1448 return gen_lowpart (mode, temp); in expand_binop()
1458 && GET_MODE_SIZE (mode) > UNITS_PER_WORD in expand_binop()
1468 target = gen_reg_rtx (mode); in expand_binop()
1473 for (i = 0; i < GET_MODE_BITSIZE (mode) / BITS_PER_WORD; i++) in expand_binop()
1475 rtx target_piece = operand_subword (target, i, 1, mode); in expand_binop()
1477 operand_subword_force (op0, i, mode), in expand_binop()
1478 operand_subword_force (op1, i, mode), in expand_binop()
1491 if (i == GET_MODE_BITSIZE (mode) / BITS_PER_WORD) in expand_binop()
1495 = gen_rtx_fmt_ee (binoptab->code, mode, in expand_binop()
1510 && GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD in expand_binop()
1518 double_shift_mask = targetm.shift_truncation_mask (mode); in expand_binop()
1543 target = gen_reg_rtx (mode); in expand_binop()
1555 outof_target = operand_subword (target, outof_word, 1, mode); in expand_binop()
1556 into_target = operand_subword (target, 1 - outof_word, 1, mode); in expand_binop()
1558 outof_input = operand_subword_force (op0, outof_word, mode); in expand_binop()
1559 into_input = operand_subword_force (op0, 1 - outof_word, mode); in expand_binop()
1569 equiv_value = gen_rtx_fmt_ee (binoptab->code, mode, op0, op1); in expand_binop()
1581 && GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD in expand_binop()
1598 target = gen_reg_rtx (mode); in expand_binop()
1612 outof_target = operand_subword (target, outof_word, 1, mode); in expand_binop()
1613 into_target = operand_subword (target, 1 - outof_word, 1, mode); in expand_binop()
1615 outof_input = operand_subword_force (op0, outof_word, mode); in expand_binop()
1616 into_input = operand_subword_force (op0, 1 - outof_word, mode); in expand_binop()
1698 && GET_MODE_SIZE (mode) >= 2 * UNITS_PER_WORD in expand_binop()
1703 const unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; in expand_binop()
1717 xop0 = force_reg (mode, op0); in expand_binop()
1718 xop1 = force_reg (mode, op1); in expand_binop()
1720 xtarget = gen_reg_rtx (mode); in expand_binop()
1733 rtx target_piece = operand_subword (xtarget, index, 1, mode); in expand_binop()
1734 rtx op0_piece = operand_subword_force (xop0, index, mode); in expand_binop()
1735 rtx op1_piece = operand_subword_force (xop1, index, mode); in expand_binop()
1794 if (i == GET_MODE_BITSIZE (mode) / (unsigned) BITS_PER_WORD) in expand_binop()
1796 if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing in expand_binop()
1803 gen_rtx_fmt_ee (binoptab->code, mode, in expand_binop()
1824 && GET_MODE_SIZE (mode) == 2 * UNITS_PER_WORD in expand_binop()
1830 if (umul_widen_optab->handlers[(int) mode].insn_code in expand_binop()
1833 product = expand_doubleword_mult (mode, op0, op1, target, in expand_binop()
1840 && smul_widen_optab->handlers[(int) mode].insn_code in expand_binop()
1843 product = expand_doubleword_mult (mode, op0, op1, target, in expand_binop()
1851 if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in expand_binop()
1856 gen_rtx_fmt_ee (MULT, mode, in expand_binop()
1867 if (binoptab->handlers[(int) mode].libfunc in expand_binop()
1872 enum machine_mode op1_mode = mode; in expand_binop()
1886 && GET_MODE (op0) != mode) in expand_binop()
1887 op0 = convert_to_mode (mode, op0, unsignedp); in expand_binop()
1891 value = emit_library_call_value (binoptab->handlers[(int) mode].libfunc, in expand_binop()
1892 NULL_RTX, LCT_CONST, mode, 2, in expand_binop()
1893 op0, mode, op1x, op1_mode); in expand_binop()
1898 target = gen_reg_rtx (mode); in expand_binop()
1900 gen_rtx_fmt_ee (binoptab->code, mode, op0, op1)); in expand_binop()
1927 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_binop()
1950 xop0 = widen_operand (xop0, wider_mode, mode, in expand_binop()
1954 xop1 = widen_operand (xop1, wider_mode, mode, unsignedp, in expand_binop()
1962 || !TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), in expand_binop()
1966 target = gen_reg_rtx (mode); in expand_binop()
1971 return gen_lowpart (mode, temp); in expand_binop()
1991 sign_expand_binop (enum machine_mode mode, optab uoptab, optab soptab, in sign_expand_binop() argument
2000 temp = expand_binop (mode, direct_optab, op0, op1, target, in sign_expand_binop()
2008 wide_soptab.handlers[(int) mode].insn_code = CODE_FOR_nothing; in sign_expand_binop()
2009 wide_soptab.handlers[(int) mode].libfunc = 0; in sign_expand_binop()
2011 temp = expand_binop (mode, &wide_soptab, op0, op1, target, in sign_expand_binop()
2016 temp = expand_binop (mode, uoptab, op0, op1, target, in sign_expand_binop()
2022 temp = expand_binop (mode, direct_optab, op0, op1, target, unsignedp, OPTAB_LIB); in sign_expand_binop()
2027 temp = expand_binop (mode, &wide_soptab, op0, op1, target, in sign_expand_binop()
2032 return expand_binop (mode, uoptab, op0, op1, target, in sign_expand_binop()
2052 enum machine_mode mode = GET_MODE (targ0 ? targ0 : targ1); in expand_twoval_unop() local
2058 class = GET_MODE_CLASS (mode); in expand_twoval_unop()
2061 targ0 = gen_reg_rtx (mode); in expand_twoval_unop()
2063 targ1 = gen_reg_rtx (mode); in expand_twoval_unop()
2068 if (unoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in expand_twoval_unop()
2070 int icode = (int) unoptab->handlers[(int) mode].insn_code; in expand_twoval_unop()
2071 enum machine_mode mode0 = insn_data[icode].operand[2].mode; in expand_twoval_unop()
2085 gcc_assert (insn_data[icode].operand[0].predicate (targ0, mode)); in expand_twoval_unop()
2086 gcc_assert (insn_data[icode].operand[1].predicate (targ1, mode)); in expand_twoval_unop()
2102 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_twoval_unop()
2111 rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp); in expand_twoval_unop()
2145 enum machine_mode mode = GET_MODE (targ0 ? targ0 : targ1); in expand_twoval_binop() local
2151 class = GET_MODE_CLASS (mode); in expand_twoval_binop()
2157 op0 = force_reg (mode, op0); in expand_twoval_binop()
2161 op1 = force_reg (mode, op1); in expand_twoval_binop()
2164 targ0 = gen_reg_rtx (mode); in expand_twoval_binop()
2166 targ1 = gen_reg_rtx (mode); in expand_twoval_binop()
2171 if (binoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in expand_twoval_binop()
2173 int icode = (int) binoptab->handlers[(int) mode].insn_code; in expand_twoval_binop()
2174 enum machine_mode mode0 = insn_data[icode].operand[1].mode; in expand_twoval_binop()
2175 enum machine_mode mode1 = insn_data[icode].operand[2].mode; in expand_twoval_binop()
2189 : mode, in expand_twoval_binop()
2196 : mode, in expand_twoval_binop()
2208 gcc_assert (insn_data[icode].operand[0].predicate (targ0, mode)); in expand_twoval_binop()
2209 gcc_assert (insn_data[icode].operand[3].predicate (targ1, mode)); in expand_twoval_binop()
2225 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_twoval_binop()
2234 rtx cop0 = convert_modes (wider_mode, mode, op0, unsignedp); in expand_twoval_binop()
2235 rtx cop1 = convert_modes (wider_mode, mode, op1, unsignedp); in expand_twoval_binop()
2267 enum machine_mode mode; in expand_twoval_binop_libfunc() local
2275 mode = GET_MODE (op0); in expand_twoval_binop_libfunc()
2276 if (!binoptab->handlers[(int) mode].libfunc) in expand_twoval_binop_libfunc()
2281 libval_mode = smallest_mode_for_size (2 * GET_MODE_BITSIZE (mode), in expand_twoval_binop_libfunc()
2284 libval = emit_library_call_value (binoptab->handlers[(int) mode].libfunc, in expand_twoval_binop_libfunc()
2287 op0, mode, in expand_twoval_binop_libfunc()
2288 op1, mode); in expand_twoval_binop_libfunc()
2290 libval = simplify_gen_subreg (mode, libval, libval_mode, in expand_twoval_binop_libfunc()
2291 targ0 ? 0 : GET_MODE_SIZE (mode)); in expand_twoval_binop_libfunc()
2296 gen_rtx_fmt_ee (code, mode, op0, op1)); in expand_twoval_binop_libfunc()
2306 expand_simple_unop (enum machine_mode mode, enum rtx_code code, rtx op0, in expand_simple_unop() argument
2312 return expand_unop (mode, unop, op0, target, unsignedp); in expand_simple_unop()
2320 widen_clz (enum machine_mode mode, rtx op0, rtx target) in widen_clz() argument
2322 enum mode_class class = GET_MODE_CLASS (mode); in widen_clz()
2326 for (wider_mode = GET_MODE_WIDER_MODE (mode); in widen_clz()
2338 target = gen_reg_rtx (mode); in widen_clz()
2339 xop0 = widen_operand (op0, wider_mode, mode, true, false); in widen_clz()
2344 - GET_MODE_BITSIZE (mode)), in widen_clz()
2359 expand_parity (enum machine_mode mode, rtx op0, rtx target) in expand_parity() argument
2361 enum mode_class class = GET_MODE_CLASS (mode); in expand_parity()
2365 for (wider_mode = mode; wider_mode != VOIDmode; in expand_parity()
2376 target = gen_reg_rtx (mode); in expand_parity()
2377 xop0 = widen_operand (op0, wider_mode, mode, true, false); in expand_parity()
2417 expand_absneg_bit (enum rtx_code code, enum machine_mode mode, in expand_absneg_bit() argument
2427 fmt = REAL_MODE_FORMAT (mode); in expand_absneg_bit()
2439 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD) in expand_absneg_bit()
2441 imode = int_mode_for_mode (mode); in expand_absneg_bit()
2452 word = (GET_MODE_BITSIZE (mode) - bitpos) / BITS_PER_WORD; in expand_absneg_bit()
2456 nwords = (GET_MODE_BITSIZE (mode) + BITS_PER_WORD - 1) / BITS_PER_WORD; in expand_absneg_bit()
2473 target = gen_reg_rtx (mode); in expand_absneg_bit()
2481 rtx targ_piece = operand_subword (target, i, 1, mode); in expand_absneg_bit()
2482 rtx op0_piece = operand_subword_force (op0, i, mode); in expand_absneg_bit()
2500 temp = gen_rtx_fmt_e (code, mode, copy_rtx (op0)); in expand_absneg_bit()
2509 target = lowpart_subreg_maybe_copy (mode, temp, imode); in expand_absneg_bit()
2512 gen_rtx_fmt_e (code, mode, copy_rtx (op0))); in expand_absneg_bit()
2530 expand_unop (enum machine_mode mode, optab unoptab, rtx op0, rtx target, in expand_unop() argument
2539 class = GET_MODE_CLASS (mode); in expand_unop()
2541 if (unoptab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in expand_unop()
2543 int icode = (int) unoptab->handlers[(int) mode].insn_code; in expand_unop()
2544 enum machine_mode mode0 = insn_data[icode].operand[1].mode; in expand_unop()
2550 temp = gen_reg_rtx (mode); in expand_unop()
2561 if (!insn_data[icode].operand[0].predicate (temp, mode)) in expand_unop()
2562 temp = gen_reg_rtx (mode); in expand_unop()
2571 return expand_unop (mode, unoptab, op0, NULL_RTX, unsignedp); in expand_unop()
2587 temp = widen_clz (mode, op0, target); in expand_unop()
2599 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_unop()
2611 xop0 = widen_operand (xop0, wider_mode, mode, unsignedp, in expand_unop()
2622 || !TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (mode), in expand_unop()
2626 target = gen_reg_rtx (mode); in expand_unop()
2631 return gen_lowpart (mode, temp); in expand_unop()
2641 && GET_MODE_SIZE (mode) > UNITS_PER_WORD in expand_unop()
2648 target = gen_reg_rtx (mode); in expand_unop()
2653 for (i = 0; i < GET_MODE_BITSIZE (mode) / BITS_PER_WORD; i++) in expand_unop()
2655 rtx target_piece = operand_subword (target, i, 1, mode); in expand_unop()
2657 operand_subword_force (op0, i, mode), in expand_unop()
2668 gen_rtx_fmt_e (unoptab->code, mode, in expand_unop()
2676 if (SCALAR_FLOAT_MODE_P (mode)) in expand_unop()
2678 temp = expand_absneg_bit (NEG, mode, op0, target); in expand_unop()
2685 if (!HONOR_SIGNED_ZEROS (mode)) in expand_unop()
2687 temp = expand_binop (mode, (unoptab == negv_optab in expand_unop()
2689 CONST0_RTX (mode), op0, target, in expand_unop()
2699 temp = expand_parity (mode, op0, target); in expand_unop()
2706 if (unoptab->handlers[(int) mode].libfunc) in expand_unop()
2710 enum machine_mode outmode = mode; in expand_unop()
2723 value = emit_library_call_value (unoptab->handlers[(int) mode].libfunc, in expand_unop()
2725 1, op0, mode); in expand_unop()
2740 for (wider_mode = GET_MODE_WIDER_MODE (mode); in expand_unop()
2754 xop0 = widen_operand (xop0, wider_mode, mode, unsignedp, in expand_unop()
2767 - GET_MODE_BITSIZE (mode)), in expand_unop()
2775 target = gen_reg_rtx (mode); in expand_unop()
2780 return gen_lowpart (mode, temp); in expand_unop()
2790 if (unoptab->code == NEG && !HONOR_SIGNED_ZEROS (mode)) in expand_unop()
2793 temp = expand_binop (mode, in expand_unop()
2795 CONST0_RTX (mode), op0, in expand_unop()
2814 expand_abs_nojump (enum machine_mode mode, rtx op0, rtx target, in expand_abs_nojump() argument
2823 temp = expand_unop (mode, result_unsignedp ? abs_optab : absv_optab, in expand_abs_nojump()
2829 if (SCALAR_FLOAT_MODE_P (mode)) in expand_abs_nojump()
2831 temp = expand_absneg_bit (ABS, mode, op0, target); in expand_abs_nojump()
2837 if (smax_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing in expand_abs_nojump()
2838 && !HONOR_SIGNED_ZEROS (mode)) in expand_abs_nojump()
2842 temp = expand_unop (mode, neg_optab, op0, NULL_RTX, 0); in expand_abs_nojump()
2844 temp = expand_binop (mode, smax_optab, op0, temp, target, 0, in expand_abs_nojump()
2857 if (GET_MODE_CLASS (mode) == MODE_INT && BRANCH_COST >= 2) in expand_abs_nojump()
2859 rtx extended = expand_shift (RSHIFT_EXPR, mode, op0, in expand_abs_nojump()
2860 size_int (GET_MODE_BITSIZE (mode) - 1), in expand_abs_nojump()
2863 temp = expand_binop (mode, xor_optab, extended, op0, target, 0, in expand_abs_nojump()
2866 temp = expand_binop (mode, result_unsignedp ? sub_optab : subv_optab, in expand_abs_nojump()
2877 expand_abs (enum machine_mode mode, rtx op0, rtx target, in expand_abs() argument
2885 temp = expand_abs_nojump (mode, op0, target, result_unsignedp); in expand_abs()
2899 || GET_MODE (target) != mode in expand_abs()
2903 target = gen_reg_rtx (mode); in expand_abs()
2908 do_compare_rtx_and_jump (target, CONST0_RTX (mode), GE, 0, mode, in expand_abs()
2911 op0 = expand_unop (mode, result_unsignedp ? neg_optab : negv_optab, in expand_abs()
2926 expand_copysign_absneg (enum machine_mode mode, rtx op0, rtx op1, rtx target, in expand_copysign_absneg() argument
2939 op0 = expand_unop (mode, abs_optab, op0, target, 0); in expand_copysign_absneg()
2952 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD) in expand_copysign_absneg()
2954 imode = int_mode_for_mode (mode); in expand_copysign_absneg()
2963 word = (GET_MODE_BITSIZE (mode) - bitpos) / BITS_PER_WORD; in expand_copysign_absneg()
2967 op1 = operand_subword_force (op1, word, mode); in expand_copysign_absneg()
2989 op0 = simplify_unary_operation (NEG, mode, op0, mode); in expand_copysign_absneg()
2991 op0 = expand_unop (mode, neg_optab, op0, target, 0); in expand_copysign_absneg()
3006 expand_copysign_bit (enum machine_mode mode, rtx op0, rtx op1, rtx target, in expand_copysign_bit() argument
3014 if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD) in expand_copysign_bit()
3016 imode = int_mode_for_mode (mode); in expand_copysign_bit()
3027 word = (GET_MODE_BITSIZE (mode) - bitpos) / BITS_PER_WORD; in expand_copysign_bit()
3031 nwords = (GET_MODE_BITSIZE (mode) + BITS_PER_WORD - 1) / BITS_PER_WORD; in expand_copysign_bit()
3046 target = gen_reg_rtx (mode); in expand_copysign_bit()
3054 rtx targ_piece = operand_subword (target, i, 1, mode); in expand_copysign_bit()
3055 rtx op0_piece = operand_subword_force (op0, i, mode); in expand_copysign_bit()
3065 operand_subword_force (op1, i, mode), in expand_copysign_bit()
3097 target = lowpart_subreg_maybe_copy (mode, temp, imode); in expand_copysign_bit()
3110 enum machine_mode mode = GET_MODE (op0); in expand_copysign() local
3115 gcc_assert (SCALAR_FLOAT_MODE_P (mode)); in expand_copysign()
3116 gcc_assert (GET_MODE (op1) == mode); in expand_copysign()
3119 temp = expand_binop (mode, copysign_optab, op0, op1, in expand_copysign()
3124 fmt = REAL_MODE_FORMAT (mode); in expand_copysign()
3132 op0 = simplify_unary_operation (ABS, mode, op0, mode); in expand_copysign()
3138 || (neg_optab->handlers[mode].insn_code != CODE_FOR_nothing in expand_copysign()
3139 && abs_optab->handlers[mode].insn_code != CODE_FOR_nothing))) in expand_copysign()
3141 temp = expand_copysign_absneg (mode, op0, op1, target, in expand_copysign()
3149 return expand_copysign_bit (mode, op0, op1, target, in expand_copysign()
3163 enum machine_mode mode0 = insn_data[icode].operand[1].mode; in emit_unop_insn()
3547 can_compare_p (enum rtx_code code, enum machine_mode mode, in can_compare_p() argument
3552 if (cmp_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in can_compare_p()
3563 && cbranch_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in can_compare_p()
3566 && cmov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in can_compare_p()
3569 && cstore_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) in can_compare_p()
3571 mode = GET_MODE_WIDER_MODE (mode); in can_compare_p()
3573 while (mode != VOIDmode); in can_compare_p()
3600 enum machine_mode mode = *pmode; in prepare_cmp_insn() local
3608 x = force_reg (mode, x); in prepare_cmp_insn()
3612 y = force_reg (mode, y); in prepare_cmp_insn()
3623 x = force_reg (mode, x); in prepare_cmp_insn()
3627 if (mode == BLKmode) in prepare_cmp_insn()
3660 result_mode = insn_data[cmp_code].operand[0].mode; in prepare_cmp_insn()
3695 x = force_reg (mode, x); in prepare_cmp_insn()
3697 y = force_reg (mode, y); in prepare_cmp_insn()
3702 if (can_compare_p (*pcomparison, mode, purpose)) in prepare_cmp_insn()
3707 if (cmp_optab->handlers[(int) mode].libfunc && !SCALAR_FLOAT_MODE_P (mode)) in prepare_cmp_insn()
3709 rtx libfunc = cmp_optab->handlers[(int) mode].libfunc; in prepare_cmp_insn()
3714 if (unsignedp && ucmp_optab->handlers[(int) mode].libfunc) in prepare_cmp_insn()
3715 libfunc = ucmp_optab->handlers[(int) mode].libfunc; in prepare_cmp_insn()
3718 word_mode, 2, x, mode, y, mode); in prepare_cmp_insn()
3742 gcc_assert (SCALAR_FLOAT_MODE_P (mode)); in prepare_cmp_insn()
3752 prepare_operand (int icode, rtx x, int opnum, enum machine_mode mode, in prepare_operand() argument
3755 if (mode != wider_mode) in prepare_operand()
3756 x = convert_modes (wider_mode, mode, x, unsignedp); in prepare_operand()
3759 (x, insn_data[icode].operand[opnum].mode)) in prepare_operand()
3763 x = copy_to_mode_reg (insn_data[icode].operand[opnum].mode, x); in prepare_operand()
3775 emit_cmp_and_jump_insn_1 (rtx x, rtx y, enum machine_mode mode, in emit_cmp_and_jump_insn_1() argument
3778 rtx test = gen_rtx_fmt_ee (comparison, mode, x, y); in emit_cmp_and_jump_insn_1()
3779 enum mode_class class = GET_MODE_CLASS (mode); in emit_cmp_and_jump_insn_1()
3780 enum machine_mode wider_mode = mode; in emit_cmp_and_jump_insn_1()
3795 x = prepare_operand (icode, x, 1, mode, wider_mode, unsignedp); in emit_cmp_and_jump_insn_1()
3796 y = prepare_operand (icode, y, 2, mode, wider_mode, unsignedp); in emit_cmp_and_jump_insn_1()
3804 if (y == CONST0_RTX (mode) && icode != CODE_FOR_nothing) in emit_cmp_and_jump_insn_1()
3806 x = prepare_operand (icode, x, 0, mode, wider_mode, unsignedp); in emit_cmp_and_jump_insn_1()
3818 x = prepare_operand (icode, x, 0, mode, wider_mode, unsignedp); in emit_cmp_and_jump_insn_1()
3819 y = prepare_operand (icode, y, 1, mode, wider_mode, unsignedp); in emit_cmp_and_jump_insn_1()
3855 enum machine_mode mode, int unsignedp, rtx label) in emit_cmp_and_jump_insns() argument
3874 op0 = force_reg (mode, op0); in emit_cmp_and_jump_insns()
3880 prepare_cmp_insn (&op0, &op1, &comparison, size, &mode, &unsignedp, in emit_cmp_and_jump_insns()
3882 emit_cmp_and_jump_insn_1 (op0, op1, mode, comparison, unsignedp, label); in emit_cmp_and_jump_insns()
3889 enum machine_mode mode, int unsignedp) in emit_cmp_insn() argument
3891 emit_cmp_and_jump_insns (x, y, comparison, size, mode, unsignedp, 0); in emit_cmp_insn()
3907 enum machine_mode mode; in prepare_float_lib_cmp() local
3912 for (mode = orig_mode; in prepare_float_lib_cmp()
3913 mode != VOIDmode; in prepare_float_lib_cmp()
3914 mode = GET_MODE_WIDER_MODE (mode)) in prepare_float_lib_cmp()
3916 if ((libfunc = code_to_optab[comparison]->handlers[mode].libfunc)) in prepare_float_lib_cmp()
3919 if ((libfunc = code_to_optab[swapped]->handlers[mode].libfunc)) in prepare_float_lib_cmp()
3927 if ((libfunc = code_to_optab[reversed]->handlers[mode].libfunc) in prepare_float_lib_cmp()
3928 && FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, reversed)) in prepare_float_lib_cmp()
3936 gcc_assert (mode != VOIDmode); in prepare_float_lib_cmp()
3938 if (mode != orig_mode) in prepare_float_lib_cmp()
3940 x = convert_to_mode (mode, x, 0); in prepare_float_lib_cmp()
3941 y = convert_to_mode (mode, y, 0); in prepare_float_lib_cmp()
3949 rtx temp = simplify_gen_relational (NE, word_mode, mode, x, x); in prepare_float_lib_cmp()
3950 equiv = simplify_gen_relational (NE, word_mode, mode, y, y); in prepare_float_lib_cmp()
3956 equiv = simplify_gen_relational (comparison, word_mode, mode, x, y); in prepare_float_lib_cmp()
3957 if (! FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison)) in prepare_float_lib_cmp()
4003 word_mode, 2, x, mode, y, mode); in prepare_float_lib_cmp()
4011 || FLOAT_LIB_COMPARE_RETURNS_BOOL (mode, comparison)) in prepare_float_lib_cmp()
4053 enum machine_mode mode, int unsignedp) in emit_conditional_move() argument
4091 if (mode == VOIDmode) in emit_conditional_move()
4092 mode = GET_MODE (op2); in emit_conditional_move()
4094 icode = movcc_gen_code[mode]; in emit_conditional_move()
4100 target = gen_reg_rtx (mode); in emit_conditional_move()
4107 (subtarget, insn_data[icode].operand[0].mode)) in emit_conditional_move()
4108 subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode); in emit_conditional_move()
4111 (op2, insn_data[icode].operand[2].mode)) in emit_conditional_move()
4112 op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2); in emit_conditional_move()
4115 (op3, insn_data[icode].operand[3].mode)) in emit_conditional_move()
4116 op3 = copy_to_mode_reg (insn_data[icode].operand[3].mode, op3); in emit_conditional_move()
4154 can_conditionally_move_p (enum machine_mode mode) in can_conditionally_move_p() argument
4156 if (movcc_gen_code[mode] != CODE_FOR_nothing) in can_conditionally_move_p()
4181 enum machine_mode mode, int unsignedp) in emit_conditional_add() argument
4219 if (mode == VOIDmode) in emit_conditional_add()
4220 mode = GET_MODE (op2); in emit_conditional_add()
4222 icode = addcc_optab->handlers[(int) mode].insn_code; in emit_conditional_add()
4228 target = gen_reg_rtx (mode); in emit_conditional_add()
4233 (target, insn_data[icode].operand[0].mode)) in emit_conditional_add()
4234 subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode); in emit_conditional_add()
4239 (op2, insn_data[icode].operand[2].mode)) in emit_conditional_add()
4240 op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2); in emit_conditional_add()
4243 (op3, insn_data[icode].operand[3].mode)) in emit_conditional_add()
4244 op3 = copy_to_mode_reg (insn_data[icode].operand[3].mode, op3); in emit_conditional_add()
4285 (x, insn_data[icode].operand[0].mode)); in gen_add2_insn()
4287 (x, insn_data[icode].operand[1].mode)); in gen_add2_insn()
4289 (y, insn_data[icode].operand[2].mode)); in gen_add2_insn()
4303 (r0, insn_data[icode].operand[0].mode)) in gen_add3_insn()
4305 (r1, insn_data[icode].operand[1].mode)) in gen_add3_insn()
4307 (c, insn_data[icode].operand[2].mode))) in gen_add3_insn()
4326 (x, insn_data[icode].operand[0].mode)) in have_add2_insn()
4328 (x, insn_data[icode].operand[1].mode)) in have_add2_insn()
4330 (y, insn_data[icode].operand[2].mode))) in have_add2_insn()
4344 (x, insn_data[icode].operand[0].mode)); in gen_sub2_insn()
4346 (x, insn_data[icode].operand[1].mode)); in gen_sub2_insn()
4348 (y, insn_data[icode].operand[2].mode)); in gen_sub2_insn()
4362 (r0, insn_data[icode].operand[0].mode)) in gen_sub3_insn()
4364 (r1, insn_data[icode].operand[1].mode)) in gen_sub3_insn()
4366 (c, insn_data[icode].operand[2].mode))) in gen_sub3_insn()
4385 (x, insn_data[icode].operand[0].mode)) in have_sub2_insn()
4387 (x, insn_data[icode].operand[1].mode)) in have_sub2_insn()
4389 (y, insn_data[icode].operand[2].mode))) in have_sub2_insn()
4873 have_insn_for (enum rtx_code code, enum machine_mode mode) in have_insn_for() argument
4876 && (code_to_optab[(int) code]->handlers[(int) mode].insn_code in have_insn_for()
4960 int mode; in init_libfuncs() local
4963 for (mode = first_mode; (int) mode <= (int) last_mode; in init_libfuncs()
4964 mode = (enum machine_mode) ((int) mode + 1)) in init_libfuncs()
4966 const char *mname = GET_MODE_NAME (mode); in init_libfuncs()
4982 optable->handlers[(int) mode].libfunc in init_libfuncs()
5156 set_optab_libfunc (optab optable, enum machine_mode mode, const char *name) in set_optab_libfunc() argument
5159 optable->handlers[mode].libfunc = init_one_libfunc (name); in set_optab_libfunc()
5161 optable->handlers[mode].libfunc = 0; in set_optab_libfunc()
5575 enum machine_mode mode = GET_MODE (op1); in gen_cond_trap() local
5582 if (mode == VOIDmode) in gen_cond_trap()
5585 icode = cmp_optab->handlers[(int) mode].insn_code; in gen_cond_trap()
5590 op1 = prepare_operand (icode, op1, 0, mode, mode, 0); in gen_cond_trap()
5591 op2 = prepare_operand (icode, op2, 1, mode, mode, 0); in gen_cond_trap()
5707 get_vcond_icode (tree expr, enum machine_mode mode) in get_vcond_icode() argument
5712 icode = vcondu_gen_code[mode]; in get_vcond_icode()
5714 icode = vcond_gen_code[mode]; in get_vcond_icode()
5736 enum machine_mode mode = TYPE_MODE (TREE_TYPE (vec_cond_expr)); in expand_vec_cond_expr() local
5739 icode = get_vcond_icode (vec_cond_expr, mode); in expand_vec_cond_expr()
5743 if (!target || !insn_data[icode].operand[0].predicate (target, mode)) in expand_vec_cond_expr()
5744 target = gen_reg_rtx (mode); in expand_vec_cond_expr()
5754 if (!insn_data[icode].operand[1].predicate (rtx_op1, mode) in expand_vec_cond_expr()
5755 && mode != VOIDmode) in expand_vec_cond_expr()
5756 rtx_op1 = force_reg (mode, rtx_op1); in expand_vec_cond_expr()
5760 if (!insn_data[icode].operand[2].predicate (rtx_op2, mode) in expand_vec_cond_expr()
5761 && mode != VOIDmode) in expand_vec_cond_expr()
5762 rtx_op2 = force_reg (mode, rtx_op2); in expand_vec_cond_expr()
5782 enum machine_mode mode = GET_MODE (mem); in expand_val_compare_and_swap_1() local
5785 if (!target || !insn_data[icode].operand[0].predicate (target, mode)) in expand_val_compare_and_swap_1()
5786 target = gen_reg_rtx (mode); in expand_val_compare_and_swap_1()
5788 if (GET_MODE (old_val) != VOIDmode && GET_MODE (old_val) != mode) in expand_val_compare_and_swap_1()
5789 old_val = convert_modes (mode, GET_MODE (old_val), old_val, 1); in expand_val_compare_and_swap_1()
5790 if (!insn_data[icode].operand[2].predicate (old_val, mode)) in expand_val_compare_and_swap_1()
5791 old_val = force_reg (mode, old_val); in expand_val_compare_and_swap_1()
5793 if (GET_MODE (new_val) != VOIDmode && GET_MODE (new_val) != mode) in expand_val_compare_and_swap_1()
5794 new_val = convert_modes (mode, GET_MODE (new_val), new_val, 1); in expand_val_compare_and_swap_1()
5795 if (!insn_data[icode].operand[3].predicate (new_val, mode)) in expand_val_compare_and_swap_1()
5796 new_val = force_reg (mode, new_val); in expand_val_compare_and_swap_1()
5811 enum machine_mode mode = GET_MODE (mem); in expand_val_compare_and_swap() local
5812 enum insn_code icode = sync_compare_and_swap[mode]; in expand_val_compare_and_swap()
5827 enum machine_mode mode = GET_MODE (mem); in expand_bool_compare_and_swap() local
5834 icode = sync_compare_and_swap_cc[mode]; in expand_bool_compare_and_swap()
5845 icode = sync_compare_and_swap[mode]; in expand_bool_compare_and_swap()
5852 old_val = force_reg (mode, old_val); in expand_bool_compare_and_swap()
5859 emit_cmp_insn (subtarget, old_val, EQ, const0_rtx, mode, true); in expand_bool_compare_and_swap()
5870 enum machine_mode cmode = insn_data[icode].operand[0].mode; in expand_bool_compare_and_swap()
5921 enum machine_mode mode = GET_MODE (mem); in expand_compare_and_swap_loop() local
5939 cmp_reg = gen_reg_rtx (mode); in expand_compare_and_swap_loop()
5950 icode = sync_compare_and_swap_cc[mode]; in expand_compare_and_swap_loop()
5964 icode = sync_compare_and_swap[mode]; in expand_compare_and_swap_loop()
5975 emit_cmp_insn (cmp_reg, old_reg, EQ, const0_rtx, mode, true); in expand_compare_and_swap_loop()
5991 enum machine_mode mode = GET_MODE (mem); in expand_sync_operation() local
5999 icode = sync_add_optab[mode]; in expand_sync_operation()
6002 icode = sync_ior_optab[mode]; in expand_sync_operation()
6005 icode = sync_xor_optab[mode]; in expand_sync_operation()
6008 icode = sync_and_optab[mode]; in expand_sync_operation()
6011 icode = sync_nand_optab[mode]; in expand_sync_operation()
6015 icode = sync_sub_optab[mode]; in expand_sync_operation()
6018 icode = sync_add_optab[mode]; in expand_sync_operation()
6021 val = expand_simple_unop (mode, NEG, val, NULL_RTX, 1); in expand_sync_operation()
6034 if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode) in expand_sync_operation()
6035 val = convert_modes (mode, GET_MODE (val), val, 1); in expand_sync_operation()
6036 if (!insn_data[icode].operand[1].predicate (val, mode)) in expand_sync_operation()
6037 val = force_reg (mode, val); in expand_sync_operation()
6049 if (sync_compare_and_swap[mode] != CODE_FOR_nothing) in expand_sync_operation()
6051 rtx t0 = gen_reg_rtx (mode), t1; in expand_sync_operation()
6058 t1 = expand_simple_unop (mode, NOT, t1, NULL_RTX, true); in expand_sync_operation()
6061 t1 = expand_simple_binop (mode, code, t1, val, NULL_RTX, in expand_sync_operation()
6084 enum machine_mode mode = GET_MODE (mem); in expand_sync_fetch_operation() local
6093 old_code = sync_old_add_optab[mode]; in expand_sync_fetch_operation()
6094 new_code = sync_new_add_optab[mode]; in expand_sync_fetch_operation()
6097 old_code = sync_old_ior_optab[mode]; in expand_sync_fetch_operation()
6098 new_code = sync_new_ior_optab[mode]; in expand_sync_fetch_operation()
6101 old_code = sync_old_xor_optab[mode]; in expand_sync_fetch_operation()
6102 new_code = sync_new_xor_optab[mode]; in expand_sync_fetch_operation()
6105 old_code = sync_old_and_optab[mode]; in expand_sync_fetch_operation()
6106 new_code = sync_new_and_optab[mode]; in expand_sync_fetch_operation()
6109 old_code = sync_old_nand_optab[mode]; in expand_sync_fetch_operation()
6110 new_code = sync_new_nand_optab[mode]; in expand_sync_fetch_operation()
6114 old_code = sync_old_sub_optab[mode]; in expand_sync_fetch_operation()
6115 new_code = sync_new_sub_optab[mode]; in expand_sync_fetch_operation()
6118 old_code = sync_old_add_optab[mode]; in expand_sync_fetch_operation()
6119 new_code = sync_new_add_optab[mode]; in expand_sync_fetch_operation()
6122 val = expand_simple_unop (mode, NEG, val, NULL_RTX, 1); in expand_sync_fetch_operation()
6164 if (!target || !insn_data[icode].operand[0].predicate (target, mode)) in expand_sync_fetch_operation()
6165 target = gen_reg_rtx (mode); in expand_sync_fetch_operation()
6167 if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode) in expand_sync_fetch_operation()
6168 val = convert_modes (mode, GET_MODE (val), val, 1); in expand_sync_fetch_operation()
6169 if (!insn_data[icode].operand[2].predicate (val, mode)) in expand_sync_fetch_operation()
6170 val = force_reg (mode, val); in expand_sync_fetch_operation()
6190 target = expand_simple_unop (mode, NOT, target, NULL_RTX, true); in expand_sync_fetch_operation()
6191 target = expand_simple_binop (mode, code, target, val, NULL_RTX, in expand_sync_fetch_operation()
6201 if (sync_compare_and_swap[mode] != CODE_FOR_nothing) in expand_sync_fetch_operation()
6203 rtx t0 = gen_reg_rtx (mode), t1; in expand_sync_fetch_operation()
6205 if (!target || !register_operand (target, mode)) in expand_sync_fetch_operation()
6206 target = gen_reg_rtx (mode); in expand_sync_fetch_operation()
6215 t1 = expand_simple_unop (mode, NOT, t1, NULL_RTX, true); in expand_sync_fetch_operation()
6218 t1 = expand_simple_binop (mode, code, t1, val, NULL_RTX, in expand_sync_fetch_operation()
6243 enum machine_mode mode = GET_MODE (mem); in expand_sync_lock_test_and_set() local
6248 icode = sync_lock_test_and_set[mode]; in expand_sync_lock_test_and_set()
6251 if (!target || !insn_data[icode].operand[0].predicate (target, mode)) in expand_sync_lock_test_and_set()
6252 target = gen_reg_rtx (mode); in expand_sync_lock_test_and_set()
6254 if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode) in expand_sync_lock_test_and_set()
6255 val = convert_modes (mode, GET_MODE (val), val, 1); in expand_sync_lock_test_and_set()
6256 if (!insn_data[icode].operand[2].predicate (val, mode)) in expand_sync_lock_test_and_set()
6257 val = force_reg (mode, val); in expand_sync_lock_test_and_set()
6268 if (sync_compare_and_swap[mode] != CODE_FOR_nothing) in expand_sync_lock_test_and_set()
6270 if (!target || !register_operand (target, mode)) in expand_sync_lock_test_and_set()
6271 target = gen_reg_rtx (mode); in expand_sync_lock_test_and_set()
6272 if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode) in expand_sync_lock_test_and_set()
6273 val = convert_modes (mode, GET_MODE (val), val, 1); in expand_sync_lock_test_and_set()