Subject: Re: inline assembly

From: Scott Wood <[email-masked]>
Date: Wed, 04 Jun 2008 14:45:04 -0500

Kevin Diggs wrote:
> Hi,
> 
>     When doing inline assembly, is there a way to get the compiler to 
> assign "extra" (one not specified for inputs and outputs) registers? In 
> the following:
> 
>                 __asm__ __volatile__ (
>                         "addi 5,%1,-1\n"
>                         "andc 5,%1,5\n"
>                         "cntlzw 5,5\n"
>                         "subfic %0,5,31":
>                         "=r"(j):
>                         "r"(i)
>                 );
> 
> Can I get the compiler to choose a register for r5?

Yes, like this:

int tmp;

asm volatile("addi %1, %2, -1;"
              "andc %1, %2, %1;"
              "cntlzw %1, %1;"
              "subfic %0, %1, 31" : "=r" (j), "=&r" (tmp) : "r" (i));

However, it'd be better to let the compiler do more, by just using the 
existing cntlzw() function.

-Scott