need a fast byteorder changing routine

Wells, Charles Charles.Wells at nielsenmedia.com
Fri Jul 18 23:24:23 EST 2003


Li,

If you must do it one word at a time, the following works.

long SwapBytes(long* p)
{
  __asm__(" lwbrx 3,0,3");
}

Charlie

-----Original Message-----
From: Wells, Charles [mailto:Charles.Wells at nielsenmedia.com]
Sent: Friday, July 18, 2003 9:04 AM
To: 'li'
Cc: linuxppc-embedded at lists.linuxppc.org
Subject: RE: need a fast byteorder changing routine



Li,

There's several ways of doing it.  This way is pretty fast and makes few
assumptions about the buffer.

void FixEndian(long* buf, unsigned long num_longs)
{
  __asm__(" addi   3,3,-4");
  __asm__(" mtspr  9,4");
  __asm__(" lwzu   4,4(3)");
  __asm__(" stwbrx 4,0,3");
  __asm__(" bc     16,0,$-8");
}

Charlie


** Sent via the linuxppc-embedded mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-embedded mailing list