[LLVMdev] FD_ZERO unsupported inline asm on 64 bit

Cristian Zamfir
Tue, 16 Feb 2010 15:13:52 -0000

Thanks Duncan,

It seems the bug has been reopened. After reading the comments related to the
bug report, it was not clear if this is fixed in llvm-gcc, or just in clang.

Thanks,
Cristi

On Feb 16, 2010, at 3:44 PM, Duncan Sands wrote:

> Hi Cristian, this is (part of) bug 3373, see
>  http://llvm.org/bugs/show_bug.cgi?id=3373
>
>> 	FD_ZERO(&rfds);   //this is the error line
>
> ...
>
>> # define __FD_ZERO(fdsp) \
>>  do {
\
>>    int __d0, __d1;
\
>>    __asm__ __volatile__ ("cld; rep; " __FD_ZERO_STOS
\
>>                          : "=c" (__d0), "=D" (__d1)
\
>>                          : "a" (0), "0" (sizeof
(fd_set)                     \
>>                                          / sizeof (__fd_mask)),
\
>>                            "1" (&__FDS_BITS (fdsp)[0])
\
>>                          : "memory");
\
>>  } while (0)
>
> That said, this is an odd way to implement FD_ZERO.  The crazy asm is
equivalent
> to a simple memset...
>
> Ciao,
>
> Duncan.
>
> PS: The underlying problem here is probably that __d0 and __d1 are declared
as
> int, which is only 32 bits in size, while the asm is expecting 64 bits.