diff options
author | Alessandro Fanfarillo <fanfarillo.gcc@gmail.com> | 2015-03-10 11:58:01 -0600 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2015-03-10 18:58:01 +0100 |
commit | 9315dff064f2ddbbc159d5afcee176cab06bfcba (patch) | |
tree | 3b81e10f4b9ef07bf487371bb8be9be05d418397 /libgfortran/caf | |
parent | a4d66d7dc7a140adf8d2bfb87d4d6354abc7b340 (diff) | |
download | gcc-9315dff064f2ddbbc159d5afcee176cab06bfcba.tar.gz |
trans.h (caf_sync_memory): New function decl tree.
2015-03-10 Alessandro Fanfarillo <fanfarillo.gcc@gmail.com>
Tobias Burnus <burnus@net-b.de>
* trans.h (caf_sync_memory): New function decl tree.
* trans-decl.c (gfc_build_builtin_function_decls): Define it.
(create_main_function): Don't call sync_synchronize and leave
it to the CAF library.
* trans-stmt.c (gfc_trans_stop): Ditto.
(gfc_trans_sync): Ditto; add call library call for sync memory.
* gfortran.dg/coarray_sync_memory.f90: New.
* caf/libcaf.h (_gfortran_caf_sync_memory): New prototype.
* caf/single.c (_gfortran_caf_sync_memory): Implement.
(_gfortran_caf_sync_all, _gfortran_caf_sync_image): Add
__asm__ __volatile___ ("":::"memory").
Co-Authored-By: Tobias Burnus <burnus@net-b.de>
From-SVN: r221329
Diffstat (limited to 'libgfortran/caf')
-rw-r--r-- | libgfortran/caf/libcaf.h | 1 | ||||
-rw-r--r-- | libgfortran/caf/single.c | 13 |
2 files changed, 14 insertions, 0 deletions
diff --git a/libgfortran/caf/libcaf.h b/libgfortran/caf/libcaf.h index bd5c9c62cbe..660bd7c0945 100644 --- a/libgfortran/caf/libcaf.h +++ b/libgfortran/caf/libcaf.h @@ -100,6 +100,7 @@ void *_gfortran_caf_register (size_t, caf_register_t, caf_token_t *, int *, void _gfortran_caf_deregister (caf_token_t *, int *, char *, int); void _gfortran_caf_sync_all (int *, char *, int); +void _gfortran_caf_sync_memory (int *, char *, int); void _gfortran_caf_sync_images (int, int[], int *, char *, int); void _gfortran_caf_error_stop_str (const char *, int32_t) diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c index 7405c91846c..daef281ef2e 100644 --- a/libgfortran/caf/single.c +++ b/libgfortran/caf/single.c @@ -162,6 +162,18 @@ _gfortran_caf_sync_all (int *stat, char *errmsg __attribute__ ((unused)), int errmsg_len __attribute__ ((unused))) { + __asm__ __volatile__ ("":::"memory"); + if (stat) + *stat = 0; +} + + +void +_gfortran_caf_sync_memory (int *stat, + char *errmsg __attribute__ ((unused)), + int errmsg_len __attribute__ ((unused))) +{ + __asm__ __volatile__ ("":::"memory"); if (stat) *stat = 0; } @@ -186,6 +198,7 @@ _gfortran_caf_sync_images (int count __attribute__ ((unused)), } #endif + __asm__ __volatile__ ("":::"memory"); if (stat) *stat = 0; } |