summaryrefslogtreecommitdiff
path: root/gcc/config/c6x/c6x-sched.md
diff options
context:
space:
mode:
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-09-02 17:53:54 +0000
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>2011-09-02 17:53:54 +0000
commit87ded6872697a5b3b114b23be7b41cac398df201 (patch)
treec86b8a712bb7f6e6f92e28398c0e34fa6d44b3c4 /gcc/config/c6x/c6x-sched.md
parent01590c6f02af5de7844c7962b367fa7ae57fab30 (diff)
downloadgcc-87ded6872697a5b3b114b23be7b41cac398df201.tar.gz
* config/c6x/c6x.md (collapse-ndfa, no-comb-vect): New
automata_options. (d1, l1, s1, m1, d2, l2, s2, m2): Changed to define_query_cpu_unit. (l1w, s1w, l2w, s2w): Define in the main automaton. (fps1, fpl1, adddps1, adddpl1, fps2, fpl2, adddps2, adddpl2): New units. * config/c6x/c6x.c (c6x_sched_insn_info): Add unit_mask member. (c6x_unit_names): Add the new units. (c6x_unit_codes): New static array. (UNIT_QID_D1, UNIT_QID_L1, UNIT_QID_S1, UNIT_QID_M1, UNIT_QID_FPS1, UNIT_QID_FPL1, UNIT_QID_ADDDPS1, UNIT_QID_ADDDPL1, UNIT_QID_SIDE_OFFSET): New macros. (RESERVATION_S2): Adjust value. (c6x_option_override): Compute c6x_unit_codes. (assign_reservations): Take the unit_mask of the last instruction into account. Detect floating point reservations by looking for the new units. Don't assign reservations if the field is already nonzero. (struct c6x_sched_context): Add member prev_cycle_state_ctx. (init_sched_state): Initialize it. (c6x_clear_sched_context): Free it. (insn_set_clock): Clear reservation. (prev_cycle_state): New static variable. (c6x_init_sched_context): Save it. (c6x_sched_init): Allocate space for it and clear it. (c6x_sched_dfa_pre_cycle_insn): New static function. (c6x_dfa_new_cycle): Save state at the start of a new cycle. (c6x_variable_issue): Only record units in the unit_mask that were not set at the start of the cycle. (c6x_variable_issue): Compute and store the unit_mask from the current state. (reorg_split_calls): Ensure the new information remains correct. (TARGET_SCHED_DFA_NEW_CYCLE, TARGET_SCHED_CLEAR_SCHED_CONTEXT, TARGET_SCHED_DFA_PRE_CYCLE_INSN): Define. * config/c6x/c6x.h (CPU_UNITS_QUERY): Define. * config/c6x/c6x-sched.md.in (fp4_ls_N__CROSS_, adddp_ls_N__CROSS_): Add special reservations. * config/c6x/c6x-sched.md: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178488 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/c6x/c6x-sched.md')
-rw-r--r--gcc/config/c6x/c6x-sched.md16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/config/c6x/c6x-sched.md b/gcc/config/c6x/c6x-sched.md
index 6cb4b66acd5..dc8e39cf452 100644
--- a/gcc/config/c6x/c6x-sched.md
+++ b/gcc/config/c6x/c6x-sched.md
@@ -183,14 +183,14 @@
(and (eq_attr "cross" "n")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "a"))))
- "(s1,nothing*2,s1w)|(l1,nothing*2,l1w)")
+ "(fps1+s1,nothing*2,s1w)|(fpl1+l1,nothing*2,l1w)")
(define_insn_reservation "adddp_ls1n" 7
(and (eq_attr "type" "adddp")
(and (eq_attr "cross" "n")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "a"))))
- "((s1)*2,nothing*3,s1w*2)|((l1)*2,nothing*3,l1w*2)")
+ "(adddps1+(s1)*2,nothing*3,s1w*2)|(adddpl1+(l1)*2,nothing*3,l1w*2)")
(define_insn_reservation "single_dls1n" 1
(and (eq_attr "type" "single")
@@ -416,14 +416,14 @@
(and (eq_attr "cross" "n")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "b"))))
- "(s2,nothing*2,s2w)|(l2,nothing*2,l2w)")
+ "(fps2+s2,nothing*2,s2w)|(fpl2+l2,nothing*2,l2w)")
(define_insn_reservation "adddp_ls2n" 7
(and (eq_attr "type" "adddp")
(and (eq_attr "cross" "n")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "b"))))
- "((s2)*2,nothing*3,s2w*2)|((l2)*2,nothing*3,l2w*2)")
+ "(adddps2+(s2)*2,nothing*3,s2w*2)|(adddpl2+(l2)*2,nothing*3,l2w*2)")
(define_insn_reservation "single_dls2n" 1
(and (eq_attr "type" "single")
@@ -649,14 +649,14 @@
(and (eq_attr "cross" "y")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "a"))))
- "(s1+x1,nothing*2,s1w)|(l1+x1,nothing*2,l1w)")
+ "(fps1+s1+x1,nothing*2,s1w)|(fpl1+l1+x1,nothing*2,l1w)")
(define_insn_reservation "adddp_ls1y" 7
(and (eq_attr "type" "adddp")
(and (eq_attr "cross" "y")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "a"))))
- "((s1+x1)*2,nothing*3,s1w*2)|((l1+x1)*2,nothing*3,l1w*2)")
+ "(adddps1+(s1+x1)*2,nothing*3,s1w*2)|(adddpl1+(l1+x1)*2,nothing*3,l1w*2)")
(define_insn_reservation "single_dls1y" 1
(and (eq_attr "type" "single")
@@ -882,14 +882,14 @@
(and (eq_attr "cross" "y")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "b"))))
- "(s2+x2,nothing*2,s2w)|(l2+x2,nothing*2,l2w)")
+ "(fps2+s2+x2,nothing*2,s2w)|(fpl2+l2+x2,nothing*2,l2w)")
(define_insn_reservation "adddp_ls2y" 7
(and (eq_attr "type" "adddp")
(and (eq_attr "cross" "y")
(and (eq_attr "units" "ls")
(eq_attr "dest_regfile" "b"))))
- "((s2+x2)*2,nothing*3,s2w*2)|((l2+x2)*2,nothing*3,l2w*2)")
+ "(adddps2+(s2+x2)*2,nothing*3,s2w*2)|(adddpl2+(l2+x2)*2,nothing*3,l2w*2)")
(define_insn_reservation "single_dls2y" 1
(and (eq_attr "type" "single")