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: Assembly optimizations


Klaus Winter wrote:
Hi all,

I compiled the following code with gcc-3.3.1. Once without
optimization and one time with optimization -O. With optimization the
Decrement function takes a LOT longer than before whereas the
Increment function stays constant. I haven't found anything in the
manpage about it ... Any help is appreciated.

cheers,
Klaus

#include <stdio.h>
#include <time.h>
#include <sys/time.h>

int g_Lock_Mini = 0;

inline int Increment( int* count)
{
__asm__ __volatile__( "movl $1, %%eax\n\t" "lock; xaddl %%eax, (%%ecx)\n\t"
"incl %%eax\n\t" : : "c" (count) );
}
inline int Decrement( int * count)
{
__asm__ __volatile__( "lock; decl (%%ecx)\n\t"
"movl (%%ecx), %%eax\n\t" : : "c" (count));
}
these asms are broken. I think you want something like

asm volatile("lock;decl (%1)\n\tmovl (%1),%0" : "=r" (result) : "r" (count) : "memory")

gcc does not otherwise know what registers are used by the asm.

nathan

--
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk


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