Re: i386: gcc & asm(): wrong constraint for "mull"

From: Ulrich Windl (Ulrich.Windl@rz.uni-regensburg.de)
Date: Fri Dec 29 2000 - 05:30:53 EST


On 29 Dec 2000, at 5:17, Jakub Jelinek wrote:

> On Fri, Dec 29, 2000 at 10:54:38AM +0100, Ulrich Windl wrote:
> > Hello,
> >
> > I noticed (with some inspiration from Andy Kleen) that some asm()
> > instructions for the ia32 use the "g" constraint for "mull", where my
> > Intel 386 Assembly Language Manual suggests the "MUL" instruction needs
> > an r/m operand. So I guess the correct constraint is "rm" in gcc, and
> > not "g". That change identical assembly output for gcc-2.95.2, but some
> > gcc-2.96.x will try a multiplication with an immediate (constant)
> > operand for the "g" constarint, and the as will choke on that.
> > (Redhat 7.0 ships such a version of gcc).
>
> gcc 2.95.2 md.texi sais:
> @cindex @samp{g} in constraint
> @item @samp{g}
> Any register, memory or immediate integer operand is allowed, except for
> registers that are not general registers.
>
> (2.95.2 was chosen to make it clear it is not something new in gcc).
> That means gcc is really free to choose which of register, memory or
> immediate it puts in and the fact that some gcc version choose one and
> others choose other is perfectly correct.
> Fix the constraints and be happy (at least during the upcoming millenium) :)

Oh, if it wasn't clear: It's what I wanted to say. As I don't have a
patch ready for that, maybe start at arch/i386/kernel/time.c; there are
at least two of these "mull" instructions.

Ulrich

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Dec 31 2000 - 21:00:12 EST