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<columns; i++)
for(j=0; j<rows; 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
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.
Benchmarks
Cycles
(2 * rows + 9) * columns/4 + 3
Codesize
224 bytes