f95-lang.c (gfc_init_builtin_functions): Use vold_list_node.
authorFeng Wang <fengwang@nudt.edu.cn>
Wed, 19 May 2004 00:34:59 +0000 (00:34 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Wed, 19 May 2004 00:34:59 +0000 (00:34 +0000)
* f95-lang.c (gfc_init_builtin_functions): Use vold_list_node.
Create decls for __builtin_pow{,f}.
* gfortran.h (PREFIX_LEN): Define.
* trans-decl.c (gfor_fndecl_math_powi): Add.
(gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove.
(gfc_build_intrinsic_function_decls): Create decls for powi.
* trans-expr.c (powi_table): Add.
(gfc_conv_integer_power): Remove.
(gfc_conv_powi): New function.
(gfc_conv_cst_int_power): New function.
(gfc_conv_power_op): Use new powi routines.
* trans.h (struct gfc_powdecl_list): Add.
(gfor_fndecl_math_powi): Add.
(gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove.
testsuite/
* gfortran.fortran-torture/execute/power.f90: Test constant integers.
libgfortran/
* Makefile.am (i_pow_c): Set it. Add build rule.
(gfor_built_src): Use it.
(m4_files): add m4/pow.m4.
* Makefile.in: Regenerate.
* m4/pow.m4: New file.
* generated/pow_*.c: Regenerate.

From-SVN: r82014

24 files changed:
gcc/fortran/ChangeLog
gcc/fortran/f95-lang.c
gcc/fortran/gfortran.h
gcc/fortran/trans-decl.c
gcc/fortran/trans-expr.c
gcc/fortran/trans.h
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.fortran-torture/execute/power.f90
libgfortran/ChangeLog
libgfortran/Makefile.am
libgfortran/Makefile.in
libgfortran/generated/pow_c4_i4.c [new file with mode: 0644]
libgfortran/generated/pow_c4_i8.c [new file with mode: 0644]
libgfortran/generated/pow_c8_i4.c [new file with mode: 0644]
libgfortran/generated/pow_c8_i8.c [new file with mode: 0644]
libgfortran/generated/pow_i4_i4.c [new file with mode: 0644]
libgfortran/generated/pow_i4_i8.c [new file with mode: 0644]
libgfortran/generated/pow_i8_i4.c [new file with mode: 0644]
libgfortran/generated/pow_i8_i8.c [new file with mode: 0644]
libgfortran/generated/pow_r4_i4.c [new file with mode: 0644]
libgfortran/generated/pow_r4_i8.c [new file with mode: 0644]
libgfortran/generated/pow_r8_i4.c [new file with mode: 0644]
libgfortran/generated/pow_r8_i8.c [new file with mode: 0644]
libgfortran/m4/pow.m4 [new file with mode: 0644]

index 0ee8fbee30586b0548eb4bb24af3cf6933becdfd..babea082d994b9fb38fda00ab51dafb4fe9c0c00 100644 (file)
@@ -1,3 +1,20 @@
+2004-05-18  Paul Brook  <paul@codesourcery.com>
+
+       * f95-lang.c (gfc_init_builtin_functions): Use vold_list_node.
+       Create decls for __builtin_pow{,f}.
+       * gfortran.h (PREFIX_LEN): Define.
+       * trans-decl.c (gfor_fndecl_math_powi): Add.
+       (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove.
+       (gfc_build_intrinsic_function_decls): Create decls for powi.
+       * trans-expr.c (powi_table): Add.
+       (gfc_conv_integer_power): Remove.
+       (gfc_conv_powi): New function.
+       (gfc_conv_cst_int_power): New function.
+       (gfc_conv_power_op): Use new powi routines.
+       * trans.h (struct gfc_powdecl_list): Add.
+       (gfor_fndecl_math_powi): Add.
+       (gfor_fndecl_math_powf, gfor_fndecl_math_pow): Remove.
+
 2004-05-18  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
        * trans.c, trans-decl.c: Fix comment typos.
index e4563d73fabab6727f7879345ec48e1e1863d3df..ab151fcd7373337015967b3833e1c46ae050acd5 100644 (file)
@@ -750,16 +750,13 @@ gfc_init_builtin_functions (void)
   tree mfunc_double[2];
   tree ftype;
   tree tmp;
-  tree voidchain;
 
-  voidchain = tree_cons (NULL_TREE, void_type_node, NULL_TREE);
-
-  tmp = tree_cons (NULL_TREE, float_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, float_type_node, void_list_node);
   mfunc_float[0] = build_function_type (float_type_node, tmp);
   tmp = tree_cons (NULL_TREE, float_type_node, tmp);
   mfunc_float[1] = build_function_type (float_type_node, tmp);
 
-  tmp = tree_cons (NULL_TREE, double_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, double_type_node, void_list_node);
   mfunc_double[0] = build_function_type (double_type_node, tmp);
   tmp = tree_cons (NULL_TREE, double_type_node, tmp);
   mfunc_double[1] = build_function_type (double_type_node, tmp);
@@ -777,57 +774,63 @@ gfc_init_builtin_functions (void)
   gfc_define_builtin ("__builtin_roundf", mfunc_float[0], 
                      BUILT_IN_ROUNDF, "roundf", true);
 
+  /* These are used to implement the ** operator.  */
+  gfc_define_builtin ("__builtin_pow", mfunc_double[0], 
+                     BUILT_IN_POW, "pow", true);
+  gfc_define_builtin ("__builtin_powf", mfunc_float[0], 
+                     BUILT_IN_POWF, "powf", true);
+
   /* Other builtin functions we use.  */
 
-  tmp = tree_cons (NULL_TREE, long_integer_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node);
   tmp = tree_cons (NULL_TREE, long_integer_type_node, tmp);
   ftype = build_function_type (long_integer_type_node, tmp);
   gfc_define_builtin ("__builtin_expect", ftype, BUILT_IN_EXPECT,
                      "__builtin_expect", true);
 
-  tmp = tree_cons (NULL_TREE, size_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
   tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
   tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
   ftype = build_function_type (pvoid_type_node, tmp);
   gfc_define_builtin ("__builtin_memcpy", ftype, BUILT_IN_MEMCPY,
                      "memcpy", false);
 
-  tmp = tree_cons (NULL_TREE, integer_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, integer_type_node, void_list_node);
   ftype = build_function_type (integer_type_node, tmp);
   gfc_define_builtin ("__builtin_clz", ftype, BUILT_IN_CLZ, "clz", true);
 
-  tmp = tree_cons (NULL_TREE, long_integer_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, long_integer_type_node, void_list_node);
   ftype = build_function_type (integer_type_node, tmp);
   gfc_define_builtin ("__builtin_clzl", ftype, BUILT_IN_CLZL, "clzl", true);
 
-  tmp = tree_cons (NULL_TREE, long_long_integer_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, long_long_integer_type_node, void_list_node);
   ftype = build_function_type (integer_type_node, tmp);
   gfc_define_builtin ("__builtin_clzll", ftype, BUILT_IN_CLZLL, "clzll", true);
 
-  tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
   tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
   tmp = tree_cons (NULL_TREE, pvoid_type_node, tmp);
   ftype = build_function_type (void_type_node, tmp);
   gfc_define_builtin ("__builtin_init_trampoline", ftype,
                      BUILT_IN_INIT_TRAMPOLINE, "init_trampoline", false);
 
-  tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
   ftype = build_function_type (pvoid_type_node, tmp);
   gfc_define_builtin ("__builtin_adjust_trampoline", ftype,
                      BUILT_IN_ADJUST_TRAMPOLINE, "adjust_trampoline", true);
 
-  tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
-  tmp = tree_cons (NULL_TREE, size_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
+  tmp = tree_cons (NULL_TREE, size_type_node, void_list_node);
   ftype = build_function_type (pvoid_type_node, tmp);
   gfc_define_builtin ("__builtin_stack_alloc", ftype, BUILT_IN_STACK_ALLOC,
                      "stack_alloc", false);
 
   /* The stack_save and stack_restore builtins aren't used directly.  They
      are inserted during gimplification to implement stack_alloc calls.  */
-  ftype = build_function_type (pvoid_type_node, voidchain);
+  ftype = build_function_type (pvoid_type_node, void_list_node);
   gfc_define_builtin ("__builtin_stack_save", ftype, BUILT_IN_STACK_SAVE,
                      "stack_save", false);
-  tmp = tree_cons (NULL_TREE, pvoid_type_node, voidchain);
+  tmp = tree_cons (NULL_TREE, pvoid_type_node, void_list_node);
   ftype = build_function_type (void_type_node, tmp);
   gfc_define_builtin ("__builtin_stack_restore", ftype, BUILT_IN_STACK_RESTORE,
                      "stack_restore", false);
index 211aafdbbdca45de662e5f6c7c935debbe57afd4..e698cd3c8008c2299c422522374162d74b2a0903 100644 (file)
@@ -82,6 +82,7 @@ char *alloca ();
    ugly to look at and a pain to type when you add the prefix by hand,
    so we hide it behind a macro.  */
 #define PREFIX(x) "_gfortran_" x
+#define PREFIX_LEN 10
 
 /* Macro to initialize an mstring structure.  */
 #define minit(s, t) { s, NULL, t }
index b5f3508684c80fc8d8d07b3fa43eb03e746a53a1..8708bea14b109467b901b9c286cab1cc0bdaeedc 100644 (file)
@@ -93,8 +93,7 @@ tree gfor_fndecl_associated;
 /* Math functions.  Many other math functions are handled in
    trans-intrinsic.c.  */
 
-tree gfor_fndecl_math_powf;
-tree gfor_fndecl_math_pow;
+gfc_powdecl_list gfor_fndecl_math_powi[3][2];
 tree gfor_fndecl_math_cpowf;
 tree gfor_fndecl_math_cpow;
 tree gfor_fndecl_math_cabsf;
@@ -1398,14 +1397,40 @@ gfc_build_intrinsic_function_decls (void)
 
 
   /* Power functions.  */
-  gfor_fndecl_math_powf =
-    gfc_build_library_function_decl (get_identifier ("powf"),
-                                    gfc_real4_type_node,
-                                    1, gfc_real4_type_node);
-  gfor_fndecl_math_pow =
-    gfc_build_library_function_decl (get_identifier ("pow"),
-                                    gfc_real8_type_node,
-                                    1, gfc_real8_type_node);
+  {
+    tree type;
+    tree itype;
+    int kind;
+    int ikind;
+    static int kinds[2] = {4, 8};
+    char name[PREFIX_LEN + 10]; /* _gfortran_pow_?n_?n */
+
+    for (ikind=0; ikind < 2; ikind++)
+      {
+       itype = gfc_get_int_type (kinds[ikind]);
+       for (kind = 0; kind < 2; kind ++)
+         {
+           type = gfc_get_int_type (kinds[kind]);
+           sprintf(name, PREFIX("pow_i%d_i%d"), kinds[kind], kinds[ikind]);
+           gfor_fndecl_math_powi[kind][ikind].integer =
+             gfc_build_library_function_decl (get_identifier (name),
+                 type, 2, type, itype);
+
+           type = gfc_get_real_type (kinds[kind]);
+           sprintf(name, PREFIX("pow_r%d_i%d"), kinds[kind], kinds[ikind]);
+           gfor_fndecl_math_powi[kind][ikind].real =
+             gfc_build_library_function_decl (get_identifier (name),
+                 type, 2, type, itype);
+
+           type = gfc_get_complex_type (kinds[kind]);
+           sprintf(name, PREFIX("pow_c%d_i%d"), kinds[kind], kinds[ikind]);
+           gfor_fndecl_math_powi[kind][ikind].cmplx =
+             gfc_build_library_function_decl (get_identifier (name),
+                 type, 2, type, itype);
+         }
+      }
+  }
+
   gfor_fndecl_math_cpowf =
     gfc_build_library_function_decl (get_identifier ("cpowf"),
                                     gfc_complex4_type_node,
index 89c0c47280771de052c6a66a38bff27a8e03dc55..092daa70ea4e8970d4f97a76e54b2b31f20227b1 100644 (file)
@@ -382,189 +382,172 @@ gfc_conv_unary_op (enum tree_code code, gfc_se * se, gfc_expr * expr)
 
 }
 
-
-/* For power op (lhs ** rhs) We generate:
-    m = lhs
-    if (rhs > 0)
-      count = rhs
-    else if (rhs == 0)
-      {
-        count = 0
-        m = 1
-      }
-    else // (rhs < 0)
-      {
-        count = -rhs
-        m = 1 / m;
-      }
-    // for constant rhs we do the above at compile time
-    val = m;
-    for (n = 1; n < count; n++)
-      val = val * m;
- */
-
-static void
-gfc_conv_integer_power (gfc_se * se, tree lhs, tree rhs)
+/* Expand power operator to optimal multiplications when a value is raised
+   to an constant integer n. See section 4.6.3, "Evaluation of Powers" of
+   Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art of Computer
+   Programming", 3rd Edition, 1998.  */
+
+/* This code is mostly duplicated from expand_powi in the backend.
+   We establish the "optimal power tree" lookup table with the defined size.
+   The items in the table are the exponents used to calculate the index
+   exponents. Any integer n less than the value can get an "addition chain",
+   with the first node being one.  */
+#define POWI_TABLE_SIZE 256
+
+/* The table is from Builtins.c.  */
+static const unsigned char powi_table[POWI_TABLE_SIZE] =
+  {
+      0,   1,   1,   2,   2,   3,   3,   4,  /*   0 -   7 */
+      4,   6,   5,   6,   6,  10,   7,   9,  /*   8 -  15 */
+      8,  16,   9,  16,  10,  12,  11,  13,  /*  16 -  23 */
+     12,  17,  13,  18,  14,  24,  15,  26,  /*  24 -  31 */
+     16,  17,  17,  19,  18,  33,  19,  26,  /*  32 -  39 */
+     20,  25,  21,  40,  22,  27,  23,  44,  /*  40 -  47 */
+     24,  32,  25,  34,  26,  29,  27,  44,  /*  48 -  55 */
+     28,  31,  29,  34,  30,  60,  31,  36,  /*  56 -  63 */
+     32,  64,  33,  34,  34,  46,  35,  37,  /*  64 -  71 */
+     36,  65,  37,  50,  38,  48,  39,  69,  /*  72 -  79 */
+     40,  49,  41,  43,  42,  51,  43,  58,  /*  80 -  87 */
+     44,  64,  45,  47,  46,  59,  47,  76,  /*  88 -  95 */
+     48,  65,  49,  66,  50,  67,  51,  66,  /*  96 - 103 */
+     52,  70,  53,  74,  54, 104,  55,  74,  /* 104 - 111 */
+     56,  64,  57,  69,  58,  78,  59,  68,  /* 112 - 119 */
+     60,  61,  61,  80,  62,  75,  63,  68,  /* 120 - 127 */
+     64,  65,  65, 128,  66, 129,  67,  90,  /* 128 - 135 */
+     68,  73,  69, 131,  70,  94,  71,  88,  /* 136 - 143 */
+     72, 128,  73,  98,  74, 132,  75, 121,  /* 144 - 151 */
+     76, 102,  77, 124,  78, 132,  79, 106,  /* 152 - 159 */
+     80,  97,  81, 160,  82,  99,  83, 134,  /* 160 - 167 */
+     84,  86,  85,  95,  86, 160,  87, 100,  /* 168 - 175 */
+     88, 113,  89,  98,  90, 107,  91, 122,  /* 176 - 183 */
+     92, 111,  93, 102,  94, 126,  95, 150,  /* 184 - 191 */
+     96, 128,  97, 130,  98, 133,  99, 195,  /* 192 - 199 */
+    100, 128, 101, 123, 102, 164, 103, 138,  /* 200 - 207 */
+    104, 145, 105, 146, 106, 109, 107, 149,  /* 208 - 215 */
+    108, 200, 109, 146, 110, 170, 111, 157,  /* 216 - 223 */
+    112, 128, 113, 130, 114, 182, 115, 132,  /* 224 - 231 */
+    116, 200, 117, 132, 118, 158, 119, 206,  /* 232 - 239 */
+    120, 240, 121, 162, 122, 147, 123, 152,  /* 240 - 247 */
+    124, 166, 125, 214, 126, 138, 127, 153,  /* 248 - 255 */
+  };
+
+/* If n is larger than lookup table's max index, we use "window method".  */
+#define POWI_WINDOW_SIZE 3
+
+/* Recursive function to expand power operator. The temporary values are put
+   in tmpvar. The function return tmpvar[1] ** n.  */
+static tree
+gfc_conv_powi (gfc_se * se, int n, tree * tmpvar)
 {
-  tree count;
-  tree result;
-  tree cond;
-  tree neg_stmt;
-  tree pos_stmt;
+  tree op0;
+  tree op1;
   tree tmp;
-  tree var;
-  tree type;
-  stmtblock_t block;
-  tree exit_label;
-
-  type = TREE_TYPE (lhs);
+  int digit;
 
-  if (INTEGER_CST_P (rhs))
+  if (n < POWI_TABLE_SIZE)
     {
-      if (integer_zerop (rhs))
-       {
-         se->expr = gfc_build_const (type, integer_one_node);
-         return;
-       }
-      /* Special cases for constant values.  */
-      if (TREE_INT_CST_HIGH (rhs) == -1)
-       {
-         /* x ** (-y) == 1 / (x ** y).  */
-         if (TREE_CODE (type) == INTEGER_TYPE)
-           {
-             se->expr = integer_zero_node;
-             return;
-           }
-
-         tmp = gfc_build_const (type, integer_one_node);
-         lhs = fold (build (RDIV_EXPR, type, tmp, lhs));
+      if (tmpvar[n])
+        return tmpvar[n];
 
-         rhs = fold (build1 (NEGATE_EXPR, TREE_TYPE (rhs), rhs));
-         assert (INTEGER_CST_P (rhs));
-       }
-      else
-       {
-         /* TODO: really big integer powers.  */
-         assert (TREE_INT_CST_HIGH (rhs) == 0);
-       }
-
-      if (integer_onep (rhs))
-       {
-         se->expr = lhs;
-         return;
-       }
-      if (TREE_INT_CST_LOW (rhs) == 2)
-       {
-         se->expr = build (MULT_EXPR, type, lhs, lhs);
-         return;
-       }
-      if (TREE_INT_CST_LOW (rhs) == 3)
-       {
-         tmp = build (MULT_EXPR, type, lhs, lhs);
-         se->expr = fold (build (MULT_EXPR, type, tmp, lhs));
-         return;
-       }
-
-      /* Create the loop count variable.  */
-      count = gfc_create_var (TREE_TYPE (rhs), "count");
-      gfc_add_modify_expr (&se->pre, count, rhs);
+      op0 = gfc_conv_powi (se, n - powi_table[n], tmpvar);
+      op1 = gfc_conv_powi (se, powi_table[n], tmpvar);
+    }
+  else if (n & 1)
+    {
+      digit = n & ((1 << POWI_WINDOW_SIZE) - 1);
+      op0 = gfc_conv_powi (se, n - digit, tmpvar);
+      op1 = gfc_conv_powi (se, digit, tmpvar);
     }
   else
     {
-      /* Put the lhs into a temporary variable.  */
-      var = gfc_create_var (type, "val");
-      count = gfc_create_var (TREE_TYPE (rhs), "count");
-      gfc_add_modify_expr (&se->pre, var, lhs);
-      lhs = var;
-
-      /* Generate code for negative rhs.  */
-      gfc_start_block (&block);
-
-      if (TREE_CODE (TREE_TYPE (lhs)) == INTEGER_TYPE)
-       {
-         gfc_add_modify_expr (&block, lhs, integer_zero_node);
-         gfc_add_modify_expr (&block, count, integer_zero_node);
-       }
-      else
-       {
-         tmp = gfc_build_const (type, integer_one_node);
-         tmp = build (RDIV_EXPR, type, tmp, lhs);
-         gfc_add_modify_expr (&block, var, tmp);
-
-         tmp = build1 (NEGATE_EXPR, TREE_TYPE (rhs), rhs);
-         gfc_add_modify_expr (&block, count, tmp);
-       }
-      neg_stmt = gfc_finish_block (&block);
-
-      pos_stmt = build_v (MODIFY_EXPR, count, rhs);
-
-      /* Code for rhs == 0.  */
-      gfc_start_block (&block);
-
-      gfc_add_modify_expr (&block, count, integer_zero_node);
-      tmp = gfc_build_const (type, integer_one_node);
-      gfc_add_modify_expr (&block, lhs, tmp);
-
-      tmp = gfc_finish_block (&block);
-
-      /* Select the appropriate action.  */
-      cond = build (EQ_EXPR, boolean_type_node, rhs, integer_zero_node);
-      tmp = build_v (COND_EXPR, cond, tmp, neg_stmt);
-
-      cond = build (GT_EXPR, boolean_type_node, rhs, integer_zero_node);
-      tmp = build_v (COND_EXPR, cond, pos_stmt, tmp);
-      gfc_add_expr_to_block (&se->pre, tmp);
+      op0 = gfc_conv_powi (se, n >> 1, tmpvar);
+      op1 = op0;
     }
 
-  /* Create a variable for the result.  */
-  result = gfc_create_var (type, "pow");
-  gfc_add_modify_expr (&se->pre, result, lhs);
-
-  exit_label = gfc_build_label_decl (NULL_TREE);
-  TREE_USED (exit_label) = 1;
+  tmp = fold (build (MULT_EXPR, TREE_TYPE (op0), op0, op1));
+  tmp = gfc_evaluate_now (tmp, &se->pre);
 
-  /* Create the loop body.  */
-  gfc_start_block (&block);
+  if (n < POWI_TABLE_SIZE)
+    tmpvar[n] = tmp;
 
-  /* First the exit condition (until count <= 1).  */
-  tmp = build1_v (GOTO_EXPR, exit_label);
-  cond = build (LE_EXPR, TREE_TYPE (count), count, integer_one_node);
-  tmp = build_v (COND_EXPR, cond, tmp, build_empty_stmt ());
-  gfc_add_expr_to_block (&block, tmp);
+  return tmp;
+}
 
-  /* Multiply by the lhs.  */
-  tmp = build (MULT_EXPR, type, result, lhs);
-  gfc_add_modify_expr (&block, result, tmp);
+/* Expand lhs ** rhs. rhs is an constant integer. If expand successfully,
+   return 1. Else return 0 and will call runtime library functions.  */
+static int
+gfc_conv_cst_int_power (gfc_se * se, tree lhs, tree rhs)
+{
+  tree cond;
+  tree tmp;
+  tree type;
+  tree vartmp[POWI_TABLE_SIZE];
+  int n;
+  int sgn;
 
-  /* Adjust the loop count.  */
-  tmp = build (MINUS_EXPR, TREE_TYPE (count), count, integer_one_node);
-  gfc_add_modify_expr (&block, count, tmp);
+  type = TREE_TYPE (lhs);
+  n = abs (TREE_INT_CST_LOW (rhs));
+  sgn = tree_int_cst_sgn (rhs);
 
-  tmp = gfc_finish_block (&block);
+  if ((!flag_unsafe_math_optimizations || optimize_size) && (n > 2 || n < -1))
+    return 0;
 
-  /* Create the the loop.  */
-  tmp = build_v (LOOP_EXPR, tmp);
-  gfc_add_expr_to_block (&se->pre, tmp);
+  /* rhs == 0  */
+  if (sgn == 0)
+    {
+      se->expr = gfc_build_const (type, integer_one_node);
+      return 1;
+    }
+  /* If rhs < 0 and lhs is an integer, the result is -1, 0 or 1.  */
+  if ((sgn == -1) && (TREE_CODE (type) == INTEGER_TYPE))
+    {
+      tmp = build (EQ_EXPR, boolean_type_node, lhs,
+                       integer_minus_one_node);
+      cond = build (EQ_EXPR, boolean_type_node, lhs,
+                       integer_one_node);
+
+      /* If rhs is an even,
+       result = (lhs == 1 || lhs == -1) ? 1 : 0.  */
+      if ((n & 1) == 0)
+        {
+         tmp = build (TRUTH_OR_EXPR, boolean_type_node, tmp, cond);
+         se->expr = build (COND_EXPR, type, tmp, integer_one_node, 
+                       integer_zero_node);
+         return 1;
+       }
+      /* If rhs is an odd,
+        result = (lhs == 1) ? 1 : (lhs == -1) ? -1 : 0.  */
+      tmp = build (COND_EXPR, type, tmp, integer_minus_one_node,
+                       integer_zero_node);
+      se->expr = build (COND_EXPR, type, cond, integer_one_node,
+                       tmp);
+      return 1;
+    }
 
-  /* Add the exit label.  */
-  tmp = build1_v (LABEL_EXPR, exit_label);
-  gfc_add_expr_to_block (&se->pre, tmp);
+  memset (vartmp, 0, sizeof (vartmp));
+  vartmp[1] = lhs;
 
-  se->expr = result;
+  se->expr = gfc_conv_powi (se, n, vartmp);
+  if (sgn == -1)
+    {
+      tmp = gfc_build_const (type, integer_one_node);
+      se->expr = build (RDIV_EXPR, type, tmp, se->expr);
+    }
+  return 1;
 }
 
 
-/* Power op (**).  Integer rhs has special handling.  */
+/* Power op (**).  Constant integer exponent has special handling.  */
 
 static void
 gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
 {
   int kind;
+  int ikind;
   gfc_se lse;
   gfc_se rse;
   tree fndecl;
   tree tmp;
-  tree type;
 
   gfc_init_se (&lse, se);
   gfc_conv_expr_val (&lse, expr->op1);
@@ -574,24 +557,83 @@ gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
   gfc_conv_expr_val (&rse, expr->op2);
   gfc_add_block_to_block (&se->pre, &rse.pre);
 
-  type = TREE_TYPE (lse.expr);
+  if (expr->op2->ts.type == BT_INTEGER
+        && expr->op2->expr_type == EXPR_CONSTANT)
+    if (gfc_conv_cst_int_power (se, lse.expr, rse.expr))
+      return;        
 
   kind = expr->op1->ts.kind;
   switch (expr->op2->ts.type)
     {
     case BT_INTEGER:
-      /* Integer powers are expanded inline as multiplications.  */
-      gfc_conv_integer_power (se, lse.expr, rse.expr);
-      return;
+      ikind = expr->op2->ts.kind;
+      switch (ikind)
+       {
+       case 1:
+       case 2:
+         rse.expr = convert (gfc_int4_type_node, rse.expr);
+         /* Fall through.  */
+
+       case 4:
+         ikind = 0;
+         break;
+         
+       case 8:
+         ikind = 1;
+         break;
+
+       default:
+         abort();
+       }
+      switch (kind)
+       {
+       case 1:
+       case 2:
+         if (expr->op1->ts.type == BT_INTEGER)
+           lse.expr = convert (gfc_int4_type_node, lse.expr);
+         else
+           abort ();
+         /* Fall through.  */
+
+       case 4:
+         kind = 0;
+         break;
+         
+       case 8:
+         kind = 1;
+         break;
+
+       default:
+         abort();
+       }
+      
+      switch (expr->op1->ts.type)
+       {
+       case BT_INTEGER:
+         fndecl = gfor_fndecl_math_powi[kind][ikind].integer;
+         break;
+
+       case BT_REAL:
+         fndecl = gfor_fndecl_math_powi[kind][ikind].real;
+         break;
+
+       case BT_COMPLEX:
+         fndecl = gfor_fndecl_math_powi[kind][ikind].cmplx;
+         break;
+
+       default:
+         abort ();
+       }
+      break;
 
     case BT_REAL:
       switch (kind)
        {
        case 4:
-         fndecl = gfor_fndecl_math_powf;
+         fndecl = built_in_decls[BUILT_IN_POWF];
          break;
        case 8:
-         fndecl = gfor_fndecl_math_pow;
+         fndecl = built_in_decls[BUILT_IN_POW];
          break;
        default:
          abort ();
@@ -619,7 +661,7 @@ gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
 
   tmp = gfc_chainon_list (NULL_TREE, lse.expr);
   tmp = gfc_chainon_list (tmp, rse.expr);
-  se->expr = gfc_build_function_call (fndecl, tmp);
+  se->expr = fold (gfc_build_function_call (fndecl, tmp));
 }
 
 
index a9e2e7bca82363f0bd51db3fdf7a85a6f938858f..ada575fc9e0378c07dcf21988932cd9034ae5b34 100644 (file)
@@ -428,8 +428,16 @@ extern GTY(()) tree gfor_fndecl_associated;
 
 /* Math functions.  Many other math functions are handled in
    trans-intrinsic.c.  */
-extern GTY(()) tree gfor_fndecl_math_powf;
-extern GTY(()) tree gfor_fndecl_math_pow;
+
+typedef struct gfc_powdecl_list GTY(())
+{
+  tree integer;
+  tree real;
+  tree cmplx;
+}
+gfc_powdecl_list;
+
+extern GTY(()) gfc_powdecl_list gfor_fndecl_math_powi[3][2];
 extern GTY(()) tree gfor_fndecl_math_cpowf;
 extern GTY(()) tree gfor_fndecl_math_cpow;
 extern GTY(()) tree gfor_fndecl_math_cabsf;
index fcf983fbd7dcb6e3a903d5317731e7edabdb93f0..01ab2bb7439911ef4213802d3dad080064a7e7f6 100644 (file)
@@ -1,3 +1,7 @@
+2004-05-18  Paul Brook  <paul@codesourcery.com>
+
+       * gfortran.fortran-torture/execute/power.f90: Test constant integers.
+
 2004-05-18  Andrew Pinski  <pinskia@physics.uc.edu>
 
        * gcc.dg/tree-ssa/20040518-1.c: New test.
index 91ddc73d3e420fa7ec648565275155ab7570e37c..6866470dd6a4e4d464a278d61cb757aa99d958ea 100644 (file)
@@ -3,9 +3,41 @@ program testpow
    implicit none
    real(kind=4) r, s, two
    real(kind=8) :: q
-   complex(kind=4) :: c
+   complex(kind=4) :: c, z
    real, parameter :: del = 0.0001
-   integer i
+   integer i, j
+
+   i = 2
+   j = i ** 10
+   if (abs (j - 1024) .gt. del) call abort
+   j = i ** (-10)
+   if (abs (j - 0) .gt. del) call abort
+   j = i ** 0
+   if (abs (j - 1) .gt. del) call abort
+   i = 1
+   j = i ** 10
+   if (abs (j - 1) .gt. del) call abort
+   j = i ** (-10)
+   if (abs (j - 1) .gt. del) call abort
+   j = i ** 0
+   if (abs (j - 1) .gt. del) call abort
+   i = -1
+   j = i ** 10
+   if (abs (j - 1) .gt. del) call abort
+   j = i ** (-10)
+   if (abs (j - 1) .gt. del) call abort
+   j = i ** 0
+   if (abs (j - 1) .gt. del) call abort
+   j = i ** 11
+   if (abs (j - (-1)) .gt. del) call abort
+   j = i ** (-11)
+   if (abs (j - (-1)) .gt. del) call abort
+
+   c = (2.0, 3.0)
+   z = c ** 2
+   if (abs(z - (-5.0, 12.0)) .gt. del) call abort
+   z = c ** 7
+   if (abs(z - (6554.0, 4449.0)) .gt. del) call abort
 
    two = 2.0
 
index 60168066780d97eb46e5694c4bb50eea0c55b02c..1c60175e40ab3d0ab3236d092ba7531b6f91051f 100644 (file)
@@ -1,3 +1,12 @@
+2004-05-18  Paul Brook  <paul@codesourcery.com>
+
+       * Makefile.am (i_pow_c): Set it. Add build rule.
+       (gfor_built_src): Use it.
+       (m4_files): add m4/pow.m4.
+       * Makefile.in: Regenerate.
+       * m4/pow.m4: New file.
+       * generated/pow_*.c: Regenerate.
+
 2004-05-18  Paul Brook  <paul@codesourcery.com>
 
        * Makefile.am: Remove references to types.m4.
index cf3382a38d9632f5f31f118024816e8628b6db68..12977f5bd3d05f83219252b8bb5f5d6bdaf6fb57 100644 (file)
@@ -222,6 +222,20 @@ i_set_exponent_c = \
 generated/set_exponent_r4.c \
 generated/set_exponent_r8.c
 
+i_pow_c = \
+generated/pow_i4_i4.c \
+generated/pow_i8_i4.c \
+generated/pow_r4_i4.c \
+generated/pow_r8_i4.c \
+generated/pow_c4_i4.c \
+generated/pow_c8_i4.c \
+generated/pow_i4_i8.c \
+generated/pow_i8_i8.c \
+generated/pow_r4_i8.c \
+generated/pow_r8_i8.c \
+generated/pow_c4_i8.c \
+generated/pow_c8_i8.c
+
 m4_files= m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \
     m4/any.m4 m4/count.m4 m4/maxloc0.m4 m4/maxloc1.m4 m4/maxval.m4 \
     m4/minloc0.m4 m4/minloc1.m4 m4/minval.m4 m4/product.m4 m4/sum.m4 \
@@ -229,14 +243,15 @@ m4_files= m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.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/fraction.m4 m4/nearest.m4 m4/set_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_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_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \
+    $(i_pow_c)
 
 # We only use these if libm doesn't contain complex math functions.
 
@@ -443,6 +458,9 @@ $(i_nearest_c): m4/nearest.m4 m4/mtype.m4
 $(i_set_exponent_c): m4/set_exponent.m4 m4/mtype.m4
        m4 -Dfile=$@ -I$(srcdir)/m4 set_exponent.m4 > $@
 
+$(i_pow_c): m4/pow.m4 $(I_M4_DEPS)
+       m4 -Dfile=$@ -I$(srcdir)/m4 pow.m4 > $@
+
 $(gfor_math_trig_c): m4/ctrig.m4 m4/mtype.m4
        m4 -Dfile=$@ -I$(srcdir)/m4 ctrig.m4 > $@
 
index f2df3ec1e830e225207c79401fc47195b37c6652..1bb1dd57627bede024670022aef78d1a39a6a072 100644 (file)
@@ -101,7 +101,10 @@ am__objects_26 = exponent_r4.lo exponent_r8.lo
 am__objects_27 = fraction_r4.lo fraction_r8.lo
 am__objects_28 = nearest_r4.lo nearest_r8.lo
 am__objects_29 = set_exponent_r4.lo set_exponent_r8.lo
-am__objects_30 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \
+am__objects_30 = pow_i4_i4.lo pow_i8_i4.lo pow_r4_i4.lo pow_r8_i4.lo \
+       pow_c4_i4.lo pow_c8_i4.lo pow_i4_i8.lo pow_i8_i8.lo \
+       pow_r4_i8.lo pow_r8_i8.lo pow_c4_i8.lo pow_c8_i8.lo
+am__objects_31 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \
        $(am__objects_5) $(am__objects_6) $(am__objects_7) \
        $(am__objects_8) $(am__objects_9) $(am__objects_10) \
        $(am__objects_11) $(am__objects_12) $(am__objects_13) \
@@ -110,18 +113,18 @@ am__objects_30 = $(am__objects_2) $(am__objects_3) $(am__objects_4) \
        $(am__objects_20) $(am__objects_21) $(am__objects_22) \
        $(am__objects_23) $(am__objects_24) $(am__objects_25) \
        $(am__objects_26) $(am__objects_27) $(am__objects_28) \
-       $(am__objects_29)
-am__objects_31 = backspace.lo close.lo endfile.lo format.lo inquire.lo \
+       $(am__objects_29) $(am__objects_30)
+am__objects_32 = backspace.lo close.lo endfile.lo format.lo inquire.lo \
        list_read.lo lock.lo open.lo read.lo rewind.lo transfer.lo \
        unit.lo unix.lo write.lo
-am__objects_32 = associated.lo abort.lo cpu_time.lo cshift0.lo \
+am__objects_33 = associated.lo abort.lo cpu_time.lo cshift0.lo \
        eoshift0.lo eoshift2.lo ishftc.lo pack_generic.lo size.lo \
        spread_generic.lo string_intrinsics.lo random.lo \
        reshape_generic.lo reshape_packed.lo selected_kind.lo \
        transpose_generic.lo unpack_generic.lo in_pack_generic.lo \
        in_unpack_generic.lo
-am__objects_33 =
-am__objects_34 = _abs_c4.lo _abs_c8.lo _abs_i4.lo _abs_i8.lo \
+am__objects_34 =
+am__objects_35 = _abs_c4.lo _abs_c8.lo _abs_i4.lo _abs_i8.lo \
        _abs_r4.lo _abs_r8.lo _exp_r4.lo _exp_r8.lo _exp_c4.lo \
        _exp_c8.lo _log_r4.lo _log_r8.lo _log_c4.lo _log_c8.lo \
        _log10_r4.lo _log10_r8.lo _sqrt_r4.lo _sqrt_r8.lo _sqrt_c4.lo \
@@ -131,13 +134,13 @@ am__objects_34 = _abs_c4.lo _abs_c8.lo _abs_i4.lo _abs_i8.lo \
        _tan_r4.lo _tan_r8.lo _sinh_r4.lo _sinh_r8.lo _cosh_r4.lo \
        _cosh_r8.lo _tanh_r4.lo _tanh_r8.lo _conjg_c4.lo _conjg_c8.lo \
        _aint_r4.lo _aint_r8.lo _anint_r4.lo _anint_r8.lo
-am__objects_35 = _sign_i4.lo _sign_i8.lo _sign_r4.lo _sign_r8.lo \
+am__objects_36 = _sign_i4.lo _sign_i8.lo _sign_r4.lo _sign_r8.lo \
        _dim_i4.lo _dim_i8.lo _dim_r4.lo _dim_r8.lo _atan2_r4.lo \
        _atan2_r8.lo _mod_i4.lo _mod_i8.lo _mod_r4.lo _mod_r8.lo
-am__objects_36 = $(am__objects_34) $(am__objects_35) dprod_r8.lo
-am_libgfortran_la_OBJECTS = $(am__objects_1) $(am__objects_30) \
-       $(am__objects_31) $(am__objects_32) $(am__objects_33) \
-       $(am__objects_36)
+am__objects_37 = $(am__objects_35) $(am__objects_36) dprod_r8.lo
+am_libgfortran_la_OBJECTS = $(am__objects_1) $(am__objects_31) \
+       $(am__objects_32) $(am__objects_33) $(am__objects_34) \
+       $(am__objects_37)
 libgfortran_la_OBJECTS = $(am_libgfortran_la_OBJECTS)
 libgfortranbegin_la_LIBADD =
 am_libgfortranbegin_la_OBJECTS = fmain.lo
@@ -235,6 +238,18 @@ am__depfiles_maybe = depfiles
 @AMDEP_TRUE@   ./$(DEPDIR)/nearest_r4.Plo \
 @AMDEP_TRUE@   ./$(DEPDIR)/nearest_r8.Plo ./$(DEPDIR)/open.Plo \
 @AMDEP_TRUE@   ./$(DEPDIR)/pack_generic.Plo ./$(DEPDIR)/pause.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_c4_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_c4_i8.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_c8_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_c8_i8.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_i4_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_i4_i8.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_i8_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_i8_i8.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_r4_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_r4_i8.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_r8_i4.Plo \
+@AMDEP_TRUE@   ./$(DEPDIR)/pow_r8_i8.Plo \
 @AMDEP_TRUE@   ./$(DEPDIR)/product_c4.Plo \
 @AMDEP_TRUE@   ./$(DEPDIR)/product_c8.Plo \
 @AMDEP_TRUE@   ./$(DEPDIR)/product_i4.Plo \
@@ -600,6 +615,20 @@ i_set_exponent_c = \
 generated/set_exponent_r4.c \
 generated/set_exponent_r8.c
 
+i_pow_c = \
+generated/pow_i4_i4.c \
+generated/pow_i8_i4.c \
+generated/pow_r4_i4.c \
+generated/pow_r8_i4.c \
+generated/pow_c4_i4.c \
+generated/pow_c8_i4.c \
+generated/pow_i4_i8.c \
+generated/pow_i8_i8.c \
+generated/pow_r4_i8.c \
+generated/pow_r8_i8.c \
+generated/pow_c4_i8.c \
+generated/pow_c8_i8.c
+
 m4_files = m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.m4 \
     m4/any.m4 m4/count.m4 m4/maxloc0.m4 m4/maxloc1.m4 m4/maxval.m4 \
     m4/minloc0.m4 m4/minloc1.m4 m4/minval.m4 m4/product.m4 m4/sum.m4 \
@@ -607,14 +636,15 @@ m4_files = m4/iparm.m4 m4/ifunction.m4 m4/iforeach.m4 m4/all.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/fraction.m4 m4/nearest.m4 m4/set_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_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_exponent_c) $(i_fraction_c) $(i_nearest_c) $(i_set_exponent_c) \
+    $(i_pow_c)
 
 
 # We only use these if libm doesn't contain complex math functions.
@@ -938,6 +968,18 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pack_generic.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pause.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c4_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c4_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c8_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_c8_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i4_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i4_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i8_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_i8_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r4_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r4_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r8_i4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow_r8_i8.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c4.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_c8.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/product_i4.Plo@am__quote@
@@ -3594,6 +3636,294 @@ set_exponent_r8.lo: generated/set_exponent_r8.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_exponent_r8.lo `test -f 'generated/set_exponent_r8.c' || echo '$(srcdir)/'`generated/set_exponent_r8.c
 
+pow_i4_i4.o: generated/pow_i4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i4.o -MD -MP -MF "$(DEPDIR)/pow_i4_i4.Tpo" -c -o pow_i4_i4.o `test -f 'generated/pow_i4_i4.c' || echo '$(srcdir)/'`generated/pow_i4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i4.Tpo" "$(DEPDIR)/pow_i4_i4.Po"; else rm -f "$(DEPDIR)/pow_i4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i4.c' object='pow_i4_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i4.Po' tmpdepfile='$(DEPDIR)/pow_i4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i4.o `test -f 'generated/pow_i4_i4.c' || echo '$(srcdir)/'`generated/pow_i4_i4.c
+
+pow_i4_i4.obj: generated/pow_i4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i4.obj -MD -MP -MF "$(DEPDIR)/pow_i4_i4.Tpo" -c -o pow_i4_i4.obj `if test -f 'generated/pow_i4_i4.c'; then $(CYGPATH_W) 'generated/pow_i4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i4_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i4.Tpo" "$(DEPDIR)/pow_i4_i4.Po"; else rm -f "$(DEPDIR)/pow_i4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i4.c' object='pow_i4_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i4.Po' tmpdepfile='$(DEPDIR)/pow_i4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i4.obj `if test -f 'generated/pow_i4_i4.c'; then $(CYGPATH_W) 'generated/pow_i4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i4_i4.c'; fi`
+
+pow_i4_i4.lo: generated/pow_i4_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i4.lo -MD -MP -MF "$(DEPDIR)/pow_i4_i4.Tpo" -c -o pow_i4_i4.lo `test -f 'generated/pow_i4_i4.c' || echo '$(srcdir)/'`generated/pow_i4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i4.Tpo" "$(DEPDIR)/pow_i4_i4.Plo"; else rm -f "$(DEPDIR)/pow_i4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i4.c' object='pow_i4_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i4.Plo' tmpdepfile='$(DEPDIR)/pow_i4_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i4.lo `test -f 'generated/pow_i4_i4.c' || echo '$(srcdir)/'`generated/pow_i4_i4.c
+
+pow_i8_i4.o: generated/pow_i8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i4.o -MD -MP -MF "$(DEPDIR)/pow_i8_i4.Tpo" -c -o pow_i8_i4.o `test -f 'generated/pow_i8_i4.c' || echo '$(srcdir)/'`generated/pow_i8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i4.Tpo" "$(DEPDIR)/pow_i8_i4.Po"; else rm -f "$(DEPDIR)/pow_i8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i4.c' object='pow_i8_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i4.Po' tmpdepfile='$(DEPDIR)/pow_i8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i4.o `test -f 'generated/pow_i8_i4.c' || echo '$(srcdir)/'`generated/pow_i8_i4.c
+
+pow_i8_i4.obj: generated/pow_i8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i4.obj -MD -MP -MF "$(DEPDIR)/pow_i8_i4.Tpo" -c -o pow_i8_i4.obj `if test -f 'generated/pow_i8_i4.c'; then $(CYGPATH_W) 'generated/pow_i8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i8_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i4.Tpo" "$(DEPDIR)/pow_i8_i4.Po"; else rm -f "$(DEPDIR)/pow_i8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i4.c' object='pow_i8_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i4.Po' tmpdepfile='$(DEPDIR)/pow_i8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i4.obj `if test -f 'generated/pow_i8_i4.c'; then $(CYGPATH_W) 'generated/pow_i8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i8_i4.c'; fi`
+
+pow_i8_i4.lo: generated/pow_i8_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i4.lo -MD -MP -MF "$(DEPDIR)/pow_i8_i4.Tpo" -c -o pow_i8_i4.lo `test -f 'generated/pow_i8_i4.c' || echo '$(srcdir)/'`generated/pow_i8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i4.Tpo" "$(DEPDIR)/pow_i8_i4.Plo"; else rm -f "$(DEPDIR)/pow_i8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i4.c' object='pow_i8_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i4.Plo' tmpdepfile='$(DEPDIR)/pow_i8_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i4.lo `test -f 'generated/pow_i8_i4.c' || echo '$(srcdir)/'`generated/pow_i8_i4.c
+
+pow_r4_i4.o: generated/pow_r4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i4.o -MD -MP -MF "$(DEPDIR)/pow_r4_i4.Tpo" -c -o pow_r4_i4.o `test -f 'generated/pow_r4_i4.c' || echo '$(srcdir)/'`generated/pow_r4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i4.Tpo" "$(DEPDIR)/pow_r4_i4.Po"; else rm -f "$(DEPDIR)/pow_r4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i4.c' object='pow_r4_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i4.Po' tmpdepfile='$(DEPDIR)/pow_r4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i4.o `test -f 'generated/pow_r4_i4.c' || echo '$(srcdir)/'`generated/pow_r4_i4.c
+
+pow_r4_i4.obj: generated/pow_r4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i4.obj -MD -MP -MF "$(DEPDIR)/pow_r4_i4.Tpo" -c -o pow_r4_i4.obj `if test -f 'generated/pow_r4_i4.c'; then $(CYGPATH_W) 'generated/pow_r4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r4_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i4.Tpo" "$(DEPDIR)/pow_r4_i4.Po"; else rm -f "$(DEPDIR)/pow_r4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i4.c' object='pow_r4_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i4.Po' tmpdepfile='$(DEPDIR)/pow_r4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i4.obj `if test -f 'generated/pow_r4_i4.c'; then $(CYGPATH_W) 'generated/pow_r4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r4_i4.c'; fi`
+
+pow_r4_i4.lo: generated/pow_r4_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i4.lo -MD -MP -MF "$(DEPDIR)/pow_r4_i4.Tpo" -c -o pow_r4_i4.lo `test -f 'generated/pow_r4_i4.c' || echo '$(srcdir)/'`generated/pow_r4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i4.Tpo" "$(DEPDIR)/pow_r4_i4.Plo"; else rm -f "$(DEPDIR)/pow_r4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i4.c' object='pow_r4_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i4.Plo' tmpdepfile='$(DEPDIR)/pow_r4_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i4.lo `test -f 'generated/pow_r4_i4.c' || echo '$(srcdir)/'`generated/pow_r4_i4.c
+
+pow_r8_i4.o: generated/pow_r8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i4.o -MD -MP -MF "$(DEPDIR)/pow_r8_i4.Tpo" -c -o pow_r8_i4.o `test -f 'generated/pow_r8_i4.c' || echo '$(srcdir)/'`generated/pow_r8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i4.Tpo" "$(DEPDIR)/pow_r8_i4.Po"; else rm -f "$(DEPDIR)/pow_r8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i4.c' object='pow_r8_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i4.Po' tmpdepfile='$(DEPDIR)/pow_r8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i4.o `test -f 'generated/pow_r8_i4.c' || echo '$(srcdir)/'`generated/pow_r8_i4.c
+
+pow_r8_i4.obj: generated/pow_r8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i4.obj -MD -MP -MF "$(DEPDIR)/pow_r8_i4.Tpo" -c -o pow_r8_i4.obj `if test -f 'generated/pow_r8_i4.c'; then $(CYGPATH_W) 'generated/pow_r8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r8_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i4.Tpo" "$(DEPDIR)/pow_r8_i4.Po"; else rm -f "$(DEPDIR)/pow_r8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i4.c' object='pow_r8_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i4.Po' tmpdepfile='$(DEPDIR)/pow_r8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i4.obj `if test -f 'generated/pow_r8_i4.c'; then $(CYGPATH_W) 'generated/pow_r8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r8_i4.c'; fi`
+
+pow_r8_i4.lo: generated/pow_r8_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i4.lo -MD -MP -MF "$(DEPDIR)/pow_r8_i4.Tpo" -c -o pow_r8_i4.lo `test -f 'generated/pow_r8_i4.c' || echo '$(srcdir)/'`generated/pow_r8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i4.Tpo" "$(DEPDIR)/pow_r8_i4.Plo"; else rm -f "$(DEPDIR)/pow_r8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i4.c' object='pow_r8_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i4.Plo' tmpdepfile='$(DEPDIR)/pow_r8_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i4.lo `test -f 'generated/pow_r8_i4.c' || echo '$(srcdir)/'`generated/pow_r8_i4.c
+
+pow_c4_i4.o: generated/pow_c4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i4.o -MD -MP -MF "$(DEPDIR)/pow_c4_i4.Tpo" -c -o pow_c4_i4.o `test -f 'generated/pow_c4_i4.c' || echo '$(srcdir)/'`generated/pow_c4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i4.Tpo" "$(DEPDIR)/pow_c4_i4.Po"; else rm -f "$(DEPDIR)/pow_c4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i4.c' object='pow_c4_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i4.Po' tmpdepfile='$(DEPDIR)/pow_c4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i4.o `test -f 'generated/pow_c4_i4.c' || echo '$(srcdir)/'`generated/pow_c4_i4.c
+
+pow_c4_i4.obj: generated/pow_c4_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i4.obj -MD -MP -MF "$(DEPDIR)/pow_c4_i4.Tpo" -c -o pow_c4_i4.obj `if test -f 'generated/pow_c4_i4.c'; then $(CYGPATH_W) 'generated/pow_c4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c4_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i4.Tpo" "$(DEPDIR)/pow_c4_i4.Po"; else rm -f "$(DEPDIR)/pow_c4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i4.c' object='pow_c4_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i4.Po' tmpdepfile='$(DEPDIR)/pow_c4_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i4.obj `if test -f 'generated/pow_c4_i4.c'; then $(CYGPATH_W) 'generated/pow_c4_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c4_i4.c'; fi`
+
+pow_c4_i4.lo: generated/pow_c4_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c4_i4.Tpo" -c -o pow_c4_i4.lo `test -f 'generated/pow_c4_i4.c' || echo '$(srcdir)/'`generated/pow_c4_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i4.Tpo" "$(DEPDIR)/pow_c4_i4.Plo"; else rm -f "$(DEPDIR)/pow_c4_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i4.c' object='pow_c4_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i4.Plo' tmpdepfile='$(DEPDIR)/pow_c4_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i4.lo `test -f 'generated/pow_c4_i4.c' || echo '$(srcdir)/'`generated/pow_c4_i4.c
+
+pow_c8_i4.o: generated/pow_c8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i4.o -MD -MP -MF "$(DEPDIR)/pow_c8_i4.Tpo" -c -o pow_c8_i4.o `test -f 'generated/pow_c8_i4.c' || echo '$(srcdir)/'`generated/pow_c8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i4.Tpo" "$(DEPDIR)/pow_c8_i4.Po"; else rm -f "$(DEPDIR)/pow_c8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i4.c' object='pow_c8_i4.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i4.Po' tmpdepfile='$(DEPDIR)/pow_c8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i4.o `test -f 'generated/pow_c8_i4.c' || echo '$(srcdir)/'`generated/pow_c8_i4.c
+
+pow_c8_i4.obj: generated/pow_c8_i4.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i4.obj -MD -MP -MF "$(DEPDIR)/pow_c8_i4.Tpo" -c -o pow_c8_i4.obj `if test -f 'generated/pow_c8_i4.c'; then $(CYGPATH_W) 'generated/pow_c8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c8_i4.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i4.Tpo" "$(DEPDIR)/pow_c8_i4.Po"; else rm -f "$(DEPDIR)/pow_c8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i4.c' object='pow_c8_i4.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i4.Po' tmpdepfile='$(DEPDIR)/pow_c8_i4.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i4.obj `if test -f 'generated/pow_c8_i4.c'; then $(CYGPATH_W) 'generated/pow_c8_i4.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c8_i4.c'; fi`
+
+pow_c8_i4.lo: generated/pow_c8_i4.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i4.lo -MD -MP -MF "$(DEPDIR)/pow_c8_i4.Tpo" -c -o pow_c8_i4.lo `test -f 'generated/pow_c8_i4.c' || echo '$(srcdir)/'`generated/pow_c8_i4.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i4.Tpo" "$(DEPDIR)/pow_c8_i4.Plo"; else rm -f "$(DEPDIR)/pow_c8_i4.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i4.c' object='pow_c8_i4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i4.Plo' tmpdepfile='$(DEPDIR)/pow_c8_i4.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i4.lo `test -f 'generated/pow_c8_i4.c' || echo '$(srcdir)/'`generated/pow_c8_i4.c
+
+pow_i4_i8.o: generated/pow_i4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i8.o -MD -MP -MF "$(DEPDIR)/pow_i4_i8.Tpo" -c -o pow_i4_i8.o `test -f 'generated/pow_i4_i8.c' || echo '$(srcdir)/'`generated/pow_i4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i8.Tpo" "$(DEPDIR)/pow_i4_i8.Po"; else rm -f "$(DEPDIR)/pow_i4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i8.c' object='pow_i4_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i8.Po' tmpdepfile='$(DEPDIR)/pow_i4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i8.o `test -f 'generated/pow_i4_i8.c' || echo '$(srcdir)/'`generated/pow_i4_i8.c
+
+pow_i4_i8.obj: generated/pow_i4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i8.obj -MD -MP -MF "$(DEPDIR)/pow_i4_i8.Tpo" -c -o pow_i4_i8.obj `if test -f 'generated/pow_i4_i8.c'; then $(CYGPATH_W) 'generated/pow_i4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i4_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i8.Tpo" "$(DEPDIR)/pow_i4_i8.Po"; else rm -f "$(DEPDIR)/pow_i4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i8.c' object='pow_i4_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i8.Po' tmpdepfile='$(DEPDIR)/pow_i4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i8.obj `if test -f 'generated/pow_i4_i8.c'; then $(CYGPATH_W) 'generated/pow_i4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i4_i8.c'; fi`
+
+pow_i4_i8.lo: generated/pow_i4_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_i4_i8.Tpo" -c -o pow_i4_i8.lo `test -f 'generated/pow_i4_i8.c' || echo '$(srcdir)/'`generated/pow_i4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i4_i8.Tpo" "$(DEPDIR)/pow_i4_i8.Plo"; else rm -f "$(DEPDIR)/pow_i4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i4_i8.c' object='pow_i4_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i4_i8.Plo' tmpdepfile='$(DEPDIR)/pow_i4_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i4_i8.lo `test -f 'generated/pow_i4_i8.c' || echo '$(srcdir)/'`generated/pow_i4_i8.c
+
+pow_i8_i8.o: generated/pow_i8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i8.o -MD -MP -MF "$(DEPDIR)/pow_i8_i8.Tpo" -c -o pow_i8_i8.o `test -f 'generated/pow_i8_i8.c' || echo '$(srcdir)/'`generated/pow_i8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i8.Tpo" "$(DEPDIR)/pow_i8_i8.Po"; else rm -f "$(DEPDIR)/pow_i8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i8.c' object='pow_i8_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i8.Po' tmpdepfile='$(DEPDIR)/pow_i8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i8.o `test -f 'generated/pow_i8_i8.c' || echo '$(srcdir)/'`generated/pow_i8_i8.c
+
+pow_i8_i8.obj: generated/pow_i8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i8.obj -MD -MP -MF "$(DEPDIR)/pow_i8_i8.Tpo" -c -o pow_i8_i8.obj `if test -f 'generated/pow_i8_i8.c'; then $(CYGPATH_W) 'generated/pow_i8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i8_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i8.Tpo" "$(DEPDIR)/pow_i8_i8.Po"; else rm -f "$(DEPDIR)/pow_i8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i8.c' object='pow_i8_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i8.Po' tmpdepfile='$(DEPDIR)/pow_i8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i8.obj `if test -f 'generated/pow_i8_i8.c'; then $(CYGPATH_W) 'generated/pow_i8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_i8_i8.c'; fi`
+
+pow_i8_i8.lo: generated/pow_i8_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_i8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_i8_i8.Tpo" -c -o pow_i8_i8.lo `test -f 'generated/pow_i8_i8.c' || echo '$(srcdir)/'`generated/pow_i8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_i8_i8.Tpo" "$(DEPDIR)/pow_i8_i8.Plo"; else rm -f "$(DEPDIR)/pow_i8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_i8_i8.c' object='pow_i8_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_i8_i8.Plo' tmpdepfile='$(DEPDIR)/pow_i8_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_i8_i8.lo `test -f 'generated/pow_i8_i8.c' || echo '$(srcdir)/'`generated/pow_i8_i8.c
+
+pow_r4_i8.o: generated/pow_r4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i8.o -MD -MP -MF "$(DEPDIR)/pow_r4_i8.Tpo" -c -o pow_r4_i8.o `test -f 'generated/pow_r4_i8.c' || echo '$(srcdir)/'`generated/pow_r4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i8.Tpo" "$(DEPDIR)/pow_r4_i8.Po"; else rm -f "$(DEPDIR)/pow_r4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i8.c' object='pow_r4_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i8.Po' tmpdepfile='$(DEPDIR)/pow_r4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i8.o `test -f 'generated/pow_r4_i8.c' || echo '$(srcdir)/'`generated/pow_r4_i8.c
+
+pow_r4_i8.obj: generated/pow_r4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i8.obj -MD -MP -MF "$(DEPDIR)/pow_r4_i8.Tpo" -c -o pow_r4_i8.obj `if test -f 'generated/pow_r4_i8.c'; then $(CYGPATH_W) 'generated/pow_r4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r4_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i8.Tpo" "$(DEPDIR)/pow_r4_i8.Po"; else rm -f "$(DEPDIR)/pow_r4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i8.c' object='pow_r4_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i8.Po' tmpdepfile='$(DEPDIR)/pow_r4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i8.obj `if test -f 'generated/pow_r4_i8.c'; then $(CYGPATH_W) 'generated/pow_r4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r4_i8.c'; fi`
+
+pow_r4_i8.lo: generated/pow_r4_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r4_i8.Tpo" -c -o pow_r4_i8.lo `test -f 'generated/pow_r4_i8.c' || echo '$(srcdir)/'`generated/pow_r4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r4_i8.Tpo" "$(DEPDIR)/pow_r4_i8.Plo"; else rm -f "$(DEPDIR)/pow_r4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r4_i8.c' object='pow_r4_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r4_i8.Plo' tmpdepfile='$(DEPDIR)/pow_r4_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r4_i8.lo `test -f 'generated/pow_r4_i8.c' || echo '$(srcdir)/'`generated/pow_r4_i8.c
+
+pow_r8_i8.o: generated/pow_r8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i8.o -MD -MP -MF "$(DEPDIR)/pow_r8_i8.Tpo" -c -o pow_r8_i8.o `test -f 'generated/pow_r8_i8.c' || echo '$(srcdir)/'`generated/pow_r8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i8.Tpo" "$(DEPDIR)/pow_r8_i8.Po"; else rm -f "$(DEPDIR)/pow_r8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i8.c' object='pow_r8_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i8.Po' tmpdepfile='$(DEPDIR)/pow_r8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i8.o `test -f 'generated/pow_r8_i8.c' || echo '$(srcdir)/'`generated/pow_r8_i8.c
+
+pow_r8_i8.obj: generated/pow_r8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i8.obj -MD -MP -MF "$(DEPDIR)/pow_r8_i8.Tpo" -c -o pow_r8_i8.obj `if test -f 'generated/pow_r8_i8.c'; then $(CYGPATH_W) 'generated/pow_r8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r8_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i8.Tpo" "$(DEPDIR)/pow_r8_i8.Po"; else rm -f "$(DEPDIR)/pow_r8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i8.c' object='pow_r8_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i8.Po' tmpdepfile='$(DEPDIR)/pow_r8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i8.obj `if test -f 'generated/pow_r8_i8.c'; then $(CYGPATH_W) 'generated/pow_r8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_r8_i8.c'; fi`
+
+pow_r8_i8.lo: generated/pow_r8_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_r8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_r8_i8.Tpo" -c -o pow_r8_i8.lo `test -f 'generated/pow_r8_i8.c' || echo '$(srcdir)/'`generated/pow_r8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_r8_i8.Tpo" "$(DEPDIR)/pow_r8_i8.Plo"; else rm -f "$(DEPDIR)/pow_r8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_r8_i8.c' object='pow_r8_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_r8_i8.Plo' tmpdepfile='$(DEPDIR)/pow_r8_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_r8_i8.lo `test -f 'generated/pow_r8_i8.c' || echo '$(srcdir)/'`generated/pow_r8_i8.c
+
+pow_c4_i8.o: generated/pow_c4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i8.o -MD -MP -MF "$(DEPDIR)/pow_c4_i8.Tpo" -c -o pow_c4_i8.o `test -f 'generated/pow_c4_i8.c' || echo '$(srcdir)/'`generated/pow_c4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i8.Tpo" "$(DEPDIR)/pow_c4_i8.Po"; else rm -f "$(DEPDIR)/pow_c4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i8.c' object='pow_c4_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i8.Po' tmpdepfile='$(DEPDIR)/pow_c4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i8.o `test -f 'generated/pow_c4_i8.c' || echo '$(srcdir)/'`generated/pow_c4_i8.c
+
+pow_c4_i8.obj: generated/pow_c4_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i8.obj -MD -MP -MF "$(DEPDIR)/pow_c4_i8.Tpo" -c -o pow_c4_i8.obj `if test -f 'generated/pow_c4_i8.c'; then $(CYGPATH_W) 'generated/pow_c4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c4_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i8.Tpo" "$(DEPDIR)/pow_c4_i8.Po"; else rm -f "$(DEPDIR)/pow_c4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i8.c' object='pow_c4_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i8.Po' tmpdepfile='$(DEPDIR)/pow_c4_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i8.obj `if test -f 'generated/pow_c4_i8.c'; then $(CYGPATH_W) 'generated/pow_c4_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c4_i8.c'; fi`
+
+pow_c4_i8.lo: generated/pow_c4_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c4_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c4_i8.Tpo" -c -o pow_c4_i8.lo `test -f 'generated/pow_c4_i8.c' || echo '$(srcdir)/'`generated/pow_c4_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c4_i8.Tpo" "$(DEPDIR)/pow_c4_i8.Plo"; else rm -f "$(DEPDIR)/pow_c4_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c4_i8.c' object='pow_c4_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c4_i8.Plo' tmpdepfile='$(DEPDIR)/pow_c4_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c4_i8.lo `test -f 'generated/pow_c4_i8.c' || echo '$(srcdir)/'`generated/pow_c4_i8.c
+
+pow_c8_i8.o: generated/pow_c8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i8.o -MD -MP -MF "$(DEPDIR)/pow_c8_i8.Tpo" -c -o pow_c8_i8.o `test -f 'generated/pow_c8_i8.c' || echo '$(srcdir)/'`generated/pow_c8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i8.Tpo" "$(DEPDIR)/pow_c8_i8.Po"; else rm -f "$(DEPDIR)/pow_c8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i8.c' object='pow_c8_i8.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i8.Po' tmpdepfile='$(DEPDIR)/pow_c8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i8.o `test -f 'generated/pow_c8_i8.c' || echo '$(srcdir)/'`generated/pow_c8_i8.c
+
+pow_c8_i8.obj: generated/pow_c8_i8.c
+@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i8.obj -MD -MP -MF "$(DEPDIR)/pow_c8_i8.Tpo" -c -o pow_c8_i8.obj `if test -f 'generated/pow_c8_i8.c'; then $(CYGPATH_W) 'generated/pow_c8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c8_i8.c'; fi`; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i8.Tpo" "$(DEPDIR)/pow_c8_i8.Po"; else rm -f "$(DEPDIR)/pow_c8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i8.c' object='pow_c8_i8.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i8.Po' tmpdepfile='$(DEPDIR)/pow_c8_i8.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i8.obj `if test -f 'generated/pow_c8_i8.c'; then $(CYGPATH_W) 'generated/pow_c8_i8.c'; else $(CYGPATH_W) '$(srcdir)/generated/pow_c8_i8.c'; fi`
+
+pow_c8_i8.lo: generated/pow_c8_i8.c
+@am__fastdepCC_TRUE@   if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pow_c8_i8.lo -MD -MP -MF "$(DEPDIR)/pow_c8_i8.Tpo" -c -o pow_c8_i8.lo `test -f 'generated/pow_c8_i8.c' || echo '$(srcdir)/'`generated/pow_c8_i8.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/pow_c8_i8.Tpo" "$(DEPDIR)/pow_c8_i8.Plo"; else rm -f "$(DEPDIR)/pow_c8_i8.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='generated/pow_c8_i8.c' object='pow_c8_i8.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      depfile='$(DEPDIR)/pow_c8_i8.Plo' tmpdepfile='$(DEPDIR)/pow_c8_i8.TPlo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pow_c8_i8.lo `test -f 'generated/pow_c8_i8.c' || echo '$(srcdir)/'`generated/pow_c8_i8.c
+
 backspace.o: io/backspace.c
 @am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT backspace.o -MD -MP -MF "$(DEPDIR)/backspace.Tpo" -c -o backspace.o `test -f 'io/backspace.c' || echo '$(srcdir)/'`io/backspace.c; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/backspace.Tpo" "$(DEPDIR)/backspace.Po"; else rm -f "$(DEPDIR)/backspace.Tpo"; exit 1; fi
@@ -5464,6 +5794,9 @@ uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES
 @MAINTAINER_MODE_TRUE@$(i_set_exponent_c): m4/set_exponent.m4 m4/mtype.m4
 @MAINTAINER_MODE_TRUE@ m4 -Dfile=$@ -I$(srcdir)/m4 set_exponent.m4 > $@
 
+@MAINTAINER_MODE_TRUE@$(i_pow_c): m4/pow.m4 $(I_M4_DEPS)
+@MAINTAINER_MODE_TRUE@ m4 -Dfile=$@ -I$(srcdir)/m4 pow.m4 > $@
+
 @MAINTAINER_MODE_TRUE@$(gfor_math_trig_c): m4/ctrig.m4 m4/mtype.m4
 @MAINTAINER_MODE_TRUE@ m4 -Dfile=$@ -I$(srcdir)/m4 ctrig.m4 > $@
 
diff --git a/libgfortran/generated/pow_c4_i4.c b/libgfortran/generated/pow_c4_i4.c
new file mode 100644 (file)
index 0000000..de0f6f6
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_COMPLEX_4
+prefix(pow_c4_i4) (GFC_COMPLEX_4 a, GFC_INTEGER_4 b)
+{
+  GFC_COMPLEX_4 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_c4_i8.c b/libgfortran/generated/pow_c4_i8.c
new file mode 100644 (file)
index 0000000..6606527
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_COMPLEX_4
+prefix(pow_c4_i8) (GFC_COMPLEX_4 a, GFC_INTEGER_8 b)
+{
+  GFC_COMPLEX_4 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_c8_i4.c b/libgfortran/generated/pow_c8_i4.c
new file mode 100644 (file)
index 0000000..5efb874
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_COMPLEX_8
+prefix(pow_c8_i4) (GFC_COMPLEX_8 a, GFC_INTEGER_4 b)
+{
+  GFC_COMPLEX_8 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_c8_i8.c b/libgfortran/generated/pow_c8_i8.c
new file mode 100644 (file)
index 0000000..17026b3
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_COMPLEX_8
+prefix(pow_c8_i8) (GFC_COMPLEX_8 a, GFC_INTEGER_8 b)
+{
+  GFC_COMPLEX_8 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_i4_i4.c b/libgfortran/generated/pow_i4_i4.c
new file mode 100644 (file)
index 0000000..15a349c
--- /dev/null
@@ -0,0 +1,62 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_INTEGER_4
+prefix(pow_i4_i4) (GFC_INTEGER_4 a, GFC_INTEGER_4 b)
+{
+  GFC_INTEGER_4 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+         if (x == 1)
+           return 1;
+         if (x == -1)
+           return (n & 1) ? -1 : 1;
+         return (x == 0) ? 1 / x : 0;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_i4_i8.c b/libgfortran/generated/pow_i4_i8.c
new file mode 100644 (file)
index 0000000..72e8837
--- /dev/null
@@ -0,0 +1,62 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_INTEGER_4
+prefix(pow_i4_i8) (GFC_INTEGER_4 a, GFC_INTEGER_8 b)
+{
+  GFC_INTEGER_4 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+         if (x == 1)
+           return 1;
+         if (x == -1)
+           return (n & 1) ? -1 : 1;
+         return (x == 0) ? 1 / x : 0;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_i8_i4.c b/libgfortran/generated/pow_i8_i4.c
new file mode 100644 (file)
index 0000000..7a900d7
--- /dev/null
@@ -0,0 +1,62 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_INTEGER_8
+prefix(pow_i8_i4) (GFC_INTEGER_8 a, GFC_INTEGER_4 b)
+{
+  GFC_INTEGER_8 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+         if (x == 1)
+           return 1;
+         if (x == -1)
+           return (n & 1) ? -1 : 1;
+         return (x == 0) ? 1 / x : 0;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_i8_i8.c b/libgfortran/generated/pow_i8_i8.c
new file mode 100644 (file)
index 0000000..591536f
--- /dev/null
@@ -0,0 +1,62 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_INTEGER_8
+prefix(pow_i8_i8) (GFC_INTEGER_8 a, GFC_INTEGER_8 b)
+{
+  GFC_INTEGER_8 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+         if (x == 1)
+           return 1;
+         if (x == -1)
+           return (n & 1) ? -1 : 1;
+         return (x == 0) ? 1 / x : 0;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_r4_i4.c b/libgfortran/generated/pow_r4_i4.c
new file mode 100644 (file)
index 0000000..ffb8df7
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_REAL_4
+prefix(pow_r4_i4) (GFC_REAL_4 a, GFC_INTEGER_4 b)
+{
+  GFC_REAL_4 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_r4_i8.c b/libgfortran/generated/pow_r4_i8.c
new file mode 100644 (file)
index 0000000..1283882
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_REAL_4
+prefix(pow_r4_i8) (GFC_REAL_4 a, GFC_INTEGER_8 b)
+{
+  GFC_REAL_4 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_r8_i4.c b/libgfortran/generated/pow_r8_i4.c
new file mode 100644 (file)
index 0000000..fcead04
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_REAL_8
+prefix(pow_r8_i4) (GFC_REAL_8 a, GFC_INTEGER_4 b)
+{
+  GFC_REAL_8 pow, x;
+  GFC_INTEGER_4 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/generated/pow_r8_i8.c b/libgfortran/generated/pow_r8_i8.c
new file mode 100644 (file)
index 0000000..7f75c82
--- /dev/null
@@ -0,0 +1,60 @@
+/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+GFC_REAL_8
+prefix(pow_r8_i8) (GFC_REAL_8 a, GFC_INTEGER_8 b)
+{
+  GFC_REAL_8 pow, x;
+  GFC_INTEGER_8 n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+
+         n = -n;
+         x = pow / x;
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}
diff --git a/libgfortran/m4/pow.m4 b/libgfortran/m4/pow.m4
new file mode 100644 (file)
index 0000000..4bf453a
--- /dev/null
@@ -0,0 +1,68 @@
+`/* Support routines for the intrinsic power (**) operator.
+   Copyright 2004 Free Software Foundation, Inc.
+   Contributed by Paul Brook
+
+This file is part of the GNU Fortran 95 runtime library (libgfor).
+
+Libgfor is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+Ligbfor is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libgfor; see the file COPYING.LIB.  If not,
+write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#include "config.h"
+#include "libgfortran.h"'
+include(iparm.m4)dnl
+
+/* Uuse Binary Method to calculate the powi. This is not an optimal but
+   a simple and reasonable arithmetic. See section 4.6.3, "Evaluation of
+   Powers" of Donald E. Knuth, "Seminumerical Algorithms", Vol. 2, "The Art
+   of Computer Programming", 3rd Edition, 1998.  */
+
+rtype_name
+`prefix(pow_'rtype_code`_'atype_code) (rtype_name a, atype_name b)
+{
+  rtype_name pow, x;
+  atype_name n, u;
+  
+  n = b;
+  x = a;
+  pow = 1;
+  if (n != 0)
+    {
+      if (n < 0)
+       {
+ifelse(rtype_letter,i,`dnl
+         if (x == 1)
+           return 1;
+         if (x == -1)
+           return (n & 1) ? -1 : 1;
+         return (x == 0) ? 1 / x : 0;
+',`
+         n = -n;
+         x = pow / x;
+')dnl
+       }
+      u = n;
+      for (;;)
+       {
+         if (u & 1)
+           pow *= x;
+         u >>= 1;
+         if (u)
+           x *= x;
+         else
+           break;
+       }
+    }
+  return pow;
+}