[PATCH] ARM: Always generate the IT instruction when compilingfor Thumb-2
Catalin Marinas
catalin.marinas at arm.com
Thu Jan 28 10:50:11 EST 2010
On Thu, 2010-01-28 at 14:55 +0000, Jamie Lokier wrote:
> Catalin Marinas wrote:
> > On Wed, 2010-01-27 at 22:02 +0000, Russell King - ARM Linux wrote:
> > > On Tue, Jan 26, 2010 at 10:14:24AM +0000, Catalin Marinas wrote:
> > > > Current behaviour is to generate the IT instruction only for Thumb-2
> > > > code. However, the kernel helpers in entry-armv.S are compiled to ARM in
> > > > a unified syntax file (if THUMB2_KERNEL). Recent compilers warn about
> > > > missing IT instruction in unified assembly syntax files. The patch
> > > > changes the "-mimplicit-it" gas option to "always".
> > >
> > > Any downsides to this change? Any assemblers not accepting "always"
> > > instead of "thumb" ?
> >
> > When the -mimplicit-it was merged into mainline gas, it supported all of
> > thumb, arm, always and never. We still have the old -mauto-it but that's
> > I think only valid for the CodeSourcery toolchains.
>
> I notice there's a few "it" dotted around the kernel code now. In
> fact, that's how I learned about it - because I thought "that can't be
> right when targetting ARM", and did some reading to learn otherwise.
>
> With -mimplicit-it=always, they should not be needed. So they can be
> removed from the kernel source?
>
> Or, if it's policy to put "it" in all the places needed, wouldn't
> -mimplicit-it=arm (the gas default) be a better choice, to make sure
> they are in all the places needed?
The original Thumb-2 patches were adding these IT instructions
explicitly (quite a lot). With compiler support for automatically
generating them, the kernel can avoid explicit IT in most cases with a
few exceptions.
For things like:
1: LDRNE ...
gas generates:
1: IT NE
LDRNE ...
since you are not allowed to branch in the middle of an IT block.
But if the label 1 is used for the exception table, it should point to
LDRNE rather than IT, so we have to write the code as below and manually
insert IT:
IT NE
1: LDRNE ...
--
Catalin
More information about the linux-arm-kernel
mailing list