This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR19294


 Hi,

  This patch adds m4/transposec.m4 which generates transpose functions
transpose_c4 and transpose_c8 functions for complex types.  This patch
has been bootstrapped and regtested on powerpc-linux and sparc-linux with
no regressions and fixes intrinsics_transpose.f90.  The generated files,
including the diff to Makefile.in, are attached to the bug.

  Ok for mainline?

-- 
Thanks,
Jim

http://www.student.cs.uwaterloo.ca/~ja2morri/
http://phython.blogspot.com
http://open.nit.ca/wiki/?page=jim

2005-01-20  James A. Morrison  <phython@gcc.gnu.org>

	PR fortran/19294
	* iresolve.c (gfc_resolve_transpose): Resolve to transpose_c4 or
	transpose_c8 for complex types.
	* Makefile.am: Generate transpose_c4.c and transpose_c8.c from
	m4/transposec.m4.
	* m4/transposec.m4: New file.
	* Makefile.in: Regenerate.
	* generated/transpose_c4.c, generated/transpose_c8.c: Generate.

Index: gcc/fortran/iresolve.c
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/fortran/iresolve.c,v
retrieving revision 1.30
diff -u -p -r1.30 iresolve.c
--- gcc/fortran/iresolve.c	18 Jan 2005 12:11:52 -0000	1.30
+++ gcc/fortran/iresolve.c	19 Jan 2005 13:34:08 -0000
@@ -1340,31 +1340,30 @@ gfc_resolve_transpose (gfc_expr * f, gfc
       mpz_init_set (f->shape[1], matrix->shape[0]);
     }
 
-  switch (matrix->ts.type)
-    {
-    case BT_COMPLEX:
-      kind = matrix->ts.kind * 2;
-      break;
-
-    case BT_REAL:
-    case BT_INTEGER:
-    case BT_LOGICAL:
-      kind = matrix->ts.kind;
-      break;
-
-    default:
-      kind = 0;
-      break;
-
-    }
+  kind = matrix->ts.kind;
 
   switch (kind)
     {
     case 4:
     case 8:
-    /* case 16: */
-      f->value.function.name =
-        gfc_get_string (PREFIX("transpose_%d"), kind);
+      switch (matrix->ts.type)
+        {
+        case BT_COMPLEX:
+          f->value.function.name =
+            gfc_get_string (PREFIX("transpose_c%d"), kind);
+          break;
+
+        case BT_REAL:
+        case BT_INTEGER:
+        case BT_LOGICAL:
+          f->value.function.name =
+            gfc_get_string (PREFIX("transpose_%d"), kind);
+          break;
+
+        default:
+          f->value.function.name = PREFIX("transpose");
+          break;
+        }
       break;
 
     default:
Index: libgfortran/Makefile.am
===================================================================
RCS file: /cvsroot/gcc/gcc/libgfortran/Makefile.am,v
retrieving revision 1.28
diff -u -p -r1.28 Makefile.am
--- libgfortran/Makefile.am	9 Dec 2004 16:31:19 -0000	1.28
+++ libgfortran/Makefile.am	19 Jan 2005 13:34:34 -0000
@@ -204,6 +204,10 @@ i_transpose_c= \
 generated/transpose_i4.c \
 generated/transpose_i8.c
 
+i_transposec_c= \
+generated/transpose_c4.c \
+generated/transpose_c8.c
+
 i_shape_c= \
 generated/shape_i4.c \
 generated/shape_i8.c
@@ -268,13 +272,15 @@ m4_files= m4/iparm.m4 m4/ifunction.m4 m4
     m4/dotprod.m4 m4/dotprodl.m4 m4/dotprodc.m4 m4/matmul.m4 m4/matmull.m4 \
     m4/ctrig.m4 m4/cexp.m4 m4/chyp.m4 m4/mtype.m4 \
     m4/specific.m4 m4/specific2.m4 m4/head.m4 m4/shape.m4 m4/reshape.m4 \
-    m4/transpose.m4 m4/eoshift1.m4 m4/eoshift3.m4 m4/exponent.m4 \
+    m4/transpose.m4 m4/transposec.m4 m4/eoshift1.m4 m4/eoshift3.m4 \
+    m4/exponent.m4 \
     m4/fraction.m4 m4/nearest.m4 m4/set_exponent.m4 m4/pow.m4
 
 gfor_built_src= $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \
     $(i_maxloc1_c) $(i_maxval_c) $(i_minloc0_c) $(i_minloc1_c) $(i_minval_c) \
     $(i_product_c) $(i_sum_c) $(i_dotprod_c) $(i_dotprodl_c) $(i_dotprodc_c) \
-    $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_shape_c) $(i_eoshift1_c) \
+    $(i_matmul_c) $(i_matmull_c) $(i_transpose_c) $(i_transposec_c) \
+    $(i_shape_c) $(i_eoshift1_c) \
     $(i_eoshift3_c) $(i_cshift1_c) $(i_reshape_c) $(in_pack_c) $(in_unpack_c) \
     $(i_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \
     $(i_pow_c) \
@@ -458,6 +464,9 @@ $(i_matmull_c): m4/matmull.m4 $(I_M4_DEP
 $(i_transpose_c): m4/transpose.m4 $(I_M4_DEPS)
 	m4 -Dfile=$@ -I$(srcdir)/m4 transpose.m4 > $(srcdir)/$@
 
+$(i_transposec_c): m4/transposec.m4 $(I_M4_DEPS)
+	m4 -Dfile=$@ -I$(srcdir)/m4 transposec.m4 > $(srcdir)/$@
+
 $(i_shape_c): m4/shape.m4 $(I_M4_DEPS)
 	m4 -Dfile=$@ -I$(srcdir)/m4 shape.m4 > $(srcdir)/$@
 

Attachment: transposec.m4
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]