Texas Instruments TMS320C64X User Manual
Page 103
DSP_mat_trans
4-75
C64x+ DSPLIB Reference
Matrix Transpose
DSP_mat_trans
Function
void DSP_mat_trans (const short *x, short rows, short columns, short *r)
Arguments
x[rows*columns]
Pointer to input matrix.
rows
Number of rows in the input matrix. Must be a multiple
of 4.
columns
Number of columns in the input matrix. Must be a multiple
of 4.
r[columns*rows]
Pointer to output data vector of size rows*columns.
Description
This function transposes the input matrix x[ ] and writes the result to matrix r[ ].
Algorithm
This is the C equivalent of the assembly code without restrictions. Note that
the assembly code is hand optimized and restrictions may apply.
void DSP_mat_trans(short *x, short rows, short columns, short
*r)
{
short i,j;
for(i=0; i for(j=0; j *(r+i*rows+j)=*(x+i+columns*j); } Special Requirements - Rows and columns must be a multiple of 4. - Matrices are assumed to have 16-bit elements. Implementation Notes - Bank Conflicts: No bank conflicts occur. - Interruptibility: The code is interrupt-tolerant but not interruptible. - Data from four adjacent rows, spaced “columns” apart are read, and a Benchmarks Cycles (2 * rows + 9) * columns/4 + 3 Codesize 224 bytes
local 4x4 transpose is performed in the register file. This leads to four
double words, that are “rows” apart. These loads and stores can cause
bank conflicts; hence, non-aligned loads and stores are used.