[LLVMdev] FD_ZERO unsupported inline asm on 64 bit

Cristian Zamfir cristian.zamfir at epfl.ch
Tue Feb 16 07:13:52 PST 2010


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.





More information about the llvm-dev mailing list