This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: help with __sync for "long long" types


On Wed, Jul 7, 2010 at 8:55 AM, Preeti Sharma <pritis@gmail.com> wrote:
> Good to know that this is supposed to work (I am using 4.1.2) I get a
> link error in doing so
> here is my code:
>
> cat test1.c
> #include <stdio.h>
> #include <unistd.h>
> #include <errno.h>
>
> long long global_int = 0;
>
> int main()
> {
> ? ? ? ? __sync_fetch_and_add( &global_int, 1 );
> ? ? ? ?printf("Global int is : %d\n", global_int);
> }
> The link error I get is :
>
> ?gcc -D_GNU_SOURCE -D_REENTRANT -O2 -m32 -march=i686 -o test test1.c
> /tmp/cc4pniWE.o: In function `main':
> test1.c:(.text+0x29): undefined reference to `__sync_fetch_and_add_8'
> collect2: ld returned 1 exit status
>
>
>
>
> On Wed, Jul 7, 2010 at 8:43 AM, Andrew Haley <aph@redhat.com> wrote:
>> On 07/07/2010 04:26 PM, Preeti Sharma wrote:
>>> I am trying to use __sync_fetch_and_add with type ?as "long long" .
>>>
>>> This gives me the link error :
>>> undefined reference to `__sync_fetch_and_add_8'
>>>
>>> This compiles for a "int " type though. I am using the the gcc option
>>> -march=i686
>>>
>>> Is it possible to do a 64 bit integer operation atomically with the
>>> __sync .. builtin functions ?
>>
>> Works for me:
>>
>> long long a;
>>
>> t()
>> {
>> ?__sync_fetch_and_add(&a, 1);
>> }
>>
>> $ gcc -S t.c -m32 -march=i686 -O2
>>
>> ? ? ? ?.file ? "t.c"
>> ? ? ? ?.text
>> ? ? ? ?.p2align 4,,15
>> .globl t
>> ? ? ? ?.type ? t, @function
>> t:
>> ? ? ? ?pushl ? %ebp
>> ? ? ? ?movl ? ?%esp, %ebp
>> ? ? ? ?subl ? ?$12, %esp
>> ? ? ? ?movl ? ?%ebx, (%esp)
>> ? ? ? ?movl ? ?%esi, 4(%esp)
>> ? ? ? ?movl ? ?%edi, 8(%esp)
>> ? ? ? ?movl ? ?a, %eax
>> ? ? ? ?movl ? ?a+4, %edx
>> .L2:
>> ? ? ? ?movl ? ?%eax, %esi
>> ? ? ? ?movl ? ?%edx, %edi
>> ? ? ? ?addl ? ?$1, %esi
>> ? ? ? ?adcl ? ?$0, %edi
>> ? ? ? ?movl ? ?%esi, %ebx
>> ? ? ? ?movl ? ?%edi, %ecx
>> ? ? ? ?lock cmpxchg8b ?a
>> ? ? ? ?jne ? ? .L2
>> ? ? ? ?movl ? ?(%esp), %ebx
>> ? ? ? ?movl ? ?4(%esp), %esi
>> ? ? ? ?movl ? ?8(%esp), %edi
>> ? ? ? ?movl ? ?%ebp, %esp
>> ? ? ? ?popl ? ?%ebp
>> ? ? ? ?ret
>> ? ? ? ?.size ? t, .-t
>> ? ? ? ?.comm ? a,8,8
>> ? ? ? ?.ident ?"GCC: (GNU) 4.4.3 20100127 (Red Hat 4.4.3-4)"
>> ? ? ? ?.section ? ? ? ?.note.GNU-stack,"",@progbits
>>
>>
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]