Hello All,

I need some help with setting the pipeline hazard recognizer (I am
working with gcc v4.5.1 for a private target).

A brief pipeline description of my target:

We have 2 functional units
       1) For multiplication.
       2) For All other instructions.

a) Multiply instructions are not pipelined.
b) It takes 4 cycles to execute a multiply instruction.
c) The result of multiply instruction will be available after 4 cycles.

So there should be a 4 cycle gap between 2 multiply instructions
(independent/dependent) and also its depend instructions (other than
multiply).

e.g.1:
       mult R3, R4, R5 -- (A)
       add  R0, R1, R2
       mult R7, R8, R9 -- (B)

       A) & (B) are independent.
       This is a pipeline error.
       Need to add 2 NOP's or schedule 2 other independent
instructions before (B).

e.g.2:
       mult R3, R4, R5  --(A)
       add  R7, R8, R9
       add  R5, R1, R2  --(B)

       (A) & (B) are dependent.
       Even though there is no pipeline error, the value of "R5" used will
not be the updated one as 'mult' takes 4 cycles for the result to be
available.
       Need to add 2 NOP's or schedule 2 other independent
instructions before (B).

I have done the following, but not sure if this will take care of:

A) 4 cycle gap between 2 Independent multiply instructions
B) 4 cycle gap beween multiply and any other dependent instruction.

(define_automaton "pipeline")
(define_cpu_unit "simple" "pipeline")
(define_cpu_unit "mult" "pipeline")

(define_insn_reservation "any_insn" 1 (eq_attr "type" "!mul") "simple")
(define_insn_reservation "mult" 4 (eq_attr "type" "mul") "mult*4")


In case other independent instructions are not available to be
scheduled for this latency, i will be inserting NOP's from the
backend. But i want to make sure the correct info is passed to the
scheduler.

Any comments/suggestions?

Thanks,
Rohit

Reply via email to