Hi Ralf Thanks for response, but I did not understand your point. Please read inline. --- Ralf Baechle <ralf@linux-mips.org> wrote: > On Sat, Feb 14, 2004 at 07:11:52AM -0800, Indigodfw > wrote: > > > 2. Result of (C expression) should go into %xyz > > register > > So v->counter goes into %1, IOW ll from an int! > > > > Does not make sense to me. > > Why does it work, What am I missing? > > > I mean in general what is the expression for a m > > constraint ptr (because I want ptr to be in > regiser) > > or *ptr (because I wanna tell compiler that *ptr > is > > what gets changed) > > "m" gives you *something* suitable to address a > memory object; that isn't > necessarily a memory address. On MIPS it can't even > be just an address > in a register because "m" constraints are used with > loads and stores and > those only accept the offset(reg) addressing mode. > If you want an address > use something like "r" (&v->counter), then lw > reg,(%xxx). Well, is not that what we want? That is, we want to load (using ll) from &v->counter. Should not the code have been ll %0, 0(%1) where %1 is "=m" (&v->counter) The way I interpret it is: a) %1 will contain address of v->counter b) We would do ll (load with reservation/lock) from %1 which is &v->counter (and not from v->counter) c)We want to tell the compiler that &v->counter is output constraint and it may be modified. (Since compiler does not look inside asm). But I fear that with the syntax "=m" (&v->counter) we are informing the compiler that this ptr itself may be modified instead of its contents. Thanks __________________________________ Do you Yahoo!? Yahoo! Mail SpamGuard - Read only the mail you want. http://antispam.yahoo.com/tools