[Top] [All Lists]

RE: Questions?

To: "Siders, Keith" <>
Subject: RE: Questions?
From: Richard Hodges <>
Date: Thu, 7 Mar 2002 13:00:17 -0800 (PST)
Cc: Linux MIPS <>
In-reply-to: <7DF7BFDC95ECD411B4010090278A44CA1B75EC@ATVX>
On Thu, 7 Mar 2002, Siders, Keith wrote:

> You can get that down to 5 instructions. You could either use a typecast, or
> for portability, use a union definition. For that matter you could even
> typecast *mptr as a pointer to the union and extract the data from the
> string however you choose. But it still takes 5 instructions, unless you're
> pulling the data into another buffer, in which case you're down to 4.

Which 5 instructions are those?  For htonl from memory, the only sequence
I can think of is the "obvious" one of lbu/shift (7 instructions).  And
for swapping BE-LE in memory (an important thing for me), I do not see any
method better than the "obvious" one I mentioned earlier:

    90c50000        lbu     a1,0(a2)
    90c40001        lbu     a0,1(a2)
    90c30002        lbu     v1,2(a2)
    90c20003        lbu     v0,3(a2)
    a0c20000        sb      v0,0(a2)
    a0c30001        sb      v1,1(a2)
    a0c40002        sb      a0,2(a2)
    a0c50003        sb      a1,3(a2)



> -> From: Richard Hodges []

> -> 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

<Prev in Thread] Current Thread [Next in Thread>