Re: asm clobber arg for AIX

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> The AIX assembler uses "1" for register 1 -- which surprised me.  I  
> thought it accepted both 1 and r1.

	It accepts "r1", if one adds something like

.set r1,1

at the beginning of the file.

> Anyhow, in one of my asm statements, I want to specify that register  
> 1 (the stack pointer) is being changed.  So I did this (so far)
>
>          asm("lwz 1, %0" : : "rm" (newbase));
>
> I put "rm" as the constraint because it can be either a register or a  
> memory location.
> Should I just put "m"?  GCC (4.0.2) seems to produce the same code  
> either way.

	The "lwz" instruction only accept a memory address.  This is why
the string is called a "constraint" -- it constrains the operand to the
allowed input.

> Also, should I put "1" as being clobbered? Like:
>
>          asm("lwz 1, %0" : : "m" (newbase) : "1" );

	Yes, you need to inform the compiler that you are modifying the
value of the register.

	You probably should not be modifying the stack this way, but it is
up to you to debug your application.

David


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux