summaryrefslogtreecommitdiff
path: root/libgfortran/caf
diff options
context:
space:
mode:
authorAlessandro Fanfarillo <fanfarillo.gcc@gmail.com>2015-03-10 11:58:01 -0600
committerTobias Burnus <burnus@gcc.gnu.org>2015-03-10 18:58:01 +0100
commit9315dff064f2ddbbc159d5afcee176cab06bfcba (patch)
tree3b81e10f4b9ef07bf487371bb8be9be05d418397 /libgfortran/caf
parenta4d66d7dc7a140adf8d2bfb87d4d6354abc7b340 (diff)
downloadgcc-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.h1
-rw-r--r--libgfortran/caf/single.c13
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;
}