> From: Andrew Pinski <pins...@gmail.com>

> To: Jamie Prescott <jpre...@yahoo.com>
> Cc: gcc@gcc.gnu.org
> Sent: Monday, May 11, 2009 4:47:57 PM
> Subject: Re: Extending constraints using register subclasses
> 
> On Mon, May 11, 2009 at 4:45 PM, Jamie Prescott wrote:
> >
> > Hi!
> > I wanted to add finer (one per) register subclasses, so that I can more 
> > finely 
> control
> > the register placement inside the inline assembly.
> 
> You don't need that.
> You can just use asm("registername") on variables.
> like so:
> 
> int f(int a)
> {
>   register int r0 __asm__("r0");
>   asm("use %0": "+r"(r0) );
> }

Now I managed to have the approach based on register subclasses working. The 
above
works too, but I somehow found it less clear and more "global" than inline 
assembly
constraints.
One thing that I cannot see how to implement clearly with the approach above, 
is when
you have an instruction (like I use inside the VM with SWI - software 
interrupts), where
the C type of a register changes between input and output.
For some of them the r0 in input can be a 'char*', and an 'int' (error code) on 
output.
With inline assembly this can be done pretty cleanly, while I am not aware of 
how to
do it with the approach above. For clean, I mean cast-less.


- Jamie


      

Reply via email to