SPRUI04F july 2015 – april 2023
There are only two cross paths in the C6000. This limits the C6000 to one source read from each data path's opposite register file per cycle. The compiler must select a side for each instruction; this is called partitioning.
It is recommended that you do not initially partition the linear assembly source code by hand. This allows the compiler more freedom to partition and optimize your code. If the compiler does not find an optimal partition in a software pipelined loop, then you can partition enough instructions by hand to force optimal partitioning by partitioning registers.
The assembly optimizer chooses a register for you such that its use agrees with the functional units chosen for the instructions that operate on the value.
Registers can be directly partitioned using two directives. The .rega directive constrains a symbolic name to A-side registers. The .regb directive constrains a symbolic name to B-side registers. See the .rega/.regb topic for further details on these directives. The .reg directive allows you to use descriptive names for values that are stored in registers. See the .reg topic for further details and examples of the .reg directive.
Example5-1 is a hand-coded linear assembly program that computes a dot product; compare to Example5-2, which illustrates C code.