Re: Inline assembly constraints question

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

 



Jeroen Demeyer <jdemeyer@xxxxxxxxxxxxx> writes:

> This is the full asm statement:
> asm("# number_t& number_t::operator>>=(unsigned char s)\n"
>     "   shrdl %6, %4, %3\n"
>     "   movl %3, %0\n"
>     "   movl %5, %2\n"
>     "   shrdl %6, %2, %1\n"
>     "   shrl %6, %2\n"
>     : "=&rm" (n0), "=&r" (n1), "=&r" (n2)
>     : "2" (n0), "1" (n1), "g" (n2), "cI" (s)
> );
>
> The code generated is the following:
>     shrdl %cl, %esi, %eax
>     movl %eax, -4384(%ebp)
>     movl -4384(%ebp), %eax
>     shrdl %cl, %eax, %esi
>     shrl %cl, %eax
>
> As you can see, %0 and %5 both become -4384(%ebp).
> See attachment for the output from -dg.

Thanks for the details.  Unfortunately, I am no wiser.  As far as I
can tell, this should work correctly.  Either you've found a bug, or
I'm missing something.

If you like, and you want to help others avoid this problem, please
file a bug report with the preprocessed source code and command line
at http://gcc.gnu.org/bugzilla/ .  For more information about filing
bug reports see http://gcc.gnu.org/bugs.html .

If you just want to fix it for yourself change constraint 0 to "=&r"
or change constraint 5 to "r".

Ian

[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