Skip to content
Snippets Groups Projects
  • Janne Blomqvist's avatar
    0536d5b3
    Replace sync builtins with atomic builtins · 0536d5b3
    Janne Blomqvist authored
    The old __sync builtins have been deprecated for a long time now in
    favor of the __atomic builtins following the C++11/C11 memory model.
    This patch converts libgfortran to use the modern __atomic builtins.
    
    At the same time I weakened the consistency to relaxed for
    incrementing and decrementing the counter, and acquire-release when
    decrementing to check whether the counter is 0 and the unit can be
    freed.  This is similar to e.g. std::shared_ptr in C++.
    
    Regtested on x86_64-pc-linux-gnu.
    
    libgfortran/ChangeLog:
    
    2018-11-22  Janne Blomqvist  <jb@gcc.gnu.org>
    
    	* acinclude.m4 (LIBGFOR_CHECK_ATOMIC_FETCH_ADD): Rename and test
    	presence of atomic builtins instead of sync builtins.
    	* configure.ac (LIBGFOR_CHECK_ATOMIC_FETCH_ADD): Call new test.
    	* io/io.h (inc_waiting_locked): Use __atomic_fetch_add.
    	(predec_waiting_locked): Use __atomic_add_fetch.
    	(dec_waiting_unlocked): Use __atomic_fetch_add.
    	* config.h.in: Regenerated.
    	* configure: Regenerated.
            * Makefile.in: Regenerated.
    
    From-SVN: r266367
    0536d5b3
    History
    Replace sync builtins with atomic builtins
    Janne Blomqvist authored
    The old __sync builtins have been deprecated for a long time now in
    favor of the __atomic builtins following the C++11/C11 memory model.
    This patch converts libgfortran to use the modern __atomic builtins.
    
    At the same time I weakened the consistency to relaxed for
    incrementing and decrementing the counter, and acquire-release when
    decrementing to check whether the counter is 0 and the unit can be
    freed.  This is similar to e.g. std::shared_ptr in C++.
    
    Regtested on x86_64-pc-linux-gnu.
    
    libgfortran/ChangeLog:
    
    2018-11-22  Janne Blomqvist  <jb@gcc.gnu.org>
    
    	* acinclude.m4 (LIBGFOR_CHECK_ATOMIC_FETCH_ADD): Rename and test
    	presence of atomic builtins instead of sync builtins.
    	* configure.ac (LIBGFOR_CHECK_ATOMIC_FETCH_ADD): Call new test.
    	* io/io.h (inc_waiting_locked): Use __atomic_fetch_add.
    	(predec_waiting_locked): Use __atomic_add_fetch.
    	(dec_waiting_unlocked): Use __atomic_fetch_add.
    	* config.h.in: Regenerated.
    	* configure: Regenerated.
            * Makefile.in: Regenerated.
    
    From-SVN: r266367