diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2008-03-19 15:42:55 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2008-03-19 15:42:55 +0000 |
commit | 8e1d7686de136571f68185066dec9bcb28019a8d (patch) | |
tree | 370b9d6b0738999469c560cab3acf85bde3ceb2d /libgfortran/libgfortran.h | |
parent | cd7e0bd4b185112f64b7b78264b0bfa6eb27d26b (diff) | |
download | gcc-8e1d7686de136571f68185066dec9bcb28019a8d.zip gcc-8e1d7686de136571f68185066dec9bcb28019a8d.tar.gz gcc-8e1d7686de136571f68185066dec9bcb28019a8d.tar.bz2 |
re PR libfortran/32972 (performance of pack/unpack)
2008-03-19 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/32972
* Makefile.am (in_pack_c): Add in_pack_i1.c, in_pack_i2.c,
in_pack_r4.c, in_pack_r8.c, in_pack_r10.c and in_pack_r16.c.
(in_unpack_c): Add in_unpack_i1.c, in_unpack_i2.c,
in_unpack_r4.c, in_unpack_r8.c, in_unpack_r10.c and
in_unpack_r16.c.
* Makefile.in: Regenerate.
* libgfortran.h: Add prototypes for internal_pack_1,
internal_pack_2, internal_pack_16, internal_pack_r4,
internal_pack_r8, internal_pack_r10, internal_pack_r16,
internal_pack_c10 and internal_pack_c16. Add prototypes for
internal_unpack_1, internal_unpack_2, internal_unpack_16,
internal_unpack_r4, internal_unpack_r8, internal_unpack_r10,
internal_unpack_r16, internal_unpack_c10 and
internal_unpack_c16.
* runtime/in_pack_generic.c (internal_pack): Use sizeof instead
of hardwired sizes.
Add calls to internal_pack_1, internal_pack_2,
internal_pack_16, internal_pack_r4, internal_pack_r8,
internal_pack_r10, internal_pack_r16, internal_pack_c10 and
internal_pack_c16.
* runtime/in_unpack_generic.c (internal_unpack): Use sizeof
instead of hardwired sizes.
Add calls to internal_unpack_1, internal_unpack_2,
internal_unpack_16, internal_unpack_r4, internal_unpack_r8,
internal_unpack_r10, internal_unpack_r16, internal_unpack_c10
and internal_unpack_c16.
* generated/in_pack_r4.c: New file.
* generated/in_pack_i2.c: New file.
* generated/in_unpack_i1.c: New file.
* generated/in_pack_r10.c: New file.
* generated/in_unpack_r4.c: New file.
* generated/in_unpack_i2.c: New file.
* generated/in_unpack_r16.c: New file.
* generated/in_pack_r8.c: New file.
* generated/in_unpack_r10.c: New file.
* generated/in_unpack_r8.c: New file.
* generated/in_pack_r16.c: New file.
* generated/in_pack_i1.c: New file.
2008-03-19 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/32972
* gfortran.dg/internal_pack_1.f90: New test case.
* gfortran.dg/internal_pack_2.f90: New test case.
* gfortran.dg/internal_pack_3.f90: New test case.
From-SVN: r133344
Diffstat (limited to 'libgfortran/libgfortran.h')
-rw-r--r-- | libgfortran/libgfortran.h | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h index 427b2fa..98af40e 100644 --- a/libgfortran/libgfortran.h +++ b/libgfortran/libgfortran.h @@ -609,10 +609,15 @@ extern void reshape_packed (char *, index_type, const char *, index_type, const char *, index_type); internal_proto(reshape_packed); -/* Repacking functions. */ +/* Repacking functions. These are called internally by internal_pack + and internal_unpack. */ + +GFC_INTEGER_1 *internal_pack_1 (gfc_array_i1 *); +internal_proto(internal_pack_1); + +GFC_INTEGER_2 *internal_pack_2 (gfc_array_i2 *); +internal_proto(internal_pack_2); -/* ??? These aren't currently used by the compiler, though we - certainly could do so. */ GFC_INTEGER_4 *internal_pack_4 (gfc_array_i4 *); internal_proto(internal_pack_4); @@ -624,6 +629,22 @@ GFC_INTEGER_16 *internal_pack_16 (gfc_array_i16 *); internal_proto(internal_pack_16); #endif +GFC_REAL_4 *internal_pack_r4 (gfc_array_r4 *); +internal_proto(internal_pack_r4); + +GFC_REAL_8 *internal_pack_r8 (gfc_array_r8 *); +internal_proto(internal_pack_r8); + +#if defined HAVE_GFC_REAL_10 +GFC_REAL_10 *internal_pack_r10 (gfc_array_r10 *); +internal_proto(internal_pack_r10); +#endif + +#if defined HAVE_GFC_REAL_16 +GFC_REAL_16 *internal_pack_r16 (gfc_array_r16 *); +internal_proto(internal_pack_r16); +#endif + GFC_COMPLEX_4 *internal_pack_c4 (gfc_array_c4 *); internal_proto(internal_pack_c4); @@ -635,6 +656,17 @@ GFC_COMPLEX_10 *internal_pack_c10 (gfc_array_c10 *); internal_proto(internal_pack_c10); #endif +#if defined HAVE_GFC_COMPLEX_16 +GFC_COMPLEX_16 *internal_pack_c16 (gfc_array_c16 *); +internal_proto(internal_pack_c16); +#endif + +extern void internal_unpack_1 (gfc_array_i1 *, const GFC_INTEGER_1 *); +internal_proto(internal_unpack_1); + +extern void internal_unpack_2 (gfc_array_i2 *, const GFC_INTEGER_2 *); +internal_proto(internal_unpack_2); + extern void internal_unpack_4 (gfc_array_i4 *, const GFC_INTEGER_4 *); internal_proto(internal_unpack_4); @@ -646,6 +678,22 @@ extern void internal_unpack_16 (gfc_array_i16 *, const GFC_INTEGER_16 *); internal_proto(internal_unpack_16); #endif +extern void internal_unpack_r4 (gfc_array_r4 *, const GFC_REAL_4 *); +internal_proto(internal_unpack_r4); + +extern void internal_unpack_r8 (gfc_array_r8 *, const GFC_REAL_8 *); +internal_proto(internal_unpack_r8); + +#if defined HAVE_GFC_REAL_10 +extern void internal_unpack_r10 (gfc_array_r10 *, const GFC_REAL_10 *); +internal_proto(internal_unpack_r10); +#endif + +#if defined HAVE_GFC_REAL_16 +extern void internal_unpack_r16 (gfc_array_r16 *, const GFC_REAL_16 *); +internal_proto(internal_unpack_r16); +#endif + extern void internal_unpack_c4 (gfc_array_c4 *, const GFC_COMPLEX_4 *); internal_proto(internal_unpack_c4); |