beautypg.com

Texas Instruments TMS320C64X User Manual

Page 110

background image

DSP_blk_eswap64

4-82

Endian-Swap a Block of 64-Bit Values

DSP_blk_eswap64

Function

void blk_eswap64(void * restrict x, void * restrict r, int nx)

Arguments

x[nx]

Source data. Must be double-word aligned.

r[nx]

Destination array. Must be double-word aligned.

nx

Number of 64-bit values to swap. Must be multiple of 2.

Description

The data in the x[] array is endian swapped, meaning that the byte-order of the
bytes within each double-word of the r[] array is reversed. This facilitates
moving big-endian data to a little-endian system or vice-versa.

When the r pointer is non-NULL, the endian-swap occurs out-of-place, similar
to a block move. When the r pointer is NULL, the endian-swap occurs in-place,
allowing the swap to occur without using any additional storage.

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_eswap64(void *x, void *r, int nx)

{

int i;

char *_x, *_r;

if (r)

{

_x = (char *)x;

_r = (char *)r;

} else

{

_x = (char *)x;

_r = (char *)r;

}

for (i = 0; i < nx; i++)

{

char t0, t1, t2, t3, t4, t5, t6, t7;

t0 = _x[i*8 + 7];

t1 = _x[i*8 + 6];