DSP_blk_move
DSP_blk_move | Block Move (Overlapping) | |||
Function |
| void DSP_blk_move(short * x, short * r, int nx) |
| |
Arguments |
| x [nx] | Block of data to be moved. | |
|
| r [nx] | Destination of block of data. | |
|
| nx | Number of elements in block. Must be multiple of 8 and ≥32. | |
Description |
| This routine moves nx | ||
|
| by x to another pointed to by r. The source and destination blocks can be | ||
|
| overlapped. |
|
|
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_blk_move(short *x, short *r, int nx)
{
int i;
if( r < x )
{
for (I = 0; I < nx; i++) r[i] = x[i];
} else
{
for (I = nx−1; I >= 0; i−−) r[i] = x[i];
}
}
Special Requirements nx must be a multiple of 8 and ≥ 32.
Implementation Notes
| - Twin input and output pointers are used. | |
| - Bank Conflicts: No bank conflicts occur. | |
| - Interruptibility: The code is fully interruptible. | |
Benchmarks | Cycles | nx/4+18 |
| Codesize | 112 bytes |