problem in extended asm
Dave Korn
dk@artimi.com
Fri Aug 13 18:57:00 GMT 2004
> -----Original Message-----
> From: gcc-owner On Behalf Of James E Wilson
> Sent: 13 August 2004 00:04
> To: Ankit Jain
> Ankit Jain wrote:
> > a simple question: why the followinf instruction
> > dosent work in gcc
> > asm("movq i(%1),%%mm0 \n"
> > "movq %%mm0,(%0)
> > :"=r"(x)
> > :"r"(m)); //m is an array
>
> Always include a testcase that can be compiled. A program
> fragment like
> this is a very poor bug report, as often the bug is in something you
> left out.
>
> In this particular case, the problem is likely that you are using
> arrays, and register allocation can not assign an array to a
> register,
> at least not after you have referenced an element of it.
> Hence, you can
> not use an 'r' constraint with an array.
>
> Try using a vector type or a union instead of an array.
...The other problem being his attempt to smuggle the variable 'i' into
the asm.
But I'm curious now: doesn't the array reference degenerate to a pointer
like it would if you passed it to a function that requires a pointer to
whatever type the array is of? Or does it (or should it) follow the
(machine and abi)-dependent rules for whether or not small structs are
passed byval or reference in the calling convention?
cheers,
DaveK
--
Can't think of a witty .sigline today....
More information about the Gcc-help
mailing list