Messages in this thread | | | From | "Ulrich Windl" <> | Date | Fri, 29 Dec 2000 11:30:53 +0100 | Subject | Re: i386: gcc & asm(): wrong constraint for "mull" |
| |
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/
| |