Hi Brad, Thanks for responding. My query was more on %U1%X1, I guess it is specifying U and/or X for %1 right ? what does U/X stand for (is it similar to u - unsigned and x for a hex address) are there any more literals like U/X/... -Manish On Fri, Jul 3, 2009 at 11:10 PM, Brad Boyer<flar@xxxxxxxxxxxxx> wrote: > On Fri, Jul 03, 2009 at 12:14:41PM +0530, kernel mailz wrote: >> Thanks for responding to my previous mail. A few more queries >> >> a. What is the use of adding format specifiers in inline assembly >> like >> asm volatile("ld%U1%X1 %0,%1":"=r"(ret) : "m"(*ptr) : "memory"); > > The format specifiers limit which registers or addressing modes will > be chosen to access that parameter. For example, if you're using an > instruction that treats r0 as a literal 0 value, you can't use the > "r" specifier for that or you may see problems if it happens to allocate > r0 for that particular argument. For memory access, the "m" lets you > use any of the normal load/store patterns (which is why this particular > choice also requires the "%U1%X1" part to allow changing the instruction). > The system was setup for an older style chip like x86 or 68k with many > restrictions on which registers can be used where and large numbers of > different addressing modes for accessing memory. It's a little clumsy > for ppc by comparison to most other chips, but it's a fundamental part > of inline assembly processing in gcc. > >> b. using m or Z with a memory address. I tried replacing m/Z but no change >> Is there some guideline ? >> gcc documentation says Z is obsolete. Is m/Z replaceable ? > > No idea. I don't remember ever seeing 'Z' used in anything. Maybe somebody > else remembers what it used to mean. > > Brad Boyer > flar@xxxxxxxxxxxxx > >