* syntax for clobber list with inline assembly @ 2005-06-07 14:49 Chris Friesen 2005-06-07 15:00 ` Segher Boessenkool 0 siblings, 1 reply; 4+ messages in thread From: Chris Friesen @ 2005-06-07 14:49 UTC (permalink / raw) To: linuxppc-dev I'm writing some inline assembly for ppc. To specify that r3 is used, I know I need to list it in the clobbered list. When doing this, do I specify it as "3" or "r3", or are both valid? Thanks, Chris ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: syntax for clobber list with inline assembly 2005-06-07 14:49 syntax for clobber list with inline assembly Chris Friesen @ 2005-06-07 15:00 ` Segher Boessenkool 2005-06-08 1:02 ` Hollis Blanchard 0 siblings, 1 reply; 4+ messages in thread From: Segher Boessenkool @ 2005-06-07 15:00 UTC (permalink / raw) To: Chris Friesen; +Cc: linuxppc-dev > I'm writing some inline assembly for ppc. To specify that r3 is used, > I know I need to list it in the clobbered list. > > When doing this, do I specify it as "3" or "r3", or are both valid? Both work. Segher ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: syntax for clobber list with inline assembly 2005-06-07 15:00 ` Segher Boessenkool @ 2005-06-08 1:02 ` Hollis Blanchard 2005-06-08 21:39 ` Chris Friesen 0 siblings, 1 reply; 4+ messages in thread From: Hollis Blanchard @ 2005-06-08 1:02 UTC (permalink / raw) To: Chris Friesen; +Cc: Linux PPC Dev On Jun 7, 2005, at 10:00 AM, Segher Boessenkool wrote: >> I'm writing some inline assembly for ppc. To specify that r3 is >> used, I know I need to list it in the clobbered list. >> >> When doing this, do I specify it as "3" or "r3", or are both valid? > > Both work. But it should be said that much better style is to let the compiler choose registers for you, i.e. don't hardcode register numbers at all. For example (well, it's contrived, but I hope you get the idea): int out; asm("mfmsr r3\n" "ori %0, r3, 0x1\n" : "=r"(out) : : "r3"); would be better written as int out, tmp; asm("mfmsr %1\n" "ori %0, %1, 0x1\n" : "=r"(out), "=r"(tmp) : : ); Be careful about using "r" constraints when dealing with instructions that treat r0 as a special case, such as addi or lwz (use "b" instead). Also be careful about gcc arranging outputs and inputs in the same register; it looks different when you're writing "%0" and "%1" in your assembly, but it's not. Inline assembly is very subtle. If you mess up your constraints now, you might never know until you rebuild with a different compiler version and things fall apart. -Hollis ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: syntax for clobber list with inline assembly 2005-06-08 1:02 ` Hollis Blanchard @ 2005-06-08 21:39 ` Chris Friesen 0 siblings, 0 replies; 4+ messages in thread From: Chris Friesen @ 2005-06-08 21:39 UTC (permalink / raw) To: Hollis Blanchard; +Cc: Linux PPC Dev Hollis Blanchard wrote: > But it should be said that much better style is to let the compiler > choose registers for you, i.e. don't hardcode register numbers at all. > For example (well, it's contrived, but I hope you get the idea): Certainly that would be the normal case. In this particular case I'm writing some code to test whether my function to flush/clear the entire cache is properly working. It uses self-modifying code, and I've got some instructions using r3 hardcoded as hex. Thus the specific use of r3. Chris ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-06-08 21:40 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-06-07 14:49 syntax for clobber list with inline assembly Chris Friesen 2005-06-07 15:00 ` Segher Boessenkool 2005-06-08 1:02 ` Hollis Blanchard 2005-06-08 21:39 ` Chris Friesen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox