-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBitReverse.c
More file actions
34 lines (30 loc) · 836 Bytes
/
BitReverse.c
File metadata and controls
34 lines (30 loc) · 836 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
define ROR(data, ror) ( ((data)<<(32-(ror))) | ((data)>>(ror) )
void data_bit_rev(u32 *data, u32 size, u32 bpp)
{
u32 i, tmp, mask;
const volatile u32 masks[4]=
{ 0xAAAAAAAA, 0x33333333, 0x0F0F0F0F, 0x00FF00FF };
for(i=0; i<size; i++)
{
tmp= data[i];
// All fall throughs
switch(bpp)
{
case 1:
mask= masks[0];
tmp= (mask & (tmp>>1)) | ((tmp&mask)<<1);
case 2:
mask= masks[1];
tmp= (mask & (tmp>>2)) | ((tmp&mask)<<2);
case 4:
mask= masks[2];
tmp= (mask & (tmp>>4)) | ((tmp&mask)<<4);
case 8:
mask= masks[3];
tmp= (mask & (tmp>>8)) | ((tmp&mask)<<8);
case 16:
tmp= ROR(tmp, 16);
}
data[i]= tmp;
}
}