Hi,

I have a question concerning '__restrict__' :

With gcc-4.0.0 (-O3 -fomit-frame-pointer, on i686), following piece of code :


void test_1(unsigned long* __restrict__ bar, unsigned long* __restrict__ bas)
{
  unsigned long tmp = *bar;
  *bas = 0;
  *bar = tmp;
}

void test_2(unsigned long* __restrict__ bar, char* __restrict__ bas)
{
  unsigned long tmp = *bar;
  *bas = 0;
  *bar = tmp;
}


compiles to :

_Z6test_1PmS_:
        movl    8(%esp), %edx
        movl    $0, (%edx)
        ret


_Z6test_2PmPc:
        movl    4(%esp), %eax
        movl    8(%esp), %edx
        movl    (%eax), %ecx
        movb    $0, (%edx)
        movl    %ecx, (%eax)
        ret



I would expect that the second case compiles to :
        movl    8(%esp), %edx
        movb    $0, (%edx)
        ret


Greetings,
-- 
Jeroen Dobbelaere

Reply via email to