InvestorsHub Logo
Followers 10
Posts 10150
Boards Moderated 0
Alias Born 08/22/2002

Re: chipdesigner post# 51628

Wednesday, 02/02/2005 6:19:51 PM

Wednesday, February 02, 2005 6:19:51 PM

Post# of 97730
For the person that said that the simple approach is usually best:

Old code:
 
for (i = 0, rp = row; i < row_width; i++, rp += 3)
{
png_byte save = *rp;
*rp = *(rp + 2);
*(rp + 2) = save;
}


New code:

 
int alignment = ((unsigned int) rp) & 3;

rp = row;
printf("png_do_bgr\n");

/* Align on quadword */

for (i = 0; i < alignment; i++, rp += 3) {
png_byte save = *rp;
*rp = *(rp + 2);
*(rp + 2) = save;
}
row_width -= alignment;

__asm{
mov edi, DWORD PTR row_width
mov esi, DWORD PTR rp
shr edi, 2 ; Div by 4 as couplet=4

do_couplet:
mov eax, DWORD PTR [esi]
mov ecx, DWORD PTR [esi+4]
bswap eax
mov edx, ecx
mov ch, al
mov al, dh
ror eax, 8
mov DWORD PTR [esi], eax
bswap ecx
bswap edx
mov eax, DWORD PTR [esi+8]
mov ch, al
mov al, dh
bswap ecx
bswap eax
mov DWORD PTR [esi+4], ecx
rol eax, 8
mov DWORD PTR [esi+8], eax

add esi, 12
sub edi, 1
jne do_couplet

mov DWORD PTR rp, esi
}
row_width &= 3; /* Do the tail */
for (i = 0; i < row_width; i++, rp += 3) {
png_byte save = *rp;
*rp = *(rp + 2);
*(rp + 2) = save;
}

Volume:
Day Range:
Bid:
Ask:
Last Trade Time:
Total Trades:
  • 1D
  • 1M
  • 3M
  • 6M
  • 1Y
  • 5Y
Recent AMD News