On Thu Jul 31 16:38:12 2008, [EMAIL PROTECTED] wrote: > > I believe you can safely modify the file and add the line after: > > #CONDITIONED_LINE(i386_has_gcc_cmpxchg): $(SRC_DIR)/atomic/gcc_x86$(O) \ > > (That's on line 372 for me). >
Thanks. I tried that out. I applied (in sandbox) the revised version attached. 'make' completed. But for my efforts I was rewarded with test failures in the most relevant file -- a file that had previously been passing consistently. See second attachment. myconfig also attached. So the patch is not yet ready for prime time. Thank you very much.
myconfig
Description: Binary data
Index: include/parrot/atomic/gcc_pcc.h =================================================================== --- include/parrot/atomic/gcc_pcc.h (revision 29917) +++ include/parrot/atomic/gcc_pcc.h (working copy) @@ -23,49 +23,11 @@ # define PARROT_ATOMIC_PTR_SET(a, b) (a).val = (void *) (b) -inline static void *parrot_ppc_cmpset(void * volatile *ptr, - void *expect, void *update) -{ - void *tmp; - /* see http://www-128.ibm.com/developerworks/linux/library/pa-atom/ */ - __asm__ __volatile__(/*%0 = tmp, %1 = ptr, %2 = old, %3 = new */ - "1: lwarx %0, 0, %1\n" /* tmp = *ptr, with reservation */ - " cmpw %2, %0\n" /* tmp == old ? */ - " bne 2f\n" /* no, goto flush reservation, end */ - /* " sync\n" -- XXX needed on PPC 405, see - * http://www.kegel.com/xgcc3/ppc405erratum77.html */ - " stwcx. %3, 0, %1\n" /* store new using reservation */ - " bne- 1b\n" /* spin on failure of reservation; - is branch prediction hint */ - " b 3f\n" "2: stwcx. %0, 0, %1\n" /* flush reserveration */ - "3: \n" /* end label */ - : /* output */ - "=&r"(tmp) - : /* input */ - "r"(ptr), "r"(expect), "r"(update) - : /* clobber */ - "memory"); - return tmp; -} +PARROT_INLINE void +*parrot_ppc_cmpset(void * volatile *ptr, void *expect, void *update); -inline static long parrot_ppc_add(volatile long *val, long what) -{ - long tmp; - __asm__ __volatile__(/*%0 = tmp, %1 = val, %2 = what */ - "1: lwarx %0, 0, %1\n" /* tmp = *val, with reservation */ - " add %0, %0, %2\n" /* tmp += what */ - /* " sync\n" -- XXX needed on PPC 405, see - * http://www.kegel.com/xgcc3/ppc405erratum77.html */ - " stwcx. %0, 0, %1\n" /* *val <- tmp using reservation */ - " bne- 1b\n" /* spin on failure of reservation; - is branch prediction hint */ - "2: \n" /* end label */ - : /* output */ - "=&r"(tmp) - : /* input */ - "r"(val), "r"(what) - : /* clobber */ - "memory"); - return tmp; -} +PARROT_INLINE long +parrot_ppc_add(volatile long *val, long what); # define PARROT_ATOMIC_PTR_CAS(result, a, expect, update) \ do { \ Index: config/gen/makefiles/root.in =================================================================== --- config/gen/makefiles/root.in (revision 29917) +++ config/gen/makefiles/root.in (working copy) @@ -370,6 +370,7 @@ $(OPS_DIR)/core_ops_switch$(O) \ \ #CONDITIONED_LINE(i386_has_gcc_cmpxchg): $(SRC_DIR)/atomic/gcc_x86$(O) \ + $(SRC_DIR)/atomic/gcc_pcc$(O) \ $(SRC_DIR)/builtin$(O) \ $(SRC_DIR)/byteorder$(O) \ $(SRC_DIR)/charset$(O) \
[gcc_pcc] 532 $ prove -v t/src/atomic.t t/src/atomic.... 1..4 ok 1 - PARROT_ATOMIC_PTR_GET/SET ok 2 - PARROT_ATOMIC_INT_GET/SET not ok 3 - PARROT_ATOMIC_PTR_CAS # Failed test 'PARROT_ATOMIC_PTR_CAS' # at t/src/atomic.t line 120. # Exited with error code: [SIGNAL 5] # Received: # dyld: lazy symbol binding failed: Symbol not found: _parrot_ppc_cmpset # Referenced from: /Users/jimk/work/gcc_pcc/./t/src/atomic_3 # Expected in: dynamic lookup # # dyld: Symbol not found: _parrot_ppc_cmpset # Referenced from: /Users/jimk/work/gcc_pcc/./t/src/atomic_3 # Expected in: dynamic lookup # # # Expected: # ok 1 # ok 2 # ok 3 # ok 4 # not ok 4 - PARROT_ATOMIC_INT_(CAS|INC|DEC) # Failed test 'PARROT_ATOMIC_INT_(CAS|INC|DEC)' # at t/src/atomic.t line 180. # Exited with error code: [SIGNAL 5] # Received: # dyld: lazy symbol binding failed: Symbol not found: _parrot_ppc_add # Referenced from: /Users/jimk/work/gcc_pcc/./t/src/atomic_4 # Expected in: dynamic lookup # # dyld: Symbol not found: _parrot_ppc_add # Referenced from: /Users/jimk/work/gcc_pcc/./t/src/atomic_4 # Expected in: dynamic lookup # # # Expected: # ok 1 # # Looks like you failed 2 tests of 4. Dubious, test returned 2 (wstat 512, 0x200) Failed 2/4 subtests Test Summary Report ------------------- t/src/atomic (Wstat: 512 Tests: 4 Failed: 2) Failed tests: 3-4 Non-zero exit status: 2 Files=1, Tests=4, 40 wallclock secs ( 0.04 usr 0.02 sys + 2.90 cusr 1.76 csys = 4.72 CPU) Result: FAIL