aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJames Greenhalgh <james.greenhalgh@arm.com>2013-10-15 15:24:29 +0000
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>2013-10-15 15:24:29 +0000
commit20445ed6ad4d8de40319a3e69983879229b07c0e (patch)
treed007c4dca85671777b35aabf1debe8677c3e7546 /gcc
parent96937d47ac9a177ce5fb8d342acc5651a25dd979 (diff)
downloadgcc-20445ed6ad4d8de40319a3e69983879229b07c0e.zip
gcc-20445ed6ad4d8de40319a3e69983879229b07c0e.tar.gz
gcc-20445ed6ad4d8de40319a3e69983879229b07c0e.tar.bz2
[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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/arm/types.md626
2 files changed, 624 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 974c778..fd5c90e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2013-10-15 James Greenhalgh <james.greenhalgh@arm.com>
+
+ * config/arm/types.md: Add new types for Neon insns.
+
2013-10-15 Alexander Ivchenko <alexander.ivchenko@intel.com>
Maxim Kuznetsov <maxim.kuznetsov@intel.com>
Sergey Lega <sergey.s.lega@intel.com>
diff --git a/gcc/config/arm/types.md b/gcc/config/arm/types.md
index 7a96438..7cb8aa8 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"