Re: Questions?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 7 Mar 2002, Ralf Baechle wrote:

> The MIPS ABI only covers big endian systems - every "real" MIPS UNIX
> system is big endian.  Everything else is a GNU extension.  There is
> hardly any reason to choose a particular byteorder as usually endianess
> swapping takes so little CPU time that it isn't even meassurable but so
> I'm told there are exceptions.

To me, byte swapping on MIPS actually seems rather expensive.  The code
for htonl (linux/byteorder/swab.h) ends up something like this:

        srl     $5,$4,8
        andi    $5,$5,0xff00
        srl     $2,$4,24
        andi    $3,$4,0xff00
        or      $2,$2,$5
        sll     $3,$3,8
        or      $2,$2,$3
        sll     $4,$4,24

This may not be an issue if it is only needed a few times per packet, but
my system must byte-swap (LE to BE) about 500KB (or 4mb) per second.
Actually, I save a bit of work by combining the byte swapping with the
memory move, just after copy_from_user, and looks something like:

    unsigned char a, b, c, d, *mptr;
	a = mptr[0];
	b = mptr[1];
	c = mptr[2];
	d = mptr[3];
	mptr[0] = d;
	mptr[1] = c;
	mptr[2] = b;
	mptr[3] = a;

This method works, but it is still 8 instructions per word.  Yuck!  Does
anyone know of a _decent_ way to handle this on MIPS?

All the best,

-Richard


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux