gcc/fortran/ChangeLog.fortran-caf | 6 ++++++
gcc/fortran/trans-decl.c | 14 ++++++++++----
gcc/fortran/trans.h | 1 +
libgfortran/ChangeLog.fortran-caf | 5 +++++
libgfortran/caf/libcaf.h | 2 ++
libgfortran/caf/single.c | 13 +++++++++++++
6 files changed, 37 insertions(+), 4 deletions(-)
===================================================================
@@ -1,3 +1,8 @@
+2014-04-08 Tobias Burnus <burnus@net-b.de>
+
+ * caf/libcaf.h (_gfortran_caf_get): New.
+ * caf/single.c (_gfortran_caf_get): New.
+
2014-04-06 Tobias Burnus <burnus@net-b.de>
* caf/libcaf.h (_gfortran_caf_send_desc,
===================================================================
@@ -108,6 +108,8 @@ void *_gfortran_caf_register (size_t, caf_register
char *, int);
void _gfortran_caf_deregister (caf_token_t *, int *, char *, int);
+void _gfortran_caf_get (caf_token_t, size_t, int, void *, size_t, bool);
+
void _gfortran_caf_send (caf_token_t, size_t, int, void *, size_t, bool);
void _gfortran_caf_send_desc (caf_token_t, size_t, int, gfc_descriptor_t*,
gfc_descriptor_t*, bool);
===================================================================
@@ -149,6 +149,19 @@ _gfortran_caf_deregister (caf_token_t *token, int
*stat = 0;
}
+
+/* Get a scalar (or contiguous) data from remote image into a buffer. */
+
+void
+_gfortran_caf_get (caf_token_t token, size_t offset,
+ int image_id __attribute__ ((unused)),
+ void *buffer, size_t size, bool async __attribute__ ((unused)))
+{
+ void *src = (void *) ((char *) TOKEN (token) + offset);
+ memmove (buffer, src, size);
+}
+
+
/* Send scalar (or contiguous) data from buffer to a remote image. */
void
===================================================================
@@ -1,3 +1,9 @@
+2014-04-08 Tobias Burnus <burnus@net-b.de>
+
+ * trans.h (gfor_fndecl_caf_remote_get): Declare variables.
+ * trans-decl.c (gfor_fndecl_caf_remote_get): Define it.
+ (gfc_build_builtin_function_decls): Initialize it.
+
2014-04-06 Tobias Burnus <burnus@net-b.de>
* trans-intrinsic.c (conv_caf_send): Fix bugs with
===================================================================
@@ -700,6 +700,7 @@ extern GTY(()) tree gfor_fndecl_caf_this_image;
extern GTY(()) tree gfor_fndecl_caf_num_images;
extern GTY(()) tree gfor_fndecl_caf_register;
extern GTY(()) tree gfor_fndecl_caf_deregister;
+extern GTY(()) tree gfor_fndecl_caf_remote_get;
extern GTY(()) tree gfor_fndecl_caf_send;
extern GTY(()) tree gfor_fndecl_caf_send_desc;
extern GTY(()) tree gfor_fndecl_caf_send_desc_scalar;
===================================================================
@@ -125,6 +125,7 @@ tree gfor_fndecl_caf_this_image;
tree gfor_fndecl_caf_num_images;
tree gfor_fndecl_caf_register;
tree gfor_fndecl_caf_deregister;
+tree gfor_fndecl_caf_remote_get;
tree gfor_fndecl_caf_send;
tree gfor_fndecl_caf_send_desc;
tree gfor_fndecl_caf_send_desc_scalar;
@@ -3262,22 +3263,27 @@ gfc_build_builtin_function_decls (void)
gfor_fndecl_caf_deregister = gfc_build_library_function_decl_with_spec (
get_identifier (PREFIX("caf_deregister")), ".WWW", void_type_node, 4,
- ppvoid_type_node, pint_type, pchar_type_node, integer_type_node);
+ ppvoid_type_node, pint_type, pchar_type_node, integer_type_node);
+ gfor_fndecl_caf_remote_get = gfc_build_library_function_decl_with_spec (
+ get_identifier (PREFIX("caf_get")), "R..W..", void_type_node, 6,
+ pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
+ size_type_node, boolean_type_node);
+
gfor_fndecl_caf_send = gfc_build_library_function_decl_with_spec (
get_identifier (PREFIX("caf_send")), "R..R..", void_type_node, 6,
- pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
+ pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
size_type_node, boolean_type_node);
gfor_fndecl_caf_send_desc = gfc_build_library_function_decl_with_spec (
get_identifier (PREFIX("caf_send_desc")), "R..RR.", void_type_node, 6,
- pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
+ pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
pvoid_type_node, boolean_type_node);
gfor_fndecl_caf_send_desc_scalar
= gfc_build_library_function_decl_with_spec (
get_identifier (PREFIX("caf_send_desc_scalar")), "R..RR..", void_type_node, 6,
- pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
+ pvoid_type_node, size_type_node, integer_type_node, pvoid_type_node,
pvoid_type_node, boolean_type_node);
gfor_fndecl_caf_critical = gfc_build_library_function_decl (