[ARM] [1/10] Add new types to describe Neon insns.

James Greenhalgh james.greenhalgh@arm.com
Tue Oct 15 11:24:00 GMT 2013


Hi,

This patch updates all the types used by the "types" attribute
to describe neon instructions.

These have, in the past, been designed to support modelling the
Cortex-A8 pipeline. We can split these types, and use them to better
model other pipelines.

This patch adds the new types we plan to use to the type attribute.
These are not a trivial split of existing instructions, but
the table below shows the easiest way to map between them.

OLD
   NEW

neon_int_1
   neon_logic, neon_logic_q,
   neon_bsl, neon_cls, neon_cnt,
   neon_add, neon_add_q
neon_int_2
   neon_add_widen, neon_sub_widen,
   neon_sub, neon_sub_q
neon_int_3
   neon_neg, neon_neg_q,
   neon_reduc_add, neon_reduc_add_q,
   neon_reduc_add_long,
   neon_add_long, neon_sub_long
neon_int_4
   neon_abs, neon_abs_q,
   neon_compare_zero, neon_compare_zero_q,
   neon_add_halve_narrow_q,
   neon_sub_halve_narrow_q,
   neon_add_halve, neon_add_halve_q,
   neon_qadd, neon_qadd_q,
   neon_tst, neon_tst_q
neon_int_5
   neon_abd_long, neon_sub_halve, neon_sub_halve_q,
   neon_qsub, neon_qsub_q,
   neon_abd, neon_abd_q,
   neon_compare, neon_compare_q,
   neon_minmax, neon_minmax_q, neon_reduc_minmax,
   neon_reduc_minmax_q
neon_vqneg_vqabs
   neon_qneg, neon_qneg_q, neon_qabs, neon_qabs_q
neon_vmov
   neon_move, neon_move_q
neon_bit_ops_q
   neon_bsl_q, neon_cls_q, neon_cnt_q
neon_vaba
   neon_arith_acc, neon_reduc_add_acc
neon_vaba_qqq
   neon_arith_acc_q
neon_shift_1
   neon_shift_imm, neon_shift_imm_q,
   neon_shift_imm_long, neon_shift_imm_narrow_q,
   neon_shift_reg
neon_shift_2
   neon_sat_shift_imm, neon_sat_shift_imm_q,
   neon_sat_shift_imm_narrow_q,
   neon_sat_shift_reg
neon_shift_3
   neon_shift_reg_q
neon_vqshl_vrshl_vqrshl_qqq
   neon_sat_shift_reg_q
neon_vsra_vrsra
   neon_shift_acc, neon_shift_acc_q
neon_mul_ddd_8_16_qdd_16_8_long_32_16_long
   neon_mul_b, neon_mul_h,
   neon_mul_b_long, neon_mul_h_long,
   neon_sat_mul_b, neon_sat_mul_h,
   neon_sat_mul_b_long, neon_sat_mul_h_long
neon_mul_qqq_8_16_32_ddd_32
   neon_mul_b_q, neon_mul_h_q,
   neon_sat_mul_b_q, neon_sat_mul_h_q
neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar
   neon_mul_s, neon_mul_s_long,
   neon_sat_mul_s, neon_sat_mul_s_long,
   neon_mul_h_scalar_q, neon_sat_mul_h_scalar_q,
   neon_mul_s_scalar, neon_sat_mul_s_scalar,
   neon_mul_s_scalar_long,
   neon_sat_mul_s_scalar_long
neon_mla_ddd_8_16_qdd_16_8_long_32_16_long
   neon_mla_b, neon_mla_h,
   neon_mla_b_long, neon_mla_h_long,
   neon_sat_mla_b_long, neon_sat_mla_h_long,
   neon_sat_mla_h_scalar_long
neon_mla_qqq_8_16
   neon_mla_b_q, neon_mla_h_q
neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long
   neon_mla_s, neon_mla_s_long,
   neon_sat_mla_s_long,
   neon_mla_h_scalar_q, neon_mla_s_scalar,
   neon_mla_s_scalar_long,
   neon_sat_mla_s_scalar_long
neon_mla_qqq_32_qqd_32_scalar
   neon_mla_s_q, neon_mla_s_scalar_q
neon_mul_ddd_16_scalar_32_16_long_scalar
   neon_mul_h_scalar, neon_sat_mul_h_scalar,
   neon_mul_h_scalar_long,
   neon_sat_mul_h_scalar_long
neon_mul_qqd_32_scalar
   neon_mul_s_q, neon_sat_mul_s_q,
   neon_mul_s_scalar_q
neon_mla_ddd_16_scalar_qdd_32_16_long_scalar
   neon_mla_h_scalar, neon_mla_h_scalar_long
neon_fp_vadd_ddd_vabs_dd
   neon_fp_abd_s, neon_fp_abs_s, neon_fp_neg_s,
   neon_fp_addsub_s, neon_fp_compare_s,
   neon_fp_minmax_s, neon_fp_mul_s,
   neon_fp_recpe_s, neon_fp_rsqrte_s,
   neon_fp_to_int_s, neon_int_to_fp_s
neon_fp_vadd_qqq_vabs_qq
   neon_fp_abd_s_q, neon_fp_abs_s_q,
   neon_fp_neg_s_q,
   neon_fp_addsub_s_q, neon_fp_compare_s_q,
   neon_fp_minmax_s_q, neon_fp_mul_s_q,
   neon_fp_recpe_s_q, neon_fp_rsqrte_s_q,
   neon_fp_to_int_s_q, neon_int_to_fp_s_q
neon_fp_vsum
   neon_fp_reduc_add_s, neon_fp_reduc_minmax_s,
   neon_fp_reduc_add_s_q, neon_fp_reduc_minmax_s_q
neon_fp_vmul_ddd
   neon_fp_mul_s_scalar
neon_fp_vmul_qqd
   neon_fp_mul_s_scalar_q
neon_fp_vmla_ddd
   neon_fp_mla_s
neon_fp_vmla_qqq
   neon_fp_mla_s_q
neon_fp_vmla_ddd_scalar
   neon_fp_mla_s_scalar
neon_fp_vmla_qqq_scalar
   neon_fp_mla_s_scalar_q
neon_fp_vrecps_vrsqrts_ddd
   neon_fp_recps_s, neon_fp_rsqrts_s
neon_fp_vrecps_vrsqrts_qqq
   neon_fp_recps_s_q, neon_fp_rsqrts_s_q
neon_bp_simple
   neon_move_narrow_q, neon_dup,
   neon_dup_q, neon_permute, neon_zip,
   neon_ext, neon_rev, neon_rev_q
neon_bp_2cycle
   neon_permute_q, neon_ext_q, neon_tbl1, neon_tbl2
neon_bp_3cycle
   neon_zip_q, neon_tbl3, neon_tbl4
neon_ldr
   neon_ldr
neon_str
   neon_str
neon_vld1_1_2_regs
   neon_load1_1reg, neon_load1_1reg_q,
   neon_load1_2reg, neon_load1_2reg_q,
   neon_load2_2reg, neon_load2_2reg_q
neon_vld1_3_4_regs
   neon_load1_3reg, neon_load1_3reg_q,
   neon_load1_4reg, neon_load1_4reg_q
neon_vld2_2_regs_vld1_vld2_all_lanes
   neon_load1_all_lanes, neon_load1_all_lanes_q,
   neon_load2_all_lanes, neon_load2_all_lanes_q
   (const_string
neon_vld2_4_regs
   neon_load3_all_lanes, neon_load3_all_lanes_q,
   neon_load4_all_lanes, neon_load4_all_lanes_q,
   neon_load2_4reg, neon_load2_4reg_q
neon_vld3_vld4
   neon_load3_3reg, neon_load3_3reg_q,
   neon_load4_4reg, neon_load4_4reg_q
neon_vld1_vld2_lane
   f_loads, f_loadd, f_stores, f_stored,
   neon_load1_one_lane, neon_load1_one_lane_q,
   neon_load2_one_lane, neon_load2_one_lane_q
neon_vld3_vld4_lane
   neon_load3_one_lane, neon_load3_one_lane_q,
   neon_load4_one_lane, neon_load4_one_lane_q
neon_vst1_1_2_regs_vst2_2_regs
   neon_store1_1reg, neon_store1_1reg_q,
   neon_store1_2reg, neon_store1_2reg_q,
   neon_store2_2reg, neon_store2_2reg_q
neon_vst1_3_4_regs
   neon_store1_3reg, neon_store1_3reg_q,
   neon_store1_4reg, neon_store1_4reg_q
neon_vst2_4_regs_vst3_vst4
   neon_store2_4reg, neon_store2_4reg_q,
   neon_store3_3reg, neon_store3_3reg_q,
   neon_store4_4reg, neon_store4_4reg_q
neon_vst1_vst2_lane
   neon_store1_one_lane, neon_store1_one_lane_q,
   neon_store2_one_lane, neon_store2_one_lane_q
neon_vst3_vst4_lane
   neon_store3_one_lane, neon_store3_one_lane_q,
   neon_store4_one_lane, neon_store4_one_lane_q
neon_mcr
   neon_from_gp, f_mcr
neon_mcr_2_mcrr
   neon_from_gp_q, f_mcrr
neon_mrc
   neon_to_gp, f_mrc
neon_mrrc
   neon_to_gp_q, f_mrrc

Bootstrapped in series, and sanity checked.

Thanks,
James

---
gcc

2013-10-15  James Greenhalgh  <james.greenhalgh@arm.com>

	* config/arm/types.md: Add new types for Neon insns.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ARM-1-10-Add-new-types-to-describe-Neon-insns.patch
Type: text/x-patch
Size: 13554 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20131015/f27f05b0/attachment.bin>


More information about the Gcc-patches mailing list