[Top] [All Lists]

Re: load_unaligned() and "uld" instruction

To: Jun Sun <>
Subject: Re: load_unaligned() and "uld" instruction
From: Ralf Baechle <>
Date: Thu, 5 Oct 2000 14:13:54 +0200
Cc: "Kevin D. Kissell" <>, Dominic Sweetman <>,,
In-reply-to: <>; from on Tue, Sep 26, 2000 at 11:04:12AM -0700
References: <> <> <> <000d01c02782$32d31560$0deca8c0@Ulysses> <>
On Tue, Sep 26, 2000 at 11:04:12AM -0700, Jun Sun wrote:

> > > If we have to use "-mips2" option, is there a clean way which allows us
> > > to "uld/usw" instructions (instead of manually twicking the compilation
> > > for each file that uses them)?
> >
> Ralf, before the perfect solution is found, the following patch makes
> the gcc complain go away.  It just use ".set mips3" pragma.

It's still perfectly broken.  Uld is a 64-bit instruction meaning you still
could get into problems with register corruption or even reserved instruction
exceptions on 32-bit cpus.  Not too mention that nobody did notice that
the constraints of the inline assembler were broken for all access sizes
plus a cast that would have cut off the upper 32 bit of a 64 bit access in
any case.  That's fixed now.

> I am pretty close to get USB running with the v2.4-test5.  The unaligned
> access is the minor problem.  The bigger problem I am fighting with now
> is bus_to_virt()/virt_to_bus() and USB interrupt.

The unaligned exception handler is fairly expensive.  I suggest you should
try to get proper alignment and where that is not possible go through
the entire code and use get_unaligned.  It's going to make a noticable
difference in performance.


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