| [29f6db3] | 1 | Fixes | 
|---|
|  | 2 | In file included from /var/build_system/work/gcc-4.4.1/boehm-gc/include/private/gc_priv.h:98, | 
|---|
|  | 3 | from /var/build_system/work/gcc-4.4.1/boehm-gc/alloc.c:19: | 
|---|
|  | 4 | /var/build_system/work/gcc-4.4.1/boehm-gc/include/private/gc_locks.h: In function âGC_test_and_setâ: | 
|---|
|  | 5 | /var/build_system/work/gcc-4.4.1/boehm-gc/include/private/gc_locks.h:165: error: âasmâ operand has impossible constraints | 
|---|
|  | 6 | make[3]: *** [alloc.lo] Error 1 | 
|---|
|  | 7 | make[3]: Leaving directory `/var/build_system/work/gcc-build/powerpc-unknown-linux-gnu/boehm-gc' | 
|---|
|  | 8 | make[2]: *** [all-recursive] Error 1 | 
|---|
|  | 9 |  | 
|---|
|  | 10 | --- trunk/boehm-gc/include/private/gc_locks.h   2008/07/23 11:06:42     138078 | 
|---|
|  | 11 | +++ trunk/boehm-gc/include/private/gc_locks.h   2009/07/23 16:05:37     150018 | 
|---|
|  | 12 | @@ -139,49 +139,35 @@ | 
|---|
|  | 13 | #      define GC_TEST_AND_SET_DEFINED | 
|---|
|  | 14 | #    endif | 
|---|
|  | 15 | #    if defined(POWERPC) | 
|---|
|  | 16 | -#     if 0 /* CPP_WORDSZ == 64  totally broken to use int locks with ldarx */ | 
|---|
|  | 17 | -        inline static int GC_test_and_set(volatile unsigned int *addr) { | 
|---|
|  | 18 | -          unsigned long oldval; | 
|---|
|  | 19 | -          unsigned long temp = 1; /* locked value */ | 
|---|
|  | 20 | - | 
|---|
|  | 21 | -          __asm__ __volatile__( | 
|---|
|  | 22 | -               "1:\tldarx %0,0,%3\n"   /* load and reserve               */ | 
|---|
|  | 23 | -               "\tcmpdi %0, 0\n"       /* if load is                     */ | 
|---|
|  | 24 | -               "\tbne 2f\n"            /*   non-zero, return already set */ | 
|---|
|  | 25 | -               "\tstdcx. %2,0,%1\n"    /* else store conditional         */ | 
|---|
|  | 26 | -               "\tbne- 1b\n"           /* retry if lost reservation      */ | 
|---|
|  | 27 | -               "\tsync\n"              /* import barrier                 */ | 
|---|
|  | 28 | -               "2:\t\n"                /* oldval is zero if we set       */ | 
|---|
|  | 29 | -              : "=&r"(oldval), "=p"(addr) | 
|---|
|  | 30 | -              : "r"(temp), "1"(addr) | 
|---|
|  | 31 | -              : "cr0","memory"); | 
|---|
|  | 32 | -          return (int)oldval; | 
|---|
|  | 33 | -        } | 
|---|
|  | 34 | +#     define GC_TEST_AND_SET_DEFINED | 
|---|
|  | 35 | +#     define GC_CLEAR_DEFINED | 
|---|
|  | 36 | +#     if (__GNUC__>4)||((__GNUC__==4)&&(__GNUC_MINOR__>=4)) | 
|---|
|  | 37 | +#       define GC_test_and_set(addr) __sync_lock_test_and_set (addr, 1) | 
|---|
|  | 38 | +#       define GC_clear(addr) __sync_lock_release (addr) | 
|---|
|  | 39 | #     else | 
|---|
|  | 40 | inline static int GC_test_and_set(volatile unsigned int *addr) { | 
|---|
|  | 41 | int oldval; | 
|---|
|  | 42 | int temp = 1; /* locked value */ | 
|---|
|  | 43 |  | 
|---|
|  | 44 | __asm__ __volatile__( | 
|---|
|  | 45 | -               "1:\tlwarx %0,0,%3\n"   /* load and reserve               */ | 
|---|
|  | 46 | +               "\n1:\n" | 
|---|
|  | 47 | +              "\tlwarx %0,%y3\n"      /* load and reserve, 32-bits      */ | 
|---|
|  | 48 | "\tcmpwi %0, 0\n"       /* if load is                     */ | 
|---|
|  | 49 | "\tbne 2f\n"            /*   non-zero, return already set */ | 
|---|
|  | 50 | -               "\tstwcx. %2,0,%1\n"    /* else store conditional         */ | 
|---|
|  | 51 | +               "\tstwcx. %2,%y3\n"     /* else store conditional         */ | 
|---|
|  | 52 | "\tbne- 1b\n"           /* retry if lost reservation      */ | 
|---|
|  | 53 | "\tsync\n"              /* import barrier                 */ | 
|---|
|  | 54 | "2:\t\n"                /* oldval is zero if we set       */ | 
|---|
|  | 55 | -              : "=&r"(oldval), "=p"(addr) | 
|---|
|  | 56 | -              : "r"(temp), "1"(addr) | 
|---|
|  | 57 | +              : "=&r"(oldval), "=m"(addr) | 
|---|
|  | 58 | +              : "r"(temp), "Z"(addr) | 
|---|
|  | 59 | : "cr0","memory"); | 
|---|
|  | 60 | return oldval; | 
|---|
|  | 61 | } | 
|---|
|  | 62 | -#     endif | 
|---|
|  | 63 | -#     define GC_TEST_AND_SET_DEFINED | 
|---|
|  | 64 | inline static void GC_clear(volatile unsigned int *addr) { | 
|---|
|  | 65 | __asm__ __volatile__("lwsync" : : : "memory"); | 
|---|
|  | 66 | *(addr) = 0; | 
|---|
|  | 67 | } | 
|---|
|  | 68 | -#     define GC_CLEAR_DEFINED | 
|---|
|  | 69 | +#    endif | 
|---|
|  | 70 | #    endif | 
|---|
|  | 71 | #    if defined(ALPHA) | 
|---|
|  | 72 | inline static int GC_test_and_set(volatile unsigned int * addr) | 
|---|
|  | 73 |  | 
|---|