From 20445ed6ad4d8de40319a3e69983879229b07c0e Mon Sep 17 00:00:00 2001 From: James Greenhalgh Date: Tue, 15 Oct 2013 15:24:29 +0000 Subject: [PATCH] [ARM] [Neon Types 1/10] Add new types to describe Neon insns. gcc/ * config/arm/types.md: Add new types for Neon insns. From-SVN: r203611 --- gcc/ChangeLog | 4 + gcc/config/arm/types.md | 626 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 624 insertions(+), 6 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 974c778fc9f..fd5c90e14e6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2013-10-15 James Greenhalgh + + * config/arm/types.md: Add new types for Neon insns. + 2013-10-15 Alexander Ivchenko Maxim Kuznetsov Sergey Lega diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md index 7a96438fd48..7cb8aa87a26 100644 --- a/gcc/config/arm/types.md +++ b/gcc/config/arm/types.md @@ -247,7 +247,6 @@ ; neon_int_4 ; neon_int_5 ; neon_ldm_2 -; neon_ldr ; neon_mcr_2_mcrr ; neon_mcr ; neon_mla_ddd_16_scalar_qdd_32_16_long_scalar @@ -266,7 +265,6 @@ ; neon_shift_2 ; neon_shift_3 ; neon_stm_2 -; neon_str ; neon_vaba_qqq ; neon_vaba ; neon_vld1_1_2_regs @@ -289,6 +287,299 @@ ; neon_vst2_4_regs_vst3_vst4 ; neon_vst3_vst4_lane ; neon_vst3_vst4 +; +; neon_add +; neon_add_q +; neon_add_widen +; neon_add_long +; neon_qadd +; neon_qadd_q +; neon_add_halve +; neon_add_halve_q +; neon_add_halve_narrow_q +; neon_sub +; neon_sub_q +; neon_sub_widen +; neon_sub_long +; neon_qsub +; neon_qsub_q +; neon_sub_halve +; neon_sub_halve_q +; neon_sub_halve_narrow_q +; neon_abs +; neon_abs_q +; neon_neg +; neon_neg_q +; neon_qneg +; neon_qneg_q +; neon_qabs +; neon_qabs_q +; neon_abd +; neon_abd_q +; neon_abd_long +; neon_minmax +; neon_minmax_q +; neon_compare +; neon_compare_q +; neon_compare_zero +; neon_compare_zero_q +; neon_arith_acc +; neon_arith_acc_q +; neon_reduc_add +; neon_reduc_add_q +; neon_reduc_add_long +; neon_reduc_add_acc +; neon_reduc_add_acc_q +; neon_reduc_minmax +; neon_reduc_minmax_q +; neon_logic +; neon_logic_q +; neon_tst +; neon_tst_q +; neon_shift_imm +; neon_shift_imm_q +; neon_shift_imm_narrow_q +; neon_shift_imm_long +; neon_shift_reg +; neon_shift_reg_q +; neon_shift_acc +; neon_shift_acc_q +; neon_sat_shift_imm +; neon_sat_shift_imm_q +; neon_sat_shift_imm_narrow_q +; neon_sat_shift_reg +; neon_sat_shift_reg_q +; neon_ins +; neon_ins_q +; neon_move +; neon_move_q +; neon_move_narrow_q +; neon_permute +; neon_permute_q +; neon_zip +; neon_zip_q +; neon_tbl1 +; neon_tbl1_q +; neon_tbl2 +; neon_tbl2_q +; neon_tbl3 +; neon_tbl3_q +; neon_tbl4 +; neon_tbl4_q +; neon_bsl +; neon_bsl_q +; neon_cls +; neon_cls_q +; neon_cnt +; neon_cnt_q +; neon_ext +; neon_ext_q +; neon_rbit +; neon_rbit_q +; neon_rev +; neon_rev_q +; neon_mul_b +; neon_mul_b_q +; neon_mul_h +; neon_mul_h_q +; neon_mul_s +; neon_mul_s_q +; neon_mul_b_long +; neon_mul_h_long +; neon_mul_s_long +; neon_mul_h_scalar +; neon_mul_h_scalar_q +; neon_mul_s_scalar +; neon_mul_s_scalar_q +; neon_mul_h_scalar_long +; neon_mul_s_scalar_long +; neon_sat_mul_b +; neon_sat_mul_b_q +; neon_sat_mul_h +; neon_sat_mul_h_q +; neon_sat_mul_s +; neon_sat_mul_s_q +; neon_sat_mul_b_long +; neon_sat_mul_h_long +; neon_sat_mul_s_long +; neon_sat_mul_h_scalar +; neon_sat_mul_h_scalar_q +; neon_sat_mul_s_scalar +; neon_sat_mul_s_scalar_q +; neon_sat_mul_h_scalar_long +; neon_sat_mul_s_scalar_long +; neon_mla_b +; neon_mla_b_q +; neon_mla_h +; neon_mla_h_q +; neon_mla_s +; neon_mla_s_q +; neon_mla_b_long +; neon_mla_h_long +; neon_mla_s_long +; neon_mla_h_scalar +; neon_mla_h_scalar_q +; neon_mla_s_scalar +; neon_mla_s_scalar_q +; neon_mla_h_scalar_long +; neon_mla_s_scalar_long +; neon_sat_mla_b_long +; neon_sat_mla_h_long +; neon_sat_mla_s_long +; neon_sat_mla_h_scalar_long +; neon_sat_mla_s_scalar_long +; neon_to_gp +; neon_to_gp_q +; neon_from_gp +; neon_from_gp_q +; neon_ldr +; neon_load1_1reg +; neon_load1_1reg_q +; neon_load1_2reg +; neon_load1_2reg_q +; neon_load1_3reg +; neon_load1_3reg_q +; neon_load1_4reg +; neon_load1_4reg_q +; neon_load1_all_lanes +; neon_load1_all_lanes_q +; neon_load1_one_lane +; neon_load1_one_lane_q +; neon_load2_2reg +; neon_load2_2reg_q +; neon_load2_4reg +; neon_load2_4reg_q +; neon_load2_all_lanes +; neon_load2_all_lanes_q +; neon_load2_one_lane +; neon_load2_one_lane_q +; neon_load3_3reg +; neon_load3_3reg_q +; neon_load3_all_lanes +; neon_load3_all_lanes_q +; neon_load3_one_lane +; neon_load3_one_lane_q +; neon_load4_4reg +; neon_load4_4reg_q +; neon_load4_all_lanes +; neon_load4_all_lanes_q +; neon_load4_one_lane +; neon_load4_one_lane_q +; neon_str +; neon_store1_1reg +; neon_store1_1reg_q +; neon_store1_2reg +; neon_store1_2reg_q +; neon_store1_3reg +; neon_store1_3reg_q +; neon_store1_4reg +; neon_store1_4reg_q +; neon_store1_one_lane +; neon_store1_one_lane_q +; neon_store2_2reg +; neon_store2_2reg_q +; neon_store2_4reg +; neon_store2_4reg_q +; neon_store2_one_lane +; neon_store2_one_lane_q +; neon_store3_3reg +; neon_store3_3reg_q +; neon_store3_one_lane +; neon_store3_one_lane_q +; neon_store4_4reg +; neon_store4_4reg_q +; neon_store4_one_lane +; neon_store4_one_lane_q +; neon_fp_abs_s +; neon_fp_abs_s_q +; neon_fp_abs_d +; neon_fp_abs_d_q +; neon_fp_neg_s +; neon_fp_neg_s_q +; neon_fp_neg_d +; neon_fp_neg_d_q +; neon_fp_abd_s +; neon_fp_abd_s_q +; neon_fp_abd_d +; neon_fp_abd_d_q +; neon_fp_addsub_s +; neon_fp_addsub_s_q +; neon_fp_addsub_d +; neon_fp_addsub_d_q +; neon_fp_compare_s +; neon_fp_compare_s_q +; neon_fp_compare_d +; neon_fp_compare_d_q +; neon_fp_minmax_s +; neon_fp_minmax_s_q +; neon_fp_minmax_d +; neon_fp_minmax_d_q +; neon_fp_reduc_add_s +; neon_fp_reduc_add_s_q +; neon_fp_reduc_add_d +; neon_fp_reduc_add_d_q +; neon_fp_reduc_minmax_s +; neon_fp_reduc_minmax_s_q +; neon_fp_reduc_minmax_d +; neon_fp_reduc_minmax_d_q +; neon_fp_cvt_narrow_s_q +; neon_fp_cvt_narrow_d_q +; neon_fp_cvt_widen_h +; neon_fp_cvt_widen_s +; neon_fp_to_int_s +; neon_fp_to_int_s_q +; neon_fp_to_int_d +; neon_fp_to_int_d_q +; neon_int_to_fp_s +; neon_int_to_fp_s_q +; neon_int_to_fp_d +; neon_int_to_fp_d_q +; neon_fp_round_s +; neon_fp_round_s_q +; neon_fp_round_d +; neon_fp_round_d_q +; neon_fp_recpe_s +; neon_fp_recpe_s_q +; neon_fp_recpe_d +; neon_fp_recpe_d_q +; neon_fp_recps_s +; neon_fp_recps_s_q +; neon_fp_recps_d +; neon_fp_recps_d_q +; neon_fp_recpx_s +; neon_fp_recpx_s_q +; neon_fp_recpx_d +; neon_fp_recpx_d_q +; neon_fp_rsqrte_s +; neon_fp_rsqrte_s_q +; neon_fp_rsqrte_d +; neon_fp_rsqrte_d_q +; neon_fp_rsqrts_s +; neon_fp_rsqrts_s_q +; neon_fp_rsqrts_d +; neon_fp_rsqrts_d_q +; neon_fp_mul_s +; neon_fp_mul_s_q +; neon_fp_mul_s_scalar +; neon_fp_mul_s_scalar_q +; neon_fp_mul_d +; neon_fp_mul_d_q +; neon_fp_mul_d_scalar_q +; neon_fp_mla_s +; neon_fp_mla_s_q +; neon_fp_mla_s_scalar +; neon_fp_mla_s_scalar_q +; neon_fp_mla_d +; neon_fp_mla_d_q +; neon_fp_mla_d_scalar_q +; neon_fp_sqrt_s +; neon_fp_sqrt_s_q +; neon_fp_sqrt_d +; neon_fp_sqrt_d_q +; neon_fp_div_s +; neon_fp_div_s_q +; neon_fp_div_d +; neon_fp_div_d_q (define_attr "type" "adc_imm,\ @@ -501,7 +792,6 @@ neon_int_4,\ neon_int_5,\ neon_ldm_2,\ - neon_ldr,\ neon_mcr_2_mcrr,\ neon_mcr,\ neon_mla_ddd_16_scalar_qdd_32_16_long_scalar,\ @@ -520,7 +810,6 @@ neon_shift_2,\ neon_shift_3,\ neon_stm_2,\ - neon_str,\ neon_vaba_qqq,\ neon_vaba,\ neon_vld1_1_2_regs,\ @@ -542,8 +831,333 @@ neon_vst1_vst2_lane,\ neon_vst2_4_regs_vst3_vst4,\ neon_vst3_vst4_lane,\ - neon_vst3_vst4" - (const_string "untyped")) + neon_vst3_vst4,\ +\ + neon_add,\ + neon_add_q,\ + neon_add_widen,\ + neon_add_long,\ + neon_qadd,\ + neon_qadd_q,\ + neon_add_halve,\ + neon_add_halve_q,\ + neon_add_halve_narrow_q,\ +\ + neon_sub,\ + neon_sub_q,\ + neon_sub_widen,\ + neon_sub_long,\ + neon_qsub,\ + neon_qsub_q,\ + neon_sub_halve,\ + neon_sub_halve_q,\ + neon_sub_halve_narrow_q,\ +\ + neon_abs,\ + neon_abs_q,\ + neon_neg,\ + neon_neg_q,\ + neon_qneg,\ + neon_qneg_q,\ + neon_qabs,\ + neon_qabs_q,\ + neon_abd,\ + neon_abd_q,\ + neon_abd_long,\ +\ + neon_minmax,\ + neon_minmax_q,\ + neon_compare,\ + neon_compare_q,\ + neon_compare_zero,\ + neon_compare_zero_q,\ +\ + neon_arith_acc,\ + neon_arith_acc_q,\ + neon_reduc_add,\ + neon_reduc_add_q,\ + neon_reduc_add_long,\ + neon_reduc_add_acc,\ + neon_reduc_add_acc_q,\ + neon_reduc_minmax,\ + neon_reduc_minmax_q,\ + neon_logic,\ + neon_logic_q,\ + neon_tst,\ + neon_tst_q,\ +\ + neon_shift_imm,\ + neon_shift_imm_q,\ + neon_shift_imm_narrow_q,\ + neon_shift_imm_long,\ + neon_shift_reg,\ + neon_shift_reg_q,\ + neon_shift_acc,\ + neon_shift_acc_q,\ + neon_sat_shift_imm,\ + neon_sat_shift_imm_q,\ + neon_sat_shift_imm_narrow_q,\ + neon_sat_shift_reg,\ + neon_sat_shift_reg_q,\ +\ + neon_ins,\ + neon_ins_q,\ + neon_move,\ + neon_move_q,\ + neon_move_narrow_q,\ + neon_permute,\ + neon_permute_q,\ + neon_zip,\ + neon_zip_q,\ + neon_tbl1,\ + neon_tbl1_q,\ + neon_tbl2,\ + neon_tbl2_q,\ + neon_tbl3,\ + neon_tbl3_q,\ + neon_tbl4,\ + neon_tbl4_q,\ +\ + neon_bsl,\ + neon_bsl_q,\ + neon_cls,\ + neon_cls_q,\ + neon_cnt,\ + neon_cnt_q,\ + neon_dup,\ + neon_dup_q,\ + neon_ext,\ + neon_ext_q,\ + neon_rbit,\ + neon_rbit_q,\ + neon_rev,\ + neon_rev_q,\ +\ + neon_mul_b,\ + neon_mul_b_q,\ + neon_mul_h,\ + neon_mul_h_q,\ + neon_mul_s,\ + neon_mul_s_q,\ + neon_mul_b_long,\ + neon_mul_h_long,\ + neon_mul_s_long,\ + neon_mul_h_scalar,\ + neon_mul_h_scalar_q,\ + neon_mul_s_scalar,\ + neon_mul_s_scalar_q,\ + neon_mul_h_scalar_long,\ + neon_mul_s_scalar_long,\ +\ + neon_sat_mul_b,\ + neon_sat_mul_b_q,\ + neon_sat_mul_h,\ + neon_sat_mul_h_q,\ + neon_sat_mul_s,\ + neon_sat_mul_s_q,\ + neon_sat_mul_b_long,\ + neon_sat_mul_h_long,\ + neon_sat_mul_s_long,\ + neon_sat_mul_h_scalar,\ + neon_sat_mul_h_scalar_q,\ + neon_sat_mul_s_scalar,\ + neon_sat_mul_s_scalar_q,\ + neon_sat_mul_h_scalar_long,\ + neon_sat_mul_s_scalar_long,\ +\ + neon_mla_b,\ + neon_mla_b_q,\ + neon_mla_h,\ + neon_mla_h_q,\ + neon_mla_s,\ + neon_mla_s_q,\ + neon_mla_b_long,\ + neon_mla_h_long,\ + neon_mla_s_long,\ + neon_mla_h_scalar,\ + neon_mla_h_scalar_q,\ + neon_mla_s_scalar,\ + neon_mla_s_scalar_q,\ + neon_mla_h_scalar_long,\ + neon_mla_s_scalar_long,\ +\ + neon_sat_mla_b_long,\ + neon_sat_mla_h_long,\ + neon_sat_mla_s_long,\ + neon_sat_mla_h_scalar_long,\ + neon_sat_mla_s_scalar_long,\ +\ + neon_to_gp,\ + neon_to_gp_q,\ + neon_from_gp,\ + neon_from_gp_q,\ +\ + neon_ldr,\ + neon_load1_1reg,\ + neon_load1_1reg_q,\ + neon_load1_2reg,\ + neon_load1_2reg_q,\ + neon_load1_3reg,\ + neon_load1_3reg_q,\ + neon_load1_4reg,\ + neon_load1_4reg_q,\ + neon_load1_all_lanes,\ + neon_load1_all_lanes_q,\ + neon_load1_one_lane,\ + neon_load1_one_lane_q,\ +\ + neon_load2_2reg,\ + neon_load2_2reg_q,\ + neon_load2_4reg,\ + neon_load2_4reg_q,\ + neon_load2_all_lanes,\ + neon_load2_all_lanes_q,\ + neon_load2_one_lane,\ + neon_load2_one_lane_q,\ +\ + neon_load3_3reg,\ + neon_load3_3reg_q,\ + neon_load3_all_lanes,\ + neon_load3_all_lanes_q,\ + neon_load3_one_lane,\ + neon_load3_one_lane_q,\ +\ + neon_load4_4reg,\ + neon_load4_4reg_q,\ + neon_load4_all_lanes,\ + neon_load4_all_lanes_q,\ + neon_load4_one_lane,\ + neon_load4_one_lane_q,\ +\ + neon_str,\ + neon_store1_1reg,\ + neon_store1_1reg_q,\ + neon_store1_2reg,\ + neon_store1_2reg_q,\ + neon_store1_3reg,\ + neon_store1_3reg_q,\ + neon_store1_4reg,\ + neon_store1_4reg_q,\ + neon_store1_one_lane,\ + neon_store1_one_lane_q,\ +\ + neon_store2_2reg,\ + neon_store2_2reg_q,\ + neon_store2_4reg,\ + neon_store2_4reg_q,\ + neon_store2_one_lane,\ + neon_store2_one_lane_q,\ +\ + neon_store3_3reg,\ + neon_store3_3reg_q,\ + neon_store3_one_lane,\ + neon_store3_one_lane_q,\ +\ + neon_store4_4reg,\ + neon_store4_4reg_q,\ + neon_store4_one_lane,\ + neon_store4_one_lane_q,\ +\ + neon_fp_abs_s,\ + neon_fp_abs_s_q,\ + neon_fp_abs_d,\ + neon_fp_abs_d_q,\ + neon_fp_neg_s,\ + neon_fp_neg_s_q,\ + neon_fp_neg_d,\ + neon_fp_neg_d_q,\ +\ + neon_fp_abd_s,\ + neon_fp_abd_s_q,\ + neon_fp_abd_d,\ + neon_fp_abd_d_q,\ + neon_fp_addsub_s,\ + neon_fp_addsub_s_q,\ + neon_fp_addsub_d,\ + neon_fp_addsub_d_q,\ + neon_fp_compare_s,\ + neon_fp_compare_s_q,\ + neon_fp_compare_d,\ + neon_fp_compare_d_q,\ + neon_fp_minmax_s,\ + neon_fp_minmax_s_q,\ + neon_fp_minmax_d,\ + neon_fp_minmax_d_q,\ +\ + neon_fp_reduc_add_s,\ + neon_fp_reduc_add_s_q,\ + neon_fp_reduc_add_d,\ + neon_fp_reduc_add_d_q,\ + neon_fp_reduc_minmax_s,\ + neon_fp_reduc_minmax_s_q,\ + neon_fp_reduc_minmax_d,\ + neon_fp_reduc_minmax_d_q,\ +\ + neon_fp_cvt_narrow_s_q,\ + neon_fp_cvt_narrow_d_q,\ + neon_fp_cvt_widen_h,\ + neon_fp_cvt_widen_s,\ +\ + neon_fp_to_int_s,\ + neon_fp_to_int_s_q,\ + neon_fp_to_int_d,\ + neon_fp_to_int_d_q,\ + neon_int_to_fp_s,\ + neon_int_to_fp_s_q,\ + neon_int_to_fp_d,\ + neon_int_to_fp_d_q,\ + neon_fp_round_s,\ + neon_fp_round_s_q,\ + neon_fp_round_d,\ + neon_fp_round_d_q,\ +\ + neon_fp_recpe_s,\ + neon_fp_recpe_s_q,\ + neon_fp_recpe_d,\ + neon_fp_recpe_d_q,\ + neon_fp_recps_s,\ + neon_fp_recps_s_q,\ + neon_fp_recps_d,\ + neon_fp_recps_d_q,\ + neon_fp_recpx_s,\ + neon_fp_recpx_s_q,\ + neon_fp_recpx_d,\ + neon_fp_recpx_d_q,\ +\ + neon_fp_rsqrte_s,\ + neon_fp_rsqrte_s_q,\ + neon_fp_rsqrte_d,\ + neon_fp_rsqrte_d_q,\ + neon_fp_rsqrts_s,\ + neon_fp_rsqrts_s_q,\ + neon_fp_rsqrts_d,\ + neon_fp_rsqrts_d_q,\ +\ + neon_fp_mul_s,\ + neon_fp_mul_s_q,\ + neon_fp_mul_s_scalar,\ + neon_fp_mul_s_scalar_q,\ + neon_fp_mul_d,\ + neon_fp_mul_d_q,\ + neon_fp_mul_d_scalar_q,\ +\ + neon_fp_mla_s,\ + neon_fp_mla_s_q,\ + neon_fp_mla_s_scalar,\ + neon_fp_mla_s_scalar_q,\ + neon_fp_mla_d,\ + neon_fp_mla_d_q,\ + neon_fp_mla_d_scalar_q,\ +\ + neon_fp_sqrt_s,\ + neon_fp_sqrt_s_q,\ + neon_fp_sqrt_d,\ + neon_fp_sqrt_d_q,\ + neon_fp_div_s,\ + neon_fp_div_s_q,\ + neon_fp_div_d,\ + neon_fp_div_d_q" + (const_string "untyped")) ; Is this an (integer side) multiply with a 32-bit (or smaller) result? (define_attr "mul32" "no,yes" -- 2.30.2