Commit ecee559f by Paul Brook Committed by Paul Brook

neon.md (neon_type): Move to arm.md.

2009-01-24  Paul Brook  <paul@codesourcery.com>

	gcc/
	* config/arm/neon.md (neon_type): Move to arm.md.
	(neon_mov<VSTRUCT>): Add neon_type attribute.
	* config/arm/arm.md (neon_type): Move to here.
	(conds): Add "unconditioal" and use as default for NEON insns.

	gcc/testsuite/
	* gcc.target/arm/neon-cond-1.c: New test.

From-SVN: r143594
parent 61ad0914
2009-01-24 Paul Brook <paul@codesourcery.com>
* config/arm/neon.md (neon_type): Move to arm.md.
(neon_mov<VSTRUCT>): Add neon_type attribute.
* config/arm/arm.md (neon_type): Move to here.
(conds): Add "unconditioal" and use as default for NEON insns.
2009-01-24 Ben Elliston <bje@au.ibm.com> 2009-01-24 Ben Elliston <bje@au.ibm.com>
* bitmap.h (BITMAP_FREE): Eliminate `implicit conversion from * bitmap.h (BITMAP_FREE): Eliminate `implicit conversion from
......
...@@ -760,7 +760,7 @@ arm*-*-eabi* | arm*-*-symbianelf* ) ...@@ -760,7 +760,7 @@ arm*-*-eabi* | arm*-*-symbianelf* )
tmake_file="arm/t-arm arm/t-arm-elf" tmake_file="arm/t-arm arm/t-arm-elf"
case ${target} in case ${target} in
arm*-*-eabi*) arm*-*-eabi*)
tm_file="$tm_file arm/eabi.h" tm_file="$tm_file arm/eabi.h arm/nocrt0.h"
tmake_file="${tmake_file} arm/t-bpabi" tmake_file="${tmake_file} arm/t-bpabi"
extra_options="${extra_options} arm/eabi.opt" extra_options="${extra_options} arm/eabi.opt"
;; ;;
......
...@@ -250,6 +250,75 @@ ...@@ -250,6 +250,75 @@
; initialized by arm_override_options() ; initialized by arm_override_options()
(define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched"))) (define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched")))
;; Classification of NEON instructions for scheduling purposes.
;; Do not set this attribute and the "type" attribute together in
;; any one instruction pattern.
(define_attr "neon_type"
"neon_int_1,\
neon_int_2,\
neon_int_3,\
neon_int_4,\
neon_int_5,\
neon_vqneg_vqabs,\
neon_vmov,\
neon_vaba,\
neon_vsma,\
neon_vaba_qqq,\
neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
neon_mul_qqq_8_16_32_ddd_32,\
neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar,\
neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
neon_mla_qqq_8_16,\
neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long,\
neon_mla_qqq_32_qqd_32_scalar,\
neon_mul_ddd_16_scalar_32_16_long_scalar,\
neon_mul_qqd_32_scalar,\
neon_mla_ddd_16_scalar_qdd_32_16_long_scalar,\
neon_shift_1,\
neon_shift_2,\
neon_shift_3,\
neon_vshl_ddd,\
neon_vqshl_vrshl_vqrshl_qqq,\
neon_vsra_vrsra,\
neon_fp_vadd_ddd_vabs_dd,\
neon_fp_vadd_qqq_vabs_qq,\
neon_fp_vsum,\
neon_fp_vmul_ddd,\
neon_fp_vmul_qqd,\
neon_fp_vmla_ddd,\
neon_fp_vmla_qqq,\
neon_fp_vmla_ddd_scalar,\
neon_fp_vmla_qqq_scalar,\
neon_fp_vrecps_vrsqrts_ddd,\
neon_fp_vrecps_vrsqrts_qqq,\
neon_bp_simple,\
neon_bp_2cycle,\
neon_bp_3cycle,\
neon_ldr,\
neon_str,\
neon_vld1_1_2_regs,\
neon_vld1_3_4_regs,\
neon_vld2_2_regs_vld1_vld2_all_lanes,\
neon_vld2_4_regs,\
neon_vld3_vld4,\
neon_vst1_1_2_regs_vst2_2_regs,\
neon_vst1_3_4_regs,\
neon_vst2_4_regs_vst3_vst4,\
neon_vst3_vst4,\
neon_vld1_vld2_lane,\
neon_vld3_vld4_lane,\
neon_vst1_vst2_lane,\
neon_vst3_vst4_lane,\
neon_vld3_vld4_all_lanes,\
neon_mcr,\
neon_mcr_2_mcrr,\
neon_mrc,\
neon_mrrc,\
neon_ldm_2,\
neon_stm_2,\
none"
(const_string "none"))
; condition codes: this one is used by final_prescan_insn to speed up ; condition codes: this one is used by final_prescan_insn to speed up
; conditionalizing instructions. It saves having to scan the rtl to see if ; conditionalizing instructions. It saves having to scan the rtl to see if
; it uses or alters the condition codes. ; it uses or alters the condition codes.
...@@ -267,13 +336,17 @@ ...@@ -267,13 +336,17 @@
; JUMP_CLOB is used when the condition cannot be represented by a single ; JUMP_CLOB is used when the condition cannot be represented by a single
; instruction (UNEQ and LTGT). These cannot be predicated. ; instruction (UNEQ and LTGT). These cannot be predicated.
; ;
; UNCONDITIONAL means the instions can not be conditionally executed.
;
; NOCOND means that the condition codes are neither altered nor affect the ; NOCOND means that the condition codes are neither altered nor affect the
; output of this insn ; output of this insn
(define_attr "conds" "use,set,clob,jump_clob,nocond" (define_attr "conds" "use,set,clob,jump_clob,unconditional,nocond"
(if_then_else (eq_attr "type" "call") (if_then_else (eq_attr "type" "call")
(const_string "clob") (const_string "clob")
(const_string "nocond"))) (if_then_else (eq_attr "neon_type" "none")
(const_string "nocond")
(const_string "unconditional"))))
; Predicable means that the insn can be conditionally executed based on ; Predicable means that the insn can be conditionally executed based on
; an automatically added predicate (additional patterns are generated by ; an automatically added predicate (additional patterns are generated by
......
...@@ -427,76 +427,7 @@ ...@@ -427,76 +427,7 @@
;; neon_type attribute definitions. ;; neon_type attribute definitions.
(define_attr "vqh_mnem" "vadd,vmin,vmax" (const_string "vadd")) (define_attr "vqh_mnem" "vadd,vmin,vmax" (const_string "vadd"))
;; Classification of NEON instructions for scheduling purposes. ;; Predicates used for setting neon_type
;; Do not set this attribute and the "type" attribute together in
;; any one instruction pattern.
(define_attr "neon_type"
"neon_int_1,\
neon_int_2,\
neon_int_3,\
neon_int_4,\
neon_int_5,\
neon_vqneg_vqabs,\
neon_vmov,\
neon_vaba,\
neon_vsma,\
neon_vaba_qqq,\
neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,\
neon_mul_qqq_8_16_32_ddd_32,\
neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar,\
neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,\
neon_mla_qqq_8_16,\
neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long,\
neon_mla_qqq_32_qqd_32_scalar,\
neon_mul_ddd_16_scalar_32_16_long_scalar,\
neon_mul_qqd_32_scalar,\
neon_mla_ddd_16_scalar_qdd_32_16_long_scalar,\
neon_shift_1,\
neon_shift_2,\
neon_shift_3,\
neon_vshl_ddd,\
neon_vqshl_vrshl_vqrshl_qqq,\
neon_vsra_vrsra,\
neon_fp_vadd_ddd_vabs_dd,\
neon_fp_vadd_qqq_vabs_qq,\
neon_fp_vsum,\
neon_fp_vmul_ddd,\
neon_fp_vmul_qqd,\
neon_fp_vmla_ddd,\
neon_fp_vmla_qqq,\
neon_fp_vmla_ddd_scalar,\
neon_fp_vmla_qqq_scalar,\
neon_fp_vrecps_vrsqrts_ddd,\
neon_fp_vrecps_vrsqrts_qqq,\
neon_bp_simple,\
neon_bp_2cycle,\
neon_bp_3cycle,\
neon_ldr,\
neon_str,\
neon_vld1_1_2_regs,\
neon_vld1_3_4_regs,\
neon_vld2_2_regs_vld1_vld2_all_lanes,\
neon_vld2_4_regs,\
neon_vld3_vld4,\
neon_vst1_1_2_regs_vst2_2_regs,\
neon_vst1_3_4_regs,\
neon_vst2_4_regs_vst3_vst4,\
neon_vst3_vst4,\
neon_vld1_vld2_lane,\
neon_vld3_vld4_lane,\
neon_vst1_vst2_lane,\
neon_vst3_vst4_lane,\
neon_vld3_vld4_all_lanes,\
neon_mcr,\
neon_mcr_2_mcrr,\
neon_mrc,\
neon_mrrc,\
neon_ldm_2,\
neon_stm_2,\
none"
(const_string "none"))
;; Predicates used for setting the above attribute.
(define_mode_attr Is_float_mode [(V8QI "false") (V16QI "false") (define_mode_attr Is_float_mode [(V8QI "false") (V16QI "false")
(V4HI "false") (V8HI "false") (V4HI "false") (V8HI "false")
...@@ -639,7 +570,8 @@ ...@@ -639,7 +570,8 @@
default: gcc_unreachable (); default: gcc_unreachable ();
} }
} }
[(set_attr "length" "<V_slen>,<V_slen>,<V_slen>")]) [(set_attr "neon_type" "neon_int_1,neon_stm_2,neon_ldm_2")
(set_attr "length" "<V_slen>,<V_slen>,<V_slen>")])
(define_split (define_split
[(set (match_operand:EI 0 "s_register_operand" "") [(set (match_operand:EI 0 "s_register_operand" "")
......
2009-01-24 Paul Brook <paul@codesourcery.com>
* gcc.target/arm/neon-cond-1.c: New test.
2008-01-23 Paolo Bonzini <bonzini@gnu.org> 2008-01-23 Paolo Bonzini <bonzini@gnu.org>
PR tree-optimization/38932 PR tree-optimization/38932
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment