[gnu.gcc] Using asm in C code

sayde@svax.cs.cornell.edu (Richard Sayde) (08/28/89)

I am using asm to put assembley language instructions in my C code. I need
to know if there is a way to tell if a data item is in memory or in a
register. The problem comes up when I use the -O option or not (with
-O local variables are allocated in registers and without they are
allocated on the stack).

So, when I access the data with an assembly instruction I need to use
one type of instruction if it's in a register (with -O) and another
instruction if it's on the stack (without -O). Is there a way to
determine this in the asm statement so I don't have to change the
code depending on whether I am optimizing or not?

If the above is not clear, here is an example.

{
   register int TempReg;
   int          SavePSR;

   asm ("RDS %0,PSR" : "=r" (TempReg));
   asm ("STW %1,%0" : "=m" (SavePSR) : "r" (TempReg));
}

above is what I do if the variable SavePSR is on the stack. If it's
a register I need to change the second as to

asm ("ADD %0,%1,R0" : "=r" (SavePSR) : "r" (TempReg));

where R0 is a register that always has 0 in it. (Or maybe even optimize
it furthur).

So is there a way to determine if SavePSR is a memory or register variable?

I am using GCC version 1.34. GCC is set up for a RISC processor similar
to Berkely RISC.

thanks for the help!
Richard