|
3621 | 3621 | (define_expand "ashldi3"
|
3622 | 3622 | [(set (match_operand:DI 0 "s_register_operand")
|
3623 | 3623 | (ashift:DI (match_operand:DI 1 "s_register_operand")
|
3624 |
| - (match_operand:SI 2 "general_operand")))] |
| 3624 | + (match_operand:SI 2 "reg_or_int_operand")))] |
3625 | 3625 | "TARGET_32BIT"
|
3626 | 3626 | "
|
3627 |
| - if (TARGET_NEON) |
3628 |
| - { |
3629 |
| - /* Delay the decision whether to use NEON or core-regs until |
3630 |
| - register allocation. */ |
3631 |
| - emit_insn (gen_ashldi3_neon (operands[0], operands[1], operands[2])); |
3632 |
| - DONE; |
3633 |
| - } |
3634 |
| - else |
3635 |
| - { |
3636 |
| - /* Only the NEON case can handle in-memory shift counts. */ |
3637 |
| - if (!reg_or_int_operand (operands[2], SImode)) |
3638 |
| - operands[2] = force_reg (SImode, operands[2]); |
3639 |
| - } |
3640 |
| -
|
3641 |
| - if (!CONST_INT_P (operands[2]) && TARGET_REALLY_IWMMXT) |
3642 |
| - ; /* No special preparation statements; expand pattern as above. */ |
3643 |
| - else |
3644 |
| - { |
3645 |
| - rtx scratch1, scratch2; |
3646 |
| -
|
3647 |
| - /* Ideally we should use iwmmxt here if we could know that operands[1] |
3648 |
| - ends up already living in an iwmmxt register. Otherwise it's |
3649 |
| - cheaper to have the alternate code being generated than moving |
3650 |
| - values to iwmmxt regs and back. */ |
3651 |
| -
|
3652 |
| - /* Expand operation using core-registers. |
3653 |
| - 'FAIL' would achieve the same thing, but this is a bit smarter. */ |
3654 |
| - scratch1 = gen_reg_rtx (SImode); |
3655 |
| - scratch2 = gen_reg_rtx (SImode); |
3656 |
| - arm_emit_coreregs_64bit_shift (ASHIFT, operands[0], operands[1], |
3657 |
| - operands[2], scratch1, scratch2); |
3658 |
| - DONE; |
3659 |
| - } |
3660 |
| - " |
3661 |
| -) |
| 3627 | + arm_emit_coreregs_64bit_shift (ASHIFT, operands[0], operands[1], |
| 3628 | + operands[2], gen_reg_rtx (SImode), |
| 3629 | + gen_reg_rtx (SImode)); |
| 3630 | + DONE; |
| 3631 | +") |
3662 | 3632 |
|
3663 | 3633 | (define_expand "ashlsi3"
|
3664 | 3634 | [(set (match_operand:SI 0 "s_register_operand")
|
|
3681 | 3651 | (match_operand:SI 2 "reg_or_int_operand")))]
|
3682 | 3652 | "TARGET_32BIT"
|
3683 | 3653 | "
|
3684 |
| - if (TARGET_NEON) |
3685 |
| - { |
3686 |
| - /* Delay the decision whether to use NEON or core-regs until |
3687 |
| - register allocation. */ |
3688 |
| - emit_insn (gen_ashrdi3_neon (operands[0], operands[1], operands[2])); |
3689 |
| - DONE; |
3690 |
| - } |
3691 |
| -
|
3692 |
| - if (!CONST_INT_P (operands[2]) && TARGET_REALLY_IWMMXT) |
3693 |
| - ; /* No special preparation statements; expand pattern as above. */ |
3694 |
| - else |
3695 |
| - { |
3696 |
| - rtx scratch1, scratch2; |
3697 |
| -
|
3698 |
| - /* Ideally we should use iwmmxt here if we could know that operands[1] |
3699 |
| - ends up already living in an iwmmxt register. Otherwise it's |
3700 |
| - cheaper to have the alternate code being generated than moving |
3701 |
| - values to iwmmxt regs and back. */ |
3702 |
| -
|
3703 |
| - /* Expand operation using core-registers. |
3704 |
| - 'FAIL' would achieve the same thing, but this is a bit smarter. */ |
3705 |
| - scratch1 = gen_reg_rtx (SImode); |
3706 |
| - scratch2 = gen_reg_rtx (SImode); |
3707 |
| - arm_emit_coreregs_64bit_shift (ASHIFTRT, operands[0], operands[1], |
3708 |
| - operands[2], scratch1, scratch2); |
3709 |
| - DONE; |
3710 |
| - } |
3711 |
| - " |
3712 |
| -) |
| 3654 | + arm_emit_coreregs_64bit_shift (ASHIFTRT, operands[0], operands[1], |
| 3655 | + operands[2], gen_reg_rtx (SImode), |
| 3656 | + gen_reg_rtx (SImode)); |
| 3657 | + DONE; |
| 3658 | +") |
3713 | 3659 |
|
3714 | 3660 | (define_expand "ashrsi3"
|
3715 | 3661 | [(set (match_operand:SI 0 "s_register_operand")
|
|
3729 | 3675 | (match_operand:SI 2 "reg_or_int_operand")))]
|
3730 | 3676 | "TARGET_32BIT"
|
3731 | 3677 | "
|
3732 |
| - if (TARGET_NEON) |
3733 |
| - { |
3734 |
| - /* Delay the decision whether to use NEON or core-regs until |
3735 |
| - register allocation. */ |
3736 |
| - emit_insn (gen_lshrdi3_neon (operands[0], operands[1], operands[2])); |
3737 |
| - DONE; |
3738 |
| - } |
3739 |
| -
|
3740 |
| - if (!CONST_INT_P (operands[2]) && TARGET_REALLY_IWMMXT) |
3741 |
| - ; /* No special preparation statements; expand pattern as above. */ |
3742 |
| - else |
3743 |
| - { |
3744 |
| - rtx scratch1, scratch2; |
3745 |
| -
|
3746 |
| - /* Ideally we should use iwmmxt here if we could know that operands[1] |
3747 |
| - ends up already living in an iwmmxt register. Otherwise it's |
3748 |
| - cheaper to have the alternate code being generated than moving |
3749 |
| - values to iwmmxt regs and back. */ |
3750 |
| -
|
3751 |
| - /* Expand operation using core-registers. |
3752 |
| - 'FAIL' would achieve the same thing, but this is a bit smarter. */ |
3753 |
| - scratch1 = gen_reg_rtx (SImode); |
3754 |
| - scratch2 = gen_reg_rtx (SImode); |
3755 |
| - arm_emit_coreregs_64bit_shift (LSHIFTRT, operands[0], operands[1], |
3756 |
| - operands[2], scratch1, scratch2); |
3757 |
| - DONE; |
3758 |
| - } |
3759 |
| - " |
3760 |
| -) |
| 3678 | + arm_emit_coreregs_64bit_shift (LSHIFTRT, operands[0], operands[1], |
| 3679 | + operands[2], gen_reg_rtx (SImode), |
| 3680 | + gen_reg_rtx (SImode)); |
| 3681 | + DONE; |
| 3682 | +") |
3761 | 3683 |
|
3762 | 3684 | (define_expand "lshrsi3"
|
3763 | 3685 | [(set (match_operand:SI 0 "s_register_operand")
|
|
4782 | 4704 | ;; Zero and sign extension instructions.
|
4783 | 4705 |
|
4784 | 4706 | (define_insn "zero_extend<mode>di2"
|
4785 |
| - [(set (match_operand:DI 0 "s_register_operand" "=w,r,?r,w") |
| 4707 | + [(set (match_operand:DI 0 "s_register_operand" "=r,?r") |
4786 | 4708 | (zero_extend:DI (match_operand:QHSI 1 "<qhs_zextenddi_op>"
|
4787 | 4709 | "<qhs_zextenddi_cstr>")))]
|
4788 | 4710 | "TARGET_32BIT <qhs_zextenddi_cond>"
|
4789 | 4711 | "#"
|
4790 |
| - [(set_attr "length" "8,4,8,8") |
4791 |
| - (set_attr "arch" "neon_for_64bits,*,*,avoid_neon_for_64bits") |
| 4712 | + [(set_attr "length" "4,8") |
| 4713 | + (set_attr "arch" "*,*") |
4792 | 4714 | (set_attr "ce_count" "2")
|
4793 | 4715 | (set_attr "predicable" "yes")
|
4794 |
| - (set_attr "type" "multiple,mov_reg,multiple,multiple")] |
| 4716 | + (set_attr "type" "mov_reg,multiple")] |
4795 | 4717 | )
|
4796 | 4718 |
|
4797 | 4719 | (define_insn "extend<mode>di2"
|
4798 |
| - [(set (match_operand:DI 0 "s_register_operand" "=w,r,?r,?r,w") |
| 4720 | + [(set (match_operand:DI 0 "s_register_operand" "=r,?r,?r") |
4799 | 4721 | (sign_extend:DI (match_operand:QHSI 1 "<qhs_extenddi_op>"
|
4800 | 4722 | "<qhs_extenddi_cstr>")))]
|
4801 | 4723 | "TARGET_32BIT <qhs_sextenddi_cond>"
|
4802 | 4724 | "#"
|
4803 |
| - [(set_attr "length" "8,4,8,8,8") |
| 4725 | + [(set_attr "length" "4,8,8") |
4804 | 4726 | (set_attr "ce_count" "2")
|
4805 | 4727 | (set_attr "shift" "1")
|
4806 | 4728 | (set_attr "predicable" "yes")
|
4807 |
| - (set_attr "arch" "neon_for_64bits,*,a,t,avoid_neon_for_64bits") |
4808 |
| - (set_attr "type" "multiple,mov_reg,multiple,multiple,multiple")] |
| 4729 | + (set_attr "arch" "*,a,t") |
| 4730 | + (set_attr "type" "mov_reg,multiple,multiple")] |
4809 | 4731 | )
|
4810 | 4732 |
|
4811 | 4733 | ;; Splits for all extensions to DImode
|
|
0 commit comments