Hello Arnaud, On 12 Jul 2012, at 11:43, Arnaud Charlet wrote:
> The optimization of the expansion of protected procedure for the lock-free > implementation brings the following changes: > - Several renamings in order to match GCC built-in function wordings. > - Expected_Comp declaration moved to the the declarations list of the > procedure > - GCC built-in operation__sync_bool_compare_and_swap replaced by > __sync_val_compare_and_swap. > - Don't use an atomic compare and swap if Expected_Comp = Desired_Comp > > Tested on x86_64-pc-linux-gnu, committed on trunk > > 2012-07-12 Vincent Pucci <pu...@adacore.com> > > * exp_ch9.adb (Build_Lock_Free_Unprotected_Subprogram_Body): > Atomic_Load_N replaced by Lock_Free_Read_N. Atomic_Compare_Exchange_N > replaced by Lock_Free_Try_Write_N. > Renaming of several local variables. For > procedure, Expected_Comp declaration moved to the declaration > list of the procedure. > * rtsfind.ads: RE_Atomic_Compare_Exchange_8, > RE_Atomic_Compare_Exchange_16, RE_Atomic_Compare_Exchange_32, > RE_Atomic_Compare_Exchange_64, RE_Atomic_Load_8, > RE_Atomic_Load_16, RE_Atomic_Load_32, RE_Atomic_Load_64, > RE_Atomic_Synchronize, RE_Relaxed removed. RE_Lock_Free_Read_8, > RE_Lock_Free_Read_16, RE_Lock_Free_Read_32, RE_Lock_Free_Read_64, > RE_Lock_Free_Try_Write_8, RE_Lock_Free_Try_Write_16, > RE_Lock_Free_Try_Write_32, RE_Lock_Free_Try_Write_64 added. > * s-atopri.adb: New file. > * s-atopri.ads (Atomic_Compare_Exchange_8): Renaming of > parameters. Import primitive __sync_val_compare_and_swap_1. > (Atomic_Compare_Exchange_16): Renaming of parameters. > Import primitive __sync_val_compare_and_swap_2. > (Atomic_Compare_Exchange_32): Renaming of parameters. > Import primitive __sync_val_compare_and_swap_4. > (Atomic_Compare_Exchange_64): Renaming of parameters. Import > primitive __sync_val_compare_and_swap_8. > (Atomic_Load_8): Ptr renames parameter X. > (Atomic_Load_16): Ptr renames parameter X. > (Atomic_Load_32): Ptr renames parameter X. > (Atomic_Load_64): Ptr renames parameter X. > (Lock_Free_Read_8): New routine. > (Lock_Free_Read_16): New routine. > (Lock_Free_Read_32): New routine. > (Lock_Free_Read_64): New routine. > (Lock_Free_Try_Write_8): New routine. > (Lock_Free_Try_Write_16): New routine. > (Lock_Free_Try_Write_32): New routine. > (Lock_Free_Try_Write_64): New routine. http://gcc.gnu.org/ml/gcc-cvs/2012-07/msg00341.html This breaks ada bootstrap on powerpc-darwin9 with : Undefined symbols: "___sync_val_compare_and_swap_8", referenced from: _system__atomic_primitives__lock_free_try_write_64 in s-atopri.o "___atomic_load_8", referenced from: _system__atomic_primitives__lock_free_read_64 in s-atopri.o ld: symbol(s) not found (and, I assume any other target without __sync_val_compare_and_swap_8 builtin or library fall-back). If you think this is a target bug, let me know and I'll try and delve further. thanks Iain