[fortran] Add modular exponentiation for unsigned

Message ID 065b2e22-513f-4ec3-b619-f7d427b41c87@netcologne.de
State New
Headers
Series [fortran] Add modular exponentiation for unsigned |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm success Build passed
linaro-tcwg-bot/tcwg_gcc_check--master-arm fail Test failed
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 success Build passed
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 fail Test failed

Commit Message

Thomas Koenig Feb. 2, 2025, 5:14 p.m. UTC
  Hello world,

the attached patch implements modular exponentiation for UNSIGNED.
This only allows unsigned**unsigned; this was the consensus that
was reached after some discussion in the PR.  (Adding anything else
would also have been rather complex :-)

The two test cases are somewhat longish, and also script-generated,
as you might have guessed.  They test all four possible code paths:
constant ** constant via gmp (which serves as the gold standard :-),
constant ** variable, variable ** constant and variable ** variable.

Regarding -pedantic: I put this in because this is a deviation
against the original paper as accepted by J3 and not taken up
by WG5, but I am quite open to removing that (and also removing
the restriction on unary minus).

Regression-tested on x86_64.

OK for trunk?

Best regards

	Thomas
gcc/fortran/ChangeLog:

	* arith.cc (arith_power): Handle modular arithmetic for
	BT_UNSIGNED.
	(eval_intrinsic):  Error for unsigned exponentiation with
	-pedantic.
	* expr.cc (gfc_type_convert_binary): Use type of first
	argument for unsigned exponentiation.
	* gfortran.texi: Mention arithmetic exponentiation.
	* resolve.cc (resolve_operator): Allow unsigned exponentiation.
	* trans-decl.cc (gfc_build_intrinsic_function_decls): Build
	declarations for unsigned exponentiation.
	* trans-expr.cc (gfc_conv_cst_uint_power): New function.
	(gfc_conv_power_op): Call it.  Handle unsigned exponentiation.
	* trans.h (gfor_fndecl_unsigned_pow_list):  Add declaration.

libgfortran/ChangeLog:

	* Makefile.am: Add files for unsigned exponentiation.
	* Makefile.in: Regenerate.
	* gfortran.map: Add functions for unsigned exponentiation.
	* generated/pow_m16_m1.c: New file.
	* generated/pow_m16_m16.c: New file.
	* generated/pow_m16_m2.c: New file.
	* generated/pow_m16_m4.c: New file.
	* generated/pow_m16_m8.c: New file.
	* generated/pow_m1_m1.c: New file.
	* generated/pow_m1_m16.c: New file.
	* generated/pow_m1_m2.c: New file.
	* generated/pow_m1_m4.c: New file.
	* generated/pow_m1_m8.c: New file.
	* generated/pow_m2_m1.c: New file.
	* generated/pow_m2_m16.c: New file.
	* generated/pow_m2_m2.c: New file.
	* generated/pow_m2_m4.c: New file.
	* generated/pow_m2_m8.c: New file.
	* generated/pow_m4_m1.c: New file.
	* generated/pow_m4_m16.c: New file.
	* generated/pow_m4_m2.c: New file.
	* generated/pow_m4_m4.c: New file.
	* generated/pow_m4_m8.c: New file.
	* generated/pow_m8_m1.c: New file.
	* generated/pow_m8_m16.c: New file.
	* generated/pow_m8_m2.c: New file.
	* generated/pow_m8_m4.c: New file.
	* generated/pow_m8_m8.c: New file.
	* m4/powu.m4: New file.

gcc/testsuite/ChangeLog:

	* gfortran.dg/unsigned_43.f90: New test.
	* gfortran.dg/unsigned_44.f90: New test.
  

Comments

Thomas Koenig Feb. 3, 2025, 8:33 a.m. UTC | #1
> Regression-tested on x86_64.

Seems I didn't look closely enough, I will check and resubmit.

Best regards

	Thomas
  
Thomas Koenig Feb. 3, 2025, 7:55 p.m. UTC | #2
Hello world,

with the following patch to the failing test case

diff --git a/gcc/testsuite/gfortran.dg/unsigned_15.f90 
b/gcc/testsuite/gfortran.dg/unsigned_15.f90
index da4ccd2dc17..80a7a54e380 100644
--- a/gcc/testsuite/gfortran.dg/unsigned_15.f90
+++ b/gcc/testsuite/gfortran.dg/unsigned_15.f90
@@ -6,8 +6,8 @@ program main
    unsigned :: u
    print *,1 + 2u   ! { dg-error "Operands of binary numeric operator" }
    print *,2u + 1   ! { dg-error "Operands of binary numeric operator" }
-  print *,2u ** 1  ! { dg-error "Exponentiation not valid" }
-  print *,2u ** 1u ! { dg-error "Exponentiation not valid" }
+  print *,2u ** 1  ! { dg-error "Operands of binary numeric operator" }
+  print *,2u ** 1u
    print *,1u < 2   ! { dg-error "Inconsistent types" }
    print *,int(1u) < 2
  end program main

the patch posted to

https://gcc.gnu.org/pipermail/fortran/2025-February/061670.html

and

https://gcc.gnu.org/pipermail/gcc-patches/2025-February/674931.html

passes (I don't want to re-submit the whole thing).

OK for trunk?

Best regards

	Thomas
  
Jerry D Feb. 3, 2025, 8:45 p.m. UTC | #3
On 2/3/25 11:55 AM, Thomas Koenig wrote:
> Hello world,
> 
> with the following patch to the failing test case
> 
> diff --git a/gcc/testsuite/gfortran.dg/unsigned_15.f90 b/gcc/testsuite/ 
> gfortran.dg/unsigned_15.f90
> index da4ccd2dc17..80a7a54e380 100644
> --- a/gcc/testsuite/gfortran.dg/unsigned_15.f90
> +++ b/gcc/testsuite/gfortran.dg/unsigned_15.f90
> @@ -6,8 +6,8 @@ program main
>     unsigned :: u
>     print *,1 + 2u   ! { dg-error "Operands of binary numeric operator" }
>     print *,2u + 1   ! { dg-error "Operands of binary numeric operator" }
> -  print *,2u ** 1  ! { dg-error "Exponentiation not valid" }
> -  print *,2u ** 1u ! { dg-error "Exponentiation not valid" }
> +  print *,2u ** 1  ! { dg-error "Operands of binary numeric operator" }
> +  print *,2u ** 1u
>     print *,1u < 2   ! { dg-error "Inconsistent types" }
>     print *,int(1u) < 2
>   end program main
> 
> the patch posted to
> 
> https://gcc.gnu.org/pipermail/fortran/2025-February/061670.html
> 
> and
> 
> https://gcc.gnu.org/pipermail/gcc-patches/2025-February/674931.html
> 
> passes (I don't want to re-submit the whole thing).
> 
> OK for trunk?
> 
> Best regards
> 
>      Thomas
> 

Yes, please proceed.

Jerry
  
Thomas Koenig Feb. 4, 2025, 7:59 a.m. UTC | #4
Hi Jerry,

committed as r15-7345 .

Thanks for the review!

Best regards

	Thomas
  

Patch

diff --git a/gcc/fortran/arith.cc b/gcc/fortran/arith.cc
index 5fc91421e48..82a8b6fb995 100644
--- a/gcc/fortran/arith.cc
+++ b/gcc/fortran/arith.cc
@@ -1143,6 +1143,20 @@  arith_power (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp)
 		 op2->value.complex, GFC_MPC_RND_MODE);
       }
       break;
+    case BT_UNSIGNED:
+      {
+	int k;
+	mpz_t x;
+	gcc_assert (op1->ts.type == BT_UNSIGNED);
+	k = gfc_validate_kind (BT_UNSIGNED, op1->ts.kind, false);
+	/* Exponentiation is performed modulo x = 2**n.  */
+	mpz_init (x);
+	mpz_add_ui (x, gfc_unsigned_kinds[k].huge, 1);
+	mpz_powm (result->value.integer, op1->value.integer,
+		  op2->value.integer, x);
+	mpz_clear (x);
+      }
+      break;
     default:
       gfc_internal_error ("arith_power(): unknown type");
     }
@@ -1827,10 +1841,11 @@  eval_intrinsic (gfc_intrinsic_op op,
     gcc_fallthrough ();
     /* Numeric binary  */
     case INTRINSIC_POWER:
-      if (flag_unsigned && op == INTRINSIC_POWER)
+      if (pedantic && (op1->ts.type == BT_UNSIGNED || op2->ts.type == BT_UNSIGNED))
 	{
-	  if (op1->ts.type == BT_UNSIGNED || op2->ts.type == BT_UNSIGNED)
-	    goto runtime;
+	  gfc_error ("Unsigned exponentiation not permitted with -pedantic "
+		     "at %L", &op1->where);
+	  goto runtime;
 	}
 
       gcc_fallthrough ();
@@ -1940,7 +1955,6 @@  runtime:
   /* Create a run-time expression.  */
   result = gfc_get_operator_expr (&op1->where, op, op1, op2);
   result->ts = temp.ts;
-
   return result;
 }
 
diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc
index 7f3f6c52fb5..e4ab3ba5bfa 100644
--- a/gcc/fortran/expr.cc
+++ b/gcc/fortran/expr.cc
@@ -981,6 +981,14 @@  gfc_type_convert_binary (gfc_expr *e, int wconversion)
 	  goto done;
 	}
 
+      /* Unsigned exponentiation is special, we need the type of the first
+	 argument here because of modulo arithmetic.  */
+      if (op1->ts.type == BT_UNSIGNED && e->value.op.op == INTRINSIC_POWER)
+	{
+	  e->ts = op1->ts;
+	  goto done;
+	}
+
       if (op1->ts.kind > op2->ts.kind)
 	gfc_convert_type_warn (op2, &op1->ts, 2, wconversion);
       else
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index d3fe0935aa4..ab8a4cb590f 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -2772,9 +2772,10 @@  end program main
 @noindent
 which outputs the number 18446744073709551583.
 
-Arithmetic operations work on unsigned integers, except for exponentiation,
-which is prohibited.  Unary minus is not permitted when @code{-pedantic}
-is in force; this prohibition is part of J3/24-116.txt.
+Arithmetic operations work on unsigned integers, also for
+exponentiation.  As an extension to J3/24-116.txt, unary minus
+and exponentiation of unsigned integers are permitted unless
+@code{-pedantic} is in force.
 
 In intrinsic procedures, unsigned arguments are typically permitted
 for arguments for the data to be processed, analogous to the
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 124f4ac4edc..a35353deb18 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -4310,19 +4310,6 @@  resolve_operator (gfc_expr *e)
       return false;
 
     case INTRINSIC_POWER:
-
-      if (flag_unsigned)
-	{
-	  if (op1->ts.type == BT_UNSIGNED || op2->ts.type == BT_UNSIGNED)
-	    {
-	      CHECK_INTERFACES
-	      gfc_error ("Exponentiation not valid at %L for %s and %s",
-			 &e->where, gfc_typename (op1), gfc_typename (op2));
-	      return false;
-	    }
-	}
-      gcc_fallthrough ();
-
     case INTRINSIC_PLUS:
     case INTRINSIC_MINUS:
     case INTRINSIC_TIMES:
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index 4ae22a5584d..1af8702144f 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -189,6 +189,8 @@  tree gfor_fndecl_caf_random_init;
    trans-intrinsic.cc.  */
 
 gfc_powdecl_list gfor_fndecl_math_powi[4][3];
+tree gfor_fndecl_unsigned_pow_list[5][5];
+
 tree gfor_fndecl_math_ishftc4;
 tree gfor_fndecl_math_ishftc8;
 tree gfor_fndecl_math_ishftc16;
@@ -3728,8 +3730,10 @@  gfc_build_intrinsic_function_decls (void)
     int rkind, ikind, jkind;
 #define NIKINDS 3
 #define NRKINDS 4
-    static int ikinds[NIKINDS] = {4, 8, 16};
-    static int rkinds[NRKINDS] = {4, 8, 10, 16};
+#define NUKINDS 5
+    static const int ikinds[NIKINDS] = {4, 8, 16};
+    static const int rkinds[NRKINDS] = {4, 8, 10, 16};
+    static const int ukinds[NUKINDS] = {1, 2, 4, 8, 16};
     char name[PREFIX_LEN + 12]; /* _gfortran_pow_?n_?n */
 
     for (ikind=0; ikind < NIKINDS; ikind++)
@@ -3779,9 +3783,29 @@  gfc_build_intrinsic_function_decls (void)
 		TREE_NOTHROW (gfor_fndecl_math_powi[rkind][ikind].cmplx) = 1;
 	      }
 	  }
+	/* For unsigned types, we have every power for every type.  */
+	for (int base = 0; base < NUKINDS; base++)
+	  {
+	    tree base_type = gfc_get_unsigned_type (ukinds[base]);
+	    for (int expon = 0; expon < NUKINDS; expon++)
+	      {
+		tree expon_type = gfc_get_unsigned_type (ukinds[base]);
+		if (base_type && expon_type)
+		  {
+		    sprintf (name, PREFIX("pow_m%d_m%d"), ukinds[base],
+			 ukinds[expon]);
+		    gfor_fndecl_unsigned_pow_list [base][expon] =
+		      gfc_build_library_function_decl (get_identifier (name),
+			 base_type, 2, base_type, expon_type);
+		    TREE_READONLY (gfor_fndecl_unsigned_pow_list[base][expon]) = 1;
+		    TREE_NOTHROW (gfor_fndecl_unsigned_pow_list[base][expon]) = 1;
+		  }
+	      }
+	  }
       }
 #undef NIKINDS
 #undef NRKINDS
+#undef NUKINDS
   }
 
   gfor_fndecl_math_ishftc4 = gfc_build_library_function_decl (
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index bef49d32a58..612fbe6c2ab 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -3595,8 +3595,93 @@  gfc_conv_cst_int_power (gfc_se * se, tree lhs, tree rhs)
   return 1;
 }
 
+/* Convert lhs**rhs, for constant rhs, when both are unsigned.
+   Method:
+   if (rhs == 0)      ! Checked here.
+     return 1;
+   if (lhs & 1 == 1)  ! odd_cnd
+     {
+       if (bit_size(rhs) < bit_size(lhs))  ! Checked here.
+	 return lhs ** rhs;
+
+       mask = (1 < bit_size(a) - 1) / 2;
+       return lhs ** (n & rhs);
+     }
+   if (rhs > bit_size(lhs))  ! Checked here.
+     return 0;
+
+   return lhs ** rhs;
+*/
+
+static int
+gfc_conv_cst_uint_power (gfc_se * se, tree lhs, tree rhs)
+{
+  tree type = TREE_TYPE (lhs);
+  tree tmp, is_odd, odd_branch, even_branch;
+  unsigned HOST_WIDE_INT lhs_prec, rhs_prec;
+  wi::tree_to_wide_ref wrhs = wi::to_wide (rhs);
+  unsigned HOST_WIDE_INT n, n_odd;
+  tree vartmp_odd[POWI_TABLE_SIZE], vartmp_even[POWI_TABLE_SIZE];
+
+  /* Anything ** 0 is one.  */
+  if (tree_int_cst_sgn (rhs) == 0)
+    {
+      se->expr = build_int_cst (type, 1);
+      return 1;
+    }
+
+  if (!wi::fits_shwi_p (wrhs))
+    return 0;
+
+  n = wrhs.to_uhwi ();
+
+  /* tmp = a & 1; . */
+  tmp = fold_build2_loc (input_location, BIT_AND_EXPR, type,
+			 lhs, build_int_cst (type, 1));
+  is_odd = fold_build2_loc (input_location, EQ_EXPR, logical_type_node,
+			    tmp, build_int_cst (type, 1));
+
+  lhs_prec = TYPE_PRECISION (type);
+  rhs_prec = TYPE_PRECISION (TREE_TYPE(rhs));
+
+  if (rhs_prec >= lhs_prec)
+    {
+      unsigned HOST_WIDE_INT mask;
+      mask = (((unsigned HOST_WIDE_INT) 1) << (lhs_prec - 1)) - 1;
+      n_odd = n & mask;
+    }
+  else
+    n_odd = n;
+
+  memset (vartmp_odd, 0, sizeof (vartmp_odd));
+  vartmp_odd[0] = build_int_cst(type, 1);
+  vartmp_odd[1] = lhs;
+  odd_branch = gfc_conv_powi (se, n_odd, vartmp_odd);
+  even_branch = NULL_TREE;
+
+  if (n > lhs_prec)
+    even_branch = build_int_cst (type, 0);
+  else
+    {
+      if (n_odd != n)
+	{
+	  memset (vartmp_even, 0, sizeof (vartmp_even));
+	  vartmp_even[0] = build_int_cst(type, 1);
+	  vartmp_even[1] = lhs;
+	  even_branch = gfc_conv_powi (se, n, vartmp_even);
+	}
+    }
+  if (even_branch != NULL_TREE)
+    se->expr = fold_build3_loc (input_location, COND_EXPR, type, is_odd,
+				odd_branch, even_branch);
+  else
+    se->expr = odd_branch;
+
+  return 1;
+}
 
-/* Power op (**).  Constant integer exponent has special handling.  */
+/* Power op (**).  Constant integer exponent and powers of 2 have special
+   handling.  */
 
 static void
 gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
@@ -3618,13 +3703,29 @@  gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
   gfc_conv_expr_val (&rse, expr->value.op.op2);
   gfc_add_block_to_block (&se->pre, &rse.pre);
 
-  if (expr->value.op.op2->ts.type == BT_INTEGER
+  if (expr->value.op.op2->expr_type == EXPR_CONSTANT)
+    {
+      if (expr->value.op.op2->ts.type == BT_INTEGER)
+	{
+	  if (gfc_conv_cst_int_power (se, lse.expr, rse.expr))
+	    return;
+	}
+      else if (expr->value.op.op2->ts.type == BT_UNSIGNED)
+	{
+	  if (gfc_conv_cst_uint_power (se, lse.expr, rse.expr))
+	    return;
+	}
+    }
+
+  if ((expr->value.op.op2->ts.type == BT_INTEGER
+       || expr->value.op.op2->ts.type == BT_UNSIGNED)
       && expr->value.op.op2->expr_type == EXPR_CONSTANT)
     if (gfc_conv_cst_int_power (se, lse.expr, rse.expr))
       return;
 
   if (INTEGER_CST_P (lse.expr)
-      && TREE_CODE (TREE_TYPE (rse.expr)) == INTEGER_TYPE)
+      && TREE_CODE (TREE_TYPE (rse.expr)) == INTEGER_TYPE
+      && expr->value.op.op2->ts.type == BT_INTEGER)
     {
       wi::tree_to_wide_ref wlhs = wi::to_wide (lse.expr);
       HOST_WIDE_INT v;
@@ -3724,6 +3825,49 @@  gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
 	  return;
 	}
     }
+  /* Handle unsigned separate from signed above, things would be too
+     complicated otherwise.  */
+
+  if (INTEGER_CST_P (lse.expr) && expr->value.op.op1->ts.type == BT_UNSIGNED)
+    {
+      gfc_expr * op1 = expr->value.op.op1;
+      tree type;
+
+      type = TREE_TYPE (lse.expr);
+
+      if (mpz_cmp_ui (op1->value.integer, 1) == 0)
+	{
+	  /* 1**something is always 1.  */
+	  se->expr = build_int_cst (type, 1);
+	  return;
+	}
+
+      /* Simplify 2u**x to a shift, with the value set to zero if it falls
+       outside the range.  */
+      if (mpz_popcount (op1->value.integer) == 1)
+	{
+	  tree prec_m1, lim, shift, lshift, cond, tmp;
+	  tree rtype = TREE_TYPE (rse.expr);
+	  int e = mpz_scan1 (op1->value.integer, 0);
+
+	  shift = fold_build2_loc (input_location, MULT_EXPR,
+				   rtype, build_int_cst (rtype, e),
+				   rse.expr);
+	  lshift = fold_build2_loc (input_location, LSHIFT_EXPR, type,
+				    build_int_cst (type, 1), shift);
+	  prec_m1 = fold_build2_loc (input_location, MINUS_EXPR, rtype,
+				     build_int_cst (rtype, TYPE_PRECISION (type)),
+				     build_int_cst (rtype, 1));
+	  lim = fold_build2_loc (input_location, TRUNC_DIV_EXPR, rtype,
+				 prec_m1, build_int_cst (rtype, e));
+	  cond = fold_build2_loc (input_location, GT_EXPR, logical_type_node,
+				  rse.expr, lim);
+	  tmp = fold_build3_loc (input_location, COND_EXPR, type, cond,
+				 build_int_cst (type, 0), lshift);
+	  se->expr = tmp;
+	  return;
+	}
+    }
 
   gfc_int4_type_node = gfc_get_int_type (4);
 
@@ -3856,6 +4000,16 @@  gfc_conv_power_op (gfc_se * se, gfc_expr * expr)
       fndecl = gfc_builtin_decl_for_float_kind (BUILT_IN_CPOW, kind);
       break;
 
+    case BT_UNSIGNED:
+      {
+	/* Valid kinds for unsigned are 1, 2, 4, 8, 16.  Instead of using a
+	   large switch statement, let's just use __builtin_ctz.  */
+	int base = __builtin_ctz (expr->value.op.op1->ts.kind);
+	int expon = __builtin_ctz (expr->value.op.op2->ts.kind);
+	fndecl = gfor_fndecl_unsigned_pow_list[base][expon];
+      }
+      break;
+
     default:
       gcc_unreachable ();
       break;
diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h
index 449d2b3026c..915f17549c9 100644
--- a/gcc/fortran/trans.h
+++ b/gcc/fortran/trans.h
@@ -942,6 +942,8 @@  typedef struct GTY(()) gfc_powdecl_list {
 gfc_powdecl_list;
 
 extern GTY(()) gfc_powdecl_list gfor_fndecl_math_powi[4][3];
+extern GTY(()) tree gfor_fndecl_unsigned_pow_list[5][5];
+
 extern GTY(()) tree gfor_fndecl_math_ishftc4;
 extern GTY(()) tree gfor_fndecl_math_ishftc8;
 extern GTY(()) tree gfor_fndecl_math_ishftc16;
diff --git a/gcc/testsuite/gfortran.dg/unsigned_43.f90 b/gcc/testsuite/gfortran.dg/unsigned_43.f90
new file mode 100644
index 00000000000..fe1cd463f10
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unsigned_43.f90
@@ -0,0 +1,11862 @@ 
+! { dg-do run }
+! { dg-options -funsigned }
+program memain
+  implicit none
+  call tst_1_1
+  call tst_1_2
+  call tst_1_4
+  call tst_1_8
+  call tst_2_1
+  call tst_2_2
+  call tst_2_4
+  call tst_2_8
+  call tst_4_1
+  call tst_4_2
+  call tst_4_4
+  call tst_4_8
+  call tst_8_1
+  call tst_8_2
+  call tst_8_4
+  call tst_8_8
+contains
+  subroutine tst_1_1
+    unsigned(kind=1) :: x, r1, r2, r3, r4
+    unsigned(kind=1) :: n
+    x = 0u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_1_1
+  subroutine tst_1_2
+    unsigned(kind=1) :: x, r1, r2, r3, r4
+    unsigned(kind=2) :: n
+    x = 0u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_1_2
+  subroutine tst_1_4
+    unsigned(kind=1) :: x, r1, r2, r3, r4
+    unsigned(kind=4) :: n
+    x = 0u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_1_4
+  subroutine tst_1_8
+    unsigned(kind=1) :: x, r1, r2, r3, r4
+    unsigned(kind=8) :: n
+    x = 0u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_1_8
+  subroutine tst_2_1
+    unsigned(kind=2) :: x, r1, r2, r3, r4
+    unsigned(kind=1) :: n
+    x = 0u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_2_1
+  subroutine tst_2_2
+    unsigned(kind=2) :: x, r1, r2, r3, r4
+    unsigned(kind=2) :: n
+    x = 0u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_2_2
+  subroutine tst_2_4
+    unsigned(kind=2) :: x, r1, r2, r3, r4
+    unsigned(kind=4) :: n
+    x = 0u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_2_4
+  subroutine tst_2_8
+    unsigned(kind=2) :: x, r1, r2, r3, r4
+    unsigned(kind=8) :: n
+    x = 0u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_2_8
+  subroutine tst_4_1
+    unsigned(kind=4) :: x, r1, r2, r3, r4
+    unsigned(kind=1) :: n
+    x = 0u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_4_1
+  subroutine tst_4_2
+    unsigned(kind=4) :: x, r1, r2, r3, r4
+    unsigned(kind=2) :: n
+    x = 0u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_4_2
+  subroutine tst_4_4
+    unsigned(kind=4) :: x, r1, r2, r3, r4
+    unsigned(kind=4) :: n
+    x = 0u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_4_4
+  subroutine tst_4_8
+    unsigned(kind=4) :: x, r1, r2, r3, r4
+    unsigned(kind=8) :: n
+    x = 0u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_4_8
+  subroutine tst_8_1
+    unsigned(kind=8) :: x, r1, r2, r3, r4
+    unsigned(kind=1) :: n
+    x = 0u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_8_1
+  subroutine tst_8_2
+    unsigned(kind=8) :: x, r1, r2, r3, r4
+    unsigned(kind=2) :: n
+    x = 0u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_8_2
+  subroutine tst_8_4
+    unsigned(kind=8) :: x, r1, r2, r3, r4
+    unsigned(kind=4) :: n
+    x = 0u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_8_4
+  subroutine tst_8_8
+    unsigned(kind=8) :: x, r1, r2, r3, r4
+    unsigned(kind=8) :: n
+    x = 0u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_8_8
+end program memain
diff --git a/gcc/testsuite/gfortran.dg/unsigned_44.f90 b/gcc/testsuite/gfortran.dg/unsigned_44.f90
new file mode 100644
index 00000000000..b25cbeb5512
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/unsigned_44.f90
@@ -0,0 +1,8436 @@ 
+! { dg-do run }
+! { dg-options -funsigned }
+! { dg-require-effective-target fortran_integer_16 }
+program memain
+  implicit none
+  call tst_1_16
+  call tst_2_16
+  call tst_4_16
+  call tst_8_16
+  call tst_16_1
+  call tst_16_2
+  call tst_16_4
+  call tst_16_8
+  call tst_16_16
+contains
+  subroutine tst_1_16
+    unsigned(kind=1) :: x, r1, r2, r3, r4
+    unsigned(kind=16) :: n
+    x = 0u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 0u_1 ** n
+    r4 = 0u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1u_1 ** n
+    r4 = 1u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 2u_1 ** n
+    r4 = 2u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 3u_1 ** n
+    r4 = 3u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 7u_1 ** n
+    r4 = 7u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 8u_1 ** n
+    r4 = 8u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 9u_1 ** n
+    r4 = 9u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 14u_1 ** n
+    r4 = 14u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 17u_1 ** n
+    r4 = 17u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_1
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 254u_1 ** n
+    r4 = 254u_1 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_1_16
+  subroutine tst_2_16
+    unsigned(kind=2) :: x, r1, r2, r3, r4
+    unsigned(kind=16) :: n
+    x = 0u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 0u_2 ** n
+    r4 = 0u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1u_2 ** n
+    r4 = 1u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 2u_2 ** n
+    r4 = 2u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 3u_2 ** n
+    r4 = 3u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 7u_2 ** n
+    r4 = 7u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 8u_2 ** n
+    r4 = 8u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 9u_2 ** n
+    r4 = 9u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 14u_2 ** n
+    r4 = 14u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 17u_2 ** n
+    r4 = 17u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 254u_2 ** n
+    r4 = 254u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_2
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 65535u_2 ** n
+    r4 = 65535u_2 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_2_16
+  subroutine tst_4_16
+    unsigned(kind=4) :: x, r1, r2, r3, r4
+    unsigned(kind=16) :: n
+    x = 0u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 0u_4 ** n
+    r4 = 0u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1u_4 ** n
+    r4 = 1u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 2u_4 ** n
+    r4 = 2u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 3u_4 ** n
+    r4 = 3u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 7u_4 ** n
+    r4 = 7u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 8u_4 ** n
+    r4 = 8u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 9u_4 ** n
+    r4 = 9u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 14u_4 ** n
+    r4 = 14u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 17u_4 ** n
+    r4 = 17u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 254u_4 ** n
+    r4 = 254u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 65535u_4 ** n
+    r4 = 65535u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_4
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 4294967295u_4 ** n
+    r4 = 4294967295u_4 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_4_16
+  subroutine tst_8_16
+    unsigned(kind=8) :: x, r1, r2, r3, r4
+    unsigned(kind=16) :: n
+    x = 0u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 0u_8 ** n
+    r4 = 0u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1u_8 ** n
+    r4 = 1u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 2u_8 ** n
+    r4 = 2u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 3u_8 ** n
+    r4 = 3u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 7u_8 ** n
+    r4 = 7u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 8u_8 ** n
+    r4 = 8u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 9u_8 ** n
+    r4 = 9u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 14u_8 ** n
+    r4 = 14u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 17u_8 ** n
+    r4 = 17u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 254u_8 ** n
+    r4 = 254u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 65535u_8 ** n
+    r4 = 65535u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 4294967295u_8 ** n
+    r4 = 4294967295u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_8
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 18446744073709551615u_8 ** n
+    r4 = 18446744073709551615u_8 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_8_16
+  subroutine tst_16_1
+    unsigned(kind=16) :: x, r1, r2, r3, r4
+    unsigned(kind=1) :: n
+    x = 0u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 0u_1
+    r1 = x ** n
+    r2 = x ** 0u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 0u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1u_1
+    r1 = x ** n
+    r2 = x ** 1u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 2u_1
+    r1 = x ** n
+    r2 = x ** 2u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 2u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 7u_1
+    r1 = x ** n
+    r2 = x ** 7u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 7u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 8u_1
+    r1 = x ** n
+    r2 = x ** 8u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 8u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 16u_1
+    r1 = x ** n
+    r2 = x ** 16u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 16u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 135u_1
+    r1 = x ** n
+    r2 = x ** 135u_1
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 135u_1
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_16_1
+  subroutine tst_16_2
+    unsigned(kind=16) :: x, r1, r2, r3, r4
+    unsigned(kind=2) :: n
+    x = 0u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 0u_2
+    r1 = x ** n
+    r2 = x ** 0u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 0u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1u_2
+    r1 = x ** n
+    r2 = x ** 1u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 2u_2
+    r1 = x ** n
+    r2 = x ** 2u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 2u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 7u_2
+    r1 = x ** n
+    r2 = x ** 7u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 7u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 8u_2
+    r1 = x ** n
+    r2 = x ** 8u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 8u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 16u_2
+    r1 = x ** n
+    r2 = x ** 16u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 16u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 135u_2
+    r1 = x ** n
+    r2 = x ** 135u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 135u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 32779u_2
+    r1 = x ** n
+    r2 = x ** 32779u_2
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 32779u_2
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_16_2
+  subroutine tst_16_4
+    unsigned(kind=16) :: x, r1, r2, r3, r4
+    unsigned(kind=4) :: n
+    x = 0u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 0u_4
+    r1 = x ** n
+    r2 = x ** 0u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 0u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1u_4
+    r1 = x ** n
+    r2 = x ** 1u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 2u_4
+    r1 = x ** n
+    r2 = x ** 2u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 2u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 7u_4
+    r1 = x ** n
+    r2 = x ** 7u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 7u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 8u_4
+    r1 = x ** n
+    r2 = x ** 8u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 8u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 16u_4
+    r1 = x ** n
+    r2 = x ** 16u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 16u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 135u_4
+    r1 = x ** n
+    r2 = x ** 135u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 135u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 32779u_4
+    r1 = x ** n
+    r2 = x ** 32779u_4
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 32779u_4
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_16_4
+  subroutine tst_16_8
+    unsigned(kind=16) :: x, r1, r2, r3, r4
+    unsigned(kind=8) :: n
+    x = 0u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 0u_8
+    r1 = x ** n
+    r2 = x ** 0u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 0u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1u_8
+    r1 = x ** n
+    r2 = x ** 1u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 2u_8
+    r1 = x ** n
+    r2 = x ** 2u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 2u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 7u_8
+    r1 = x ** n
+    r2 = x ** 7u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 7u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 8u_8
+    r1 = x ** n
+    r2 = x ** 8u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 8u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 16u_8
+    r1 = x ** n
+    r2 = x ** 16u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 16u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 135u_8
+    r1 = x ** n
+    r2 = x ** 135u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 135u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 32779u_8
+    r1 = x ** n
+    r2 = x ** 32779u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 32779u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 18446744073709551615u_8
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_8
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 18446744073709551615u_8
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_16_8
+  subroutine tst_16_16
+    unsigned(kind=16) :: x, r1, r2, r3, r4
+    unsigned(kind=16) :: n
+    x = 0u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 0u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 0u_16 ** n
+    r4 = 0u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1u_16 ** n
+    r4 = 1u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 2u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 2u_16 ** n
+    r4 = 2u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 3u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 3u_16 ** n
+    r4 = 3u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 7u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 7u_16 ** n
+    r4 = 7u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 8u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 8u_16 ** n
+    r4 = 8u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 9u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 9u_16 ** n
+    r4 = 9u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 14u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 14u_16 ** n
+    r4 = 14u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 17u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 17u_16 ** n
+    r4 = 17u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 254u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 254u_16 ** n
+    r4 = 254u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 65535u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 65535u_16 ** n
+    r4 = 65535u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 4294967295u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 4294967295u_16 ** n
+    r4 = 4294967295u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 18446744073709551615u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 18446744073709551615u_16 ** n
+    r4 = 18446744073709551615u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 0u_16
+    r1 = x ** n
+    r2 = x ** 0u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 0u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1u_16
+    r1 = x ** n
+    r2 = x ** 1u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 2u_16
+    r1 = x ** n
+    r2 = x ** 2u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 2u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 7u_16
+    r1 = x ** n
+    r2 = x ** 7u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 7u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 8u_16
+    r1 = x ** n
+    r2 = x ** 8u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 8u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 16u_16
+    r1 = x ** n
+    r2 = x ** 16u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 16u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 135u_16
+    r1 = x ** n
+    r2 = x ** 135u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 135u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 32779u_16
+    r1 = x ** n
+    r2 = x ** 32779u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 32779u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 18446744073709551615u_16
+    r1 = x ** n
+    r2 = x ** 18446744073709551615u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 18446744073709551615u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+    x = 1267650600228229401496703205375u_16
+    n = 1267650600228229401496703205375u_16
+    r1 = x ** n
+    r2 = x ** 1267650600228229401496703205375u_16
+    r3 = 1267650600228229401496703205375u_16 ** n
+    r4 = 1267650600228229401496703205375u_16 ** 1267650600228229401496703205375u_16
+    if (r1 /= r2 .or. r3 /= r4 .or. r1 /= r3) error stop
+
+  end subroutine tst_16_16
+end program memain
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index f58af5890d9..52bd6ea641f 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -874,6 +874,33 @@  generated/pow_c10_i16.c \
 generated/pow_c16_i16.c \
 generated/pow_c17_i16.c
 
+i_powu_c = \
+generated/pow_m1_m1.c \
+generated/pow_m1_m2.c \
+generated/pow_m1_m4.c \
+generated/pow_m1_m8.c \
+generated/pow_m1_m16.c \
+generated/pow_m2_m1.c \
+generated/pow_m2_m2.c \
+generated/pow_m2_m4.c \
+generated/pow_m2_m8.c \
+generated/pow_m2_m16.c \
+generated/pow_m4_m1.c \
+generated/pow_m4_m2.c \
+generated/pow_m4_m4.c \
+generated/pow_m4_m8.c \
+generated/pow_m4_m16.c \
+generated/pow_m8_m1.c \
+generated/pow_m8_m2.c \
+generated/pow_m8_m4.c \
+generated/pow_m8_m8.c \
+generated/pow_m8_m16.c \
+generated/pow_m16_m1.c \
+generated/pow_m16_m2.c \
+generated/pow_m16_m4.c \
+generated/pow_m16_m8.c \
+generated/pow_m16_m16.c
+
 i_pack_c = \
 generated/pack_i1.c \
 generated/pack_i2.c \
@@ -956,7 +983,7 @@  gfor_built_src= $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \
 	$(i_minloc1s_c) $(i_maxloc2s_c) $(i_minloc2s_c) $(i_maxvals_c) \
 	$(i_maxval0s_c) $(i_minval0s_c) $(i_maxval1s_c) $(i_minval1s_c) \
 	$(i_findloc0_c) $(i_findloc0s_c) $(i_findloc1_c) $(i_findloc1s_c) \
-	$(i_findloc2s_c) $(i_isobinding_c)
+	$(i_findloc2s_c) $(i_isobinding_c) $(i_powu_c)
 
 # Machine generated specifics
 gfor_built_specific_src= \
@@ -1376,6 +1403,9 @@  $(in_unpack_c): m4/in_unpack.m4 $(I_M4_DEPS)
 $(i_pow_c): m4/pow.m4 $(I_M4_DEPS)
 	$(M4) -Dfile=$@ -I$(srcdir)/m4 pow.m4 > $@
 
+$(i_powu_c): m4/powu.m4 $(I_M4_DEPS)
+	$(M4) -Dfile=$@ -I$(srcdir)/m4 powu.m4 > $@
+
 $(i_pack_c): m4/pack.m4 $(I_M4_DEPS)
 	$(M4) -Dfile=$@ -I$(srcdir)/m4 pack.m4 > $@
 
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index f9a1864832d..9b9ed2f86ba 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -540,7 +540,20 @@  am__objects_49 = generated/findloc1_i1.lo generated/findloc1_i2.lo \
 am__objects_50 = generated/findloc1_s1.lo generated/findloc1_s4.lo
 am__objects_51 = generated/findloc2_s1.lo generated/findloc2_s4.lo
 am__objects_52 = runtime/ISO_Fortran_binding.lo
-am__objects_53 = $(am__objects_4) $(am__objects_5) $(am__objects_6) \
+am__objects_53 = generated/pow_m1_m1.lo generated/pow_m1_m2.lo \
+	generated/pow_m1_m4.lo generated/pow_m1_m8.lo \
+	generated/pow_m1_m16.lo generated/pow_m2_m1.lo \
+	generated/pow_m2_m2.lo generated/pow_m2_m4.lo \
+	generated/pow_m2_m8.lo generated/pow_m2_m16.lo \
+	generated/pow_m4_m1.lo generated/pow_m4_m2.lo \
+	generated/pow_m4_m4.lo generated/pow_m4_m8.lo \
+	generated/pow_m4_m16.lo generated/pow_m8_m1.lo \
+	generated/pow_m8_m2.lo generated/pow_m8_m4.lo \
+	generated/pow_m8_m8.lo generated/pow_m8_m16.lo \
+	generated/pow_m16_m1.lo generated/pow_m16_m2.lo \
+	generated/pow_m16_m4.lo generated/pow_m16_m8.lo \
+	generated/pow_m16_m16.lo
+am__objects_54 = $(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) $(am__objects_14) $(am__objects_15) \
@@ -556,16 +569,16 @@  am__objects_53 = $(am__objects_4) $(am__objects_5) $(am__objects_6) \
 	$(am__objects_43) $(am__objects_44) $(am__objects_45) \
 	$(am__objects_46) $(am__objects_47) $(am__objects_48) \
 	$(am__objects_49) $(am__objects_50) $(am__objects_51) \
-	$(am__objects_52)
-@LIBGFOR_MINIMAL_FALSE@am__objects_54 = io/close.lo io/file_pos.lo \
+	$(am__objects_52) $(am__objects_53)
+@LIBGFOR_MINIMAL_FALSE@am__objects_55 = io/close.lo io/file_pos.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/format.lo io/inquire.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/intrinsics.lo io/list_read.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/lock.lo io/open.lo io/read.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/transfer.lo io/transfer128.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/unit.lo io/unix.lo io/write.lo \
 @LIBGFOR_MINIMAL_FALSE@	io/fbuf.lo io/async.lo
-am__objects_55 = io/size_from_kind.lo $(am__objects_54)
-@LIBGFOR_MINIMAL_FALSE@am__objects_56 = intrinsics/access.lo \
+am__objects_56 = io/size_from_kind.lo $(am__objects_55)
+@LIBGFOR_MINIMAL_FALSE@am__objects_57 = intrinsics/access.lo \
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/c99_functions.lo \
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/chdir.lo intrinsics/chmod.lo \
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/clock.lo \
@@ -589,8 +602,8 @@  am__objects_55 = io/size_from_kind.lo $(am__objects_54)
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/system_clock.lo \
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/time.lo intrinsics/umask.lo \
 @LIBGFOR_MINIMAL_FALSE@	intrinsics/unlink.lo
-@IEEE_SUPPORT_TRUE@am__objects_57 = ieee/ieee_helper.lo
-am__objects_58 = intrinsics/associated.lo intrinsics/abort.lo \
+@IEEE_SUPPORT_TRUE@am__objects_58 = ieee/ieee_helper.lo
+am__objects_59 = intrinsics/associated.lo intrinsics/abort.lo \
 	intrinsics/args.lo intrinsics/cshift0.lo \
 	intrinsics/eoshift0.lo intrinsics/eoshift2.lo \
 	intrinsics/erfc_scaled.lo intrinsics/extends_type_of.lo \
@@ -605,12 +618,12 @@  am__objects_58 = intrinsics/associated.lo intrinsics/abort.lo \
 	intrinsics/selected_real_kind.lo intrinsics/trigd.lo \
 	intrinsics/unpack_generic.lo runtime/in_pack_generic.lo \
 	runtime/in_unpack_generic.lo runtime/in_pack_class.lo \
-	runtime/in_unpack_class.lo $(am__objects_56) $(am__objects_57)
-@IEEE_SUPPORT_TRUE@am__objects_59 = ieee/ieee_arithmetic.lo \
+	runtime/in_unpack_class.lo $(am__objects_57) $(am__objects_58)
+@IEEE_SUPPORT_TRUE@am__objects_60 = ieee/ieee_arithmetic.lo \
 @IEEE_SUPPORT_TRUE@	ieee/ieee_exceptions.lo \
 @IEEE_SUPPORT_TRUE@	ieee/ieee_features.lo
-am__objects_60 =
-am__objects_61 = generated/_abs_c4.lo generated/_abs_c8.lo \
+am__objects_61 =
+am__objects_62 = generated/_abs_c4.lo generated/_abs_c8.lo \
 	generated/_abs_c10.lo generated/_abs_c16.lo \
 	generated/_abs_c17.lo generated/_abs_i4.lo \
 	generated/_abs_i8.lo generated/_abs_i16.lo \
@@ -679,7 +692,7 @@  am__objects_61 = generated/_abs_c4.lo generated/_abs_c8.lo \
 	generated/_aint_r17.lo generated/_anint_r4.lo \
 	generated/_anint_r8.lo generated/_anint_r10.lo \
 	generated/_anint_r16.lo generated/_anint_r17.lo
-am__objects_62 = generated/_sign_i4.lo generated/_sign_i8.lo \
+am__objects_63 = generated/_sign_i4.lo generated/_sign_i8.lo \
 	generated/_sign_i16.lo generated/_sign_r4.lo \
 	generated/_sign_r8.lo generated/_sign_r10.lo \
 	generated/_sign_r16.lo generated/_sign_r17.lo \
@@ -694,13 +707,13 @@  am__objects_62 = generated/_sign_i4.lo generated/_sign_i8.lo \
 	generated/_mod_r4.lo generated/_mod_r8.lo \
 	generated/_mod_r10.lo generated/_mod_r16.lo \
 	generated/_mod_r17.lo
-am__objects_63 = generated/misc_specifics.lo
-am__objects_64 = $(am__objects_61) $(am__objects_62) $(am__objects_63) \
+am__objects_64 = generated/misc_specifics.lo
+am__objects_65 = $(am__objects_62) $(am__objects_63) $(am__objects_64) \
 	intrinsics/dprod_r8.lo intrinsics/f2c_specifics.lo \
 	intrinsics/random_init.lo
-am_libgfortran_la_OBJECTS = $(am__objects_3) $(am__objects_53) \
-	$(am__objects_55) $(am__objects_58) $(am__objects_59) \
-	$(am__objects_60) $(am__objects_64)
+am_libgfortran_la_OBJECTS = $(am__objects_3) $(am__objects_54) \
+	$(am__objects_56) $(am__objects_59) $(am__objects_60) \
+	$(am__objects_61) $(am__objects_65)
 libgfortran_la_OBJECTS = $(am_libgfortran_la_OBJECTS)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -1667,6 +1680,33 @@  generated/pow_c10_i16.c \
 generated/pow_c16_i16.c \
 generated/pow_c17_i16.c
 
+i_powu_c = \
+generated/pow_m1_m1.c \
+generated/pow_m1_m2.c \
+generated/pow_m1_m4.c \
+generated/pow_m1_m8.c \
+generated/pow_m1_m16.c \
+generated/pow_m2_m1.c \
+generated/pow_m2_m2.c \
+generated/pow_m2_m4.c \
+generated/pow_m2_m8.c \
+generated/pow_m2_m16.c \
+generated/pow_m4_m1.c \
+generated/pow_m4_m2.c \
+generated/pow_m4_m4.c \
+generated/pow_m4_m8.c \
+generated/pow_m4_m16.c \
+generated/pow_m8_m1.c \
+generated/pow_m8_m2.c \
+generated/pow_m8_m4.c \
+generated/pow_m8_m8.c \
+generated/pow_m8_m16.c \
+generated/pow_m16_m1.c \
+generated/pow_m16_m2.c \
+generated/pow_m16_m4.c \
+generated/pow_m16_m8.c \
+generated/pow_m16_m16.c
+
 i_pack_c = \
 generated/pack_i1.c \
 generated/pack_i2.c \
@@ -1749,7 +1789,7 @@  gfor_built_src = $(i_all_c) $(i_any_c) $(i_count_c) $(i_maxloc0_c) \
 	$(i_minloc1s_c) $(i_maxloc2s_c) $(i_minloc2s_c) $(i_maxvals_c) \
 	$(i_maxval0s_c) $(i_minval0s_c) $(i_maxval1s_c) $(i_minval1s_c) \
 	$(i_findloc0_c) $(i_findloc0s_c) $(i_findloc1_c) $(i_findloc1s_c) \
-	$(i_findloc2s_c) $(i_isobinding_c)
+	$(i_findloc2s_c) $(i_isobinding_c) $(i_powu_c)
 
 
 # Machine generated specifics
@@ -3315,6 +3355,56 @@  generated/findloc2_s4.lo: generated/$(am__dirstamp) \
 	generated/$(DEPDIR)/$(am__dirstamp)
 runtime/ISO_Fortran_binding.lo: runtime/$(am__dirstamp) \
 	runtime/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m1_m1.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m1_m2.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m1_m4.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m1_m8.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m1_m16.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m2_m1.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m2_m2.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m2_m4.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m2_m8.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m2_m16.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m4_m1.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m4_m2.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m4_m4.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m4_m8.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m4_m16.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m8_m1.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m8_m2.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m8_m4.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m8_m8.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m8_m16.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m16_m1.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m16_m2.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m16_m4.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m16_m8.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
+generated/pow_m16_m16.lo: generated/$(am__dirstamp) \
+	generated/$(DEPDIR)/$(am__dirstamp)
 io/$(am__dirstamp):
 	@$(MKDIR_P) io
 	@: > io/$(am__dirstamp)
@@ -4347,6 +4437,31 @@  distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_i8_i16.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_i8_i4.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_i8_i8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m16_m1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m16_m16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m16_m2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m16_m4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m16_m8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m1_m1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m1_m16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m1_m2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m1_m4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m1_m8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m2_m1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m2_m16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m2_m2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m2_m4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m2_m8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m4_m1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m4_m16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m4_m2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m4_m4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m4_m8.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m8_m1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m8_m16.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m8_m2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m8_m4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_m8_m8.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_r10_i16.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_r10_i8.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@generated/$(DEPDIR)/pow_r16_i16.Plo@am__quote@
@@ -5084,6 +5199,9 @@  include/ISO_Fortran_binding.h: $(srcdir)/ISO_Fortran_binding.h
 @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@$(i_powu_c): m4/powu.m4 $(I_M4_DEPS)
+@MAINTAINER_MODE_TRUE@	$(M4) -Dfile=$@ -I$(srcdir)/m4 powu.m4 > $@
+
 @MAINTAINER_MODE_TRUE@$(i_pack_c): m4/pack.m4 $(I_M4_DEPS)
 @MAINTAINER_MODE_TRUE@	$(M4) -Dfile=$@ -I$(srcdir)/m4 pack.m4 > $@
 
diff --git a/libgfortran/generated/pow_m16_m1.c b/libgfortran/generated/pow_m16_m1.c
new file mode 100644
index 00000000000..167aca04ef1
--- /dev/null
+++ b/libgfortran/generated/pow_m16_m1.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_UINTEGER_1)
+
+GFC_UINTEGER_16 pow_m16_m1 (GFC_UINTEGER_16 x, GFC_UINTEGER_1 n);
+export_proto(pow_m16_m1);
+
+inline static GFC_UINTEGER_16
+power_simple_m16_m1 (GFC_UINTEGER_16 x, GFC_UINTEGER_1 n)
+{
+  GFC_UINTEGER_16 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_16
+pow_m16_m1 (GFC_UINTEGER_16 x, GFC_UINTEGER_1 n)
+{
+  const GFC_UINTEGER_16 mask = (GFC_UINTEGER_16) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m16_m1 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m16_m1 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m16_m16.c b/libgfortran/generated/pow_m16_m16.c
new file mode 100644
index 00000000000..c548186dc0a
--- /dev/null
+++ b/libgfortran/generated/pow_m16_m16.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_UINTEGER_16)
+
+GFC_UINTEGER_16 pow_m16_m16 (GFC_UINTEGER_16 x, GFC_UINTEGER_16 n);
+export_proto(pow_m16_m16);
+
+inline static GFC_UINTEGER_16
+power_simple_m16_m16 (GFC_UINTEGER_16 x, GFC_UINTEGER_16 n)
+{
+  GFC_UINTEGER_16 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_16
+pow_m16_m16 (GFC_UINTEGER_16 x, GFC_UINTEGER_16 n)
+{
+  const GFC_UINTEGER_16 mask = (GFC_UINTEGER_16) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m16_m16 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m16_m16 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m16_m2.c b/libgfortran/generated/pow_m16_m2.c
new file mode 100644
index 00000000000..6f0a8425133
--- /dev/null
+++ b/libgfortran/generated/pow_m16_m2.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_UINTEGER_2)
+
+GFC_UINTEGER_16 pow_m16_m2 (GFC_UINTEGER_16 x, GFC_UINTEGER_2 n);
+export_proto(pow_m16_m2);
+
+inline static GFC_UINTEGER_16
+power_simple_m16_m2 (GFC_UINTEGER_16 x, GFC_UINTEGER_2 n)
+{
+  GFC_UINTEGER_16 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_16
+pow_m16_m2 (GFC_UINTEGER_16 x, GFC_UINTEGER_2 n)
+{
+  const GFC_UINTEGER_16 mask = (GFC_UINTEGER_16) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m16_m2 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m16_m2 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m16_m4.c b/libgfortran/generated/pow_m16_m4.c
new file mode 100644
index 00000000000..21c49284b28
--- /dev/null
+++ b/libgfortran/generated/pow_m16_m4.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_UINTEGER_4)
+
+GFC_UINTEGER_16 pow_m16_m4 (GFC_UINTEGER_16 x, GFC_UINTEGER_4 n);
+export_proto(pow_m16_m4);
+
+inline static GFC_UINTEGER_16
+power_simple_m16_m4 (GFC_UINTEGER_16 x, GFC_UINTEGER_4 n)
+{
+  GFC_UINTEGER_16 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_16
+pow_m16_m4 (GFC_UINTEGER_16 x, GFC_UINTEGER_4 n)
+{
+  const GFC_UINTEGER_16 mask = (GFC_UINTEGER_16) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m16_m4 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m16_m4 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m16_m8.c b/libgfortran/generated/pow_m16_m8.c
new file mode 100644
index 00000000000..c35636b2684
--- /dev/null
+++ b/libgfortran/generated/pow_m16_m8.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_16) && defined (HAVE_GFC_UINTEGER_8)
+
+GFC_UINTEGER_16 pow_m16_m8 (GFC_UINTEGER_16 x, GFC_UINTEGER_8 n);
+export_proto(pow_m16_m8);
+
+inline static GFC_UINTEGER_16
+power_simple_m16_m8 (GFC_UINTEGER_16 x, GFC_UINTEGER_8 n)
+{
+  GFC_UINTEGER_16 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_16
+pow_m16_m8 (GFC_UINTEGER_16 x, GFC_UINTEGER_8 n)
+{
+  const GFC_UINTEGER_16 mask = (GFC_UINTEGER_16) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m16_m8 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m16_m8 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m1_m1.c b/libgfortran/generated/pow_m1_m1.c
new file mode 100644
index 00000000000..f4737afa3db
--- /dev/null
+++ b/libgfortran/generated/pow_m1_m1.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_1) && defined (HAVE_GFC_UINTEGER_1)
+
+GFC_UINTEGER_1 pow_m1_m1 (GFC_UINTEGER_1 x, GFC_UINTEGER_1 n);
+export_proto(pow_m1_m1);
+
+inline static GFC_UINTEGER_1
+power_simple_m1_m1 (GFC_UINTEGER_1 x, GFC_UINTEGER_1 n)
+{
+  GFC_UINTEGER_1 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_1
+pow_m1_m1 (GFC_UINTEGER_1 x, GFC_UINTEGER_1 n)
+{
+  const GFC_UINTEGER_1 mask = (GFC_UINTEGER_1) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m1_m1 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m1_m1 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m1_m16.c b/libgfortran/generated/pow_m1_m16.c
new file mode 100644
index 00000000000..a8a5bf8d165
--- /dev/null
+++ b/libgfortran/generated/pow_m1_m16.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_1) && defined (HAVE_GFC_UINTEGER_16)
+
+GFC_UINTEGER_1 pow_m1_m16 (GFC_UINTEGER_1 x, GFC_UINTEGER_16 n);
+export_proto(pow_m1_m16);
+
+inline static GFC_UINTEGER_1
+power_simple_m1_m16 (GFC_UINTEGER_1 x, GFC_UINTEGER_16 n)
+{
+  GFC_UINTEGER_1 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_1
+pow_m1_m16 (GFC_UINTEGER_1 x, GFC_UINTEGER_16 n)
+{
+  const GFC_UINTEGER_1 mask = (GFC_UINTEGER_1) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m1_m16 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m1_m16 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m1_m2.c b/libgfortran/generated/pow_m1_m2.c
new file mode 100644
index 00000000000..ff1a2c60572
--- /dev/null
+++ b/libgfortran/generated/pow_m1_m2.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_1) && defined (HAVE_GFC_UINTEGER_2)
+
+GFC_UINTEGER_1 pow_m1_m2 (GFC_UINTEGER_1 x, GFC_UINTEGER_2 n);
+export_proto(pow_m1_m2);
+
+inline static GFC_UINTEGER_1
+power_simple_m1_m2 (GFC_UINTEGER_1 x, GFC_UINTEGER_2 n)
+{
+  GFC_UINTEGER_1 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_1
+pow_m1_m2 (GFC_UINTEGER_1 x, GFC_UINTEGER_2 n)
+{
+  const GFC_UINTEGER_1 mask = (GFC_UINTEGER_1) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m1_m2 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m1_m2 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m1_m4.c b/libgfortran/generated/pow_m1_m4.c
new file mode 100644
index 00000000000..96d9d2a7c8d
--- /dev/null
+++ b/libgfortran/generated/pow_m1_m4.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_1) && defined (HAVE_GFC_UINTEGER_4)
+
+GFC_UINTEGER_1 pow_m1_m4 (GFC_UINTEGER_1 x, GFC_UINTEGER_4 n);
+export_proto(pow_m1_m4);
+
+inline static GFC_UINTEGER_1
+power_simple_m1_m4 (GFC_UINTEGER_1 x, GFC_UINTEGER_4 n)
+{
+  GFC_UINTEGER_1 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_1
+pow_m1_m4 (GFC_UINTEGER_1 x, GFC_UINTEGER_4 n)
+{
+  const GFC_UINTEGER_1 mask = (GFC_UINTEGER_1) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m1_m4 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m1_m4 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m1_m8.c b/libgfortran/generated/pow_m1_m8.c
new file mode 100644
index 00000000000..9162f5ba3d7
--- /dev/null
+++ b/libgfortran/generated/pow_m1_m8.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_1) && defined (HAVE_GFC_UINTEGER_8)
+
+GFC_UINTEGER_1 pow_m1_m8 (GFC_UINTEGER_1 x, GFC_UINTEGER_8 n);
+export_proto(pow_m1_m8);
+
+inline static GFC_UINTEGER_1
+power_simple_m1_m8 (GFC_UINTEGER_1 x, GFC_UINTEGER_8 n)
+{
+  GFC_UINTEGER_1 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_1
+pow_m1_m8 (GFC_UINTEGER_1 x, GFC_UINTEGER_8 n)
+{
+  const GFC_UINTEGER_1 mask = (GFC_UINTEGER_1) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m1_m8 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m1_m8 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m2_m1.c b/libgfortran/generated/pow_m2_m1.c
new file mode 100644
index 00000000000..713721d3ac6
--- /dev/null
+++ b/libgfortran/generated/pow_m2_m1.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_2) && defined (HAVE_GFC_UINTEGER_1)
+
+GFC_UINTEGER_2 pow_m2_m1 (GFC_UINTEGER_2 x, GFC_UINTEGER_1 n);
+export_proto(pow_m2_m1);
+
+inline static GFC_UINTEGER_2
+power_simple_m2_m1 (GFC_UINTEGER_2 x, GFC_UINTEGER_1 n)
+{
+  GFC_UINTEGER_2 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_2
+pow_m2_m1 (GFC_UINTEGER_2 x, GFC_UINTEGER_1 n)
+{
+  const GFC_UINTEGER_2 mask = (GFC_UINTEGER_2) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m2_m1 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m2_m1 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m2_m16.c b/libgfortran/generated/pow_m2_m16.c
new file mode 100644
index 00000000000..8006f9d13f0
--- /dev/null
+++ b/libgfortran/generated/pow_m2_m16.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_2) && defined (HAVE_GFC_UINTEGER_16)
+
+GFC_UINTEGER_2 pow_m2_m16 (GFC_UINTEGER_2 x, GFC_UINTEGER_16 n);
+export_proto(pow_m2_m16);
+
+inline static GFC_UINTEGER_2
+power_simple_m2_m16 (GFC_UINTEGER_2 x, GFC_UINTEGER_16 n)
+{
+  GFC_UINTEGER_2 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_2
+pow_m2_m16 (GFC_UINTEGER_2 x, GFC_UINTEGER_16 n)
+{
+  const GFC_UINTEGER_2 mask = (GFC_UINTEGER_2) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m2_m16 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m2_m16 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m2_m2.c b/libgfortran/generated/pow_m2_m2.c
new file mode 100644
index 00000000000..4d01c22083a
--- /dev/null
+++ b/libgfortran/generated/pow_m2_m2.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_2) && defined (HAVE_GFC_UINTEGER_2)
+
+GFC_UINTEGER_2 pow_m2_m2 (GFC_UINTEGER_2 x, GFC_UINTEGER_2 n);
+export_proto(pow_m2_m2);
+
+inline static GFC_UINTEGER_2
+power_simple_m2_m2 (GFC_UINTEGER_2 x, GFC_UINTEGER_2 n)
+{
+  GFC_UINTEGER_2 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_2
+pow_m2_m2 (GFC_UINTEGER_2 x, GFC_UINTEGER_2 n)
+{
+  const GFC_UINTEGER_2 mask = (GFC_UINTEGER_2) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m2_m2 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m2_m2 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m2_m4.c b/libgfortran/generated/pow_m2_m4.c
new file mode 100644
index 00000000000..c044e2bae94
--- /dev/null
+++ b/libgfortran/generated/pow_m2_m4.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_2) && defined (HAVE_GFC_UINTEGER_4)
+
+GFC_UINTEGER_2 pow_m2_m4 (GFC_UINTEGER_2 x, GFC_UINTEGER_4 n);
+export_proto(pow_m2_m4);
+
+inline static GFC_UINTEGER_2
+power_simple_m2_m4 (GFC_UINTEGER_2 x, GFC_UINTEGER_4 n)
+{
+  GFC_UINTEGER_2 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_2
+pow_m2_m4 (GFC_UINTEGER_2 x, GFC_UINTEGER_4 n)
+{
+  const GFC_UINTEGER_2 mask = (GFC_UINTEGER_2) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m2_m4 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m2_m4 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m2_m8.c b/libgfortran/generated/pow_m2_m8.c
new file mode 100644
index 00000000000..ec50d1c888b
--- /dev/null
+++ b/libgfortran/generated/pow_m2_m8.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_2) && defined (HAVE_GFC_UINTEGER_8)
+
+GFC_UINTEGER_2 pow_m2_m8 (GFC_UINTEGER_2 x, GFC_UINTEGER_8 n);
+export_proto(pow_m2_m8);
+
+inline static GFC_UINTEGER_2
+power_simple_m2_m8 (GFC_UINTEGER_2 x, GFC_UINTEGER_8 n)
+{
+  GFC_UINTEGER_2 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_2
+pow_m2_m8 (GFC_UINTEGER_2 x, GFC_UINTEGER_8 n)
+{
+  const GFC_UINTEGER_2 mask = (GFC_UINTEGER_2) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m2_m8 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m2_m8 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m4_m1.c b/libgfortran/generated/pow_m4_m1.c
new file mode 100644
index 00000000000..2915e0d755d
--- /dev/null
+++ b/libgfortran/generated/pow_m4_m1.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_4) && defined (HAVE_GFC_UINTEGER_1)
+
+GFC_UINTEGER_4 pow_m4_m1 (GFC_UINTEGER_4 x, GFC_UINTEGER_1 n);
+export_proto(pow_m4_m1);
+
+inline static GFC_UINTEGER_4
+power_simple_m4_m1 (GFC_UINTEGER_4 x, GFC_UINTEGER_1 n)
+{
+  GFC_UINTEGER_4 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_4
+pow_m4_m1 (GFC_UINTEGER_4 x, GFC_UINTEGER_1 n)
+{
+  const GFC_UINTEGER_4 mask = (GFC_UINTEGER_4) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m4_m1 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m4_m1 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m4_m16.c b/libgfortran/generated/pow_m4_m16.c
new file mode 100644
index 00000000000..400047ba3d8
--- /dev/null
+++ b/libgfortran/generated/pow_m4_m16.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_4) && defined (HAVE_GFC_UINTEGER_16)
+
+GFC_UINTEGER_4 pow_m4_m16 (GFC_UINTEGER_4 x, GFC_UINTEGER_16 n);
+export_proto(pow_m4_m16);
+
+inline static GFC_UINTEGER_4
+power_simple_m4_m16 (GFC_UINTEGER_4 x, GFC_UINTEGER_16 n)
+{
+  GFC_UINTEGER_4 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_4
+pow_m4_m16 (GFC_UINTEGER_4 x, GFC_UINTEGER_16 n)
+{
+  const GFC_UINTEGER_4 mask = (GFC_UINTEGER_4) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m4_m16 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m4_m16 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m4_m2.c b/libgfortran/generated/pow_m4_m2.c
new file mode 100644
index 00000000000..40b51dd21d5
--- /dev/null
+++ b/libgfortran/generated/pow_m4_m2.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_4) && defined (HAVE_GFC_UINTEGER_2)
+
+GFC_UINTEGER_4 pow_m4_m2 (GFC_UINTEGER_4 x, GFC_UINTEGER_2 n);
+export_proto(pow_m4_m2);
+
+inline static GFC_UINTEGER_4
+power_simple_m4_m2 (GFC_UINTEGER_4 x, GFC_UINTEGER_2 n)
+{
+  GFC_UINTEGER_4 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_4
+pow_m4_m2 (GFC_UINTEGER_4 x, GFC_UINTEGER_2 n)
+{
+  const GFC_UINTEGER_4 mask = (GFC_UINTEGER_4) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m4_m2 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m4_m2 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m4_m4.c b/libgfortran/generated/pow_m4_m4.c
new file mode 100644
index 00000000000..45cc6934baa
--- /dev/null
+++ b/libgfortran/generated/pow_m4_m4.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_4) && defined (HAVE_GFC_UINTEGER_4)
+
+GFC_UINTEGER_4 pow_m4_m4 (GFC_UINTEGER_4 x, GFC_UINTEGER_4 n);
+export_proto(pow_m4_m4);
+
+inline static GFC_UINTEGER_4
+power_simple_m4_m4 (GFC_UINTEGER_4 x, GFC_UINTEGER_4 n)
+{
+  GFC_UINTEGER_4 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_4
+pow_m4_m4 (GFC_UINTEGER_4 x, GFC_UINTEGER_4 n)
+{
+  const GFC_UINTEGER_4 mask = (GFC_UINTEGER_4) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m4_m4 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m4_m4 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m4_m8.c b/libgfortran/generated/pow_m4_m8.c
new file mode 100644
index 00000000000..d03e86bec5c
--- /dev/null
+++ b/libgfortran/generated/pow_m4_m8.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_4) && defined (HAVE_GFC_UINTEGER_8)
+
+GFC_UINTEGER_4 pow_m4_m8 (GFC_UINTEGER_4 x, GFC_UINTEGER_8 n);
+export_proto(pow_m4_m8);
+
+inline static GFC_UINTEGER_4
+power_simple_m4_m8 (GFC_UINTEGER_4 x, GFC_UINTEGER_8 n)
+{
+  GFC_UINTEGER_4 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_4
+pow_m4_m8 (GFC_UINTEGER_4 x, GFC_UINTEGER_8 n)
+{
+  const GFC_UINTEGER_4 mask = (GFC_UINTEGER_4) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m4_m8 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m4_m8 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m8_m1.c b/libgfortran/generated/pow_m8_m1.c
new file mode 100644
index 00000000000..dd9c8b20512
--- /dev/null
+++ b/libgfortran/generated/pow_m8_m1.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_8) && defined (HAVE_GFC_UINTEGER_1)
+
+GFC_UINTEGER_8 pow_m8_m1 (GFC_UINTEGER_8 x, GFC_UINTEGER_1 n);
+export_proto(pow_m8_m1);
+
+inline static GFC_UINTEGER_8
+power_simple_m8_m1 (GFC_UINTEGER_8 x, GFC_UINTEGER_1 n)
+{
+  GFC_UINTEGER_8 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_8
+pow_m8_m1 (GFC_UINTEGER_8 x, GFC_UINTEGER_1 n)
+{
+  const GFC_UINTEGER_8 mask = (GFC_UINTEGER_8) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m8_m1 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m8_m1 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m8_m16.c b/libgfortran/generated/pow_m8_m16.c
new file mode 100644
index 00000000000..fe973e5b5a8
--- /dev/null
+++ b/libgfortran/generated/pow_m8_m16.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_8) && defined (HAVE_GFC_UINTEGER_16)
+
+GFC_UINTEGER_8 pow_m8_m16 (GFC_UINTEGER_8 x, GFC_UINTEGER_16 n);
+export_proto(pow_m8_m16);
+
+inline static GFC_UINTEGER_8
+power_simple_m8_m16 (GFC_UINTEGER_8 x, GFC_UINTEGER_16 n)
+{
+  GFC_UINTEGER_8 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_8
+pow_m8_m16 (GFC_UINTEGER_8 x, GFC_UINTEGER_16 n)
+{
+  const GFC_UINTEGER_8 mask = (GFC_UINTEGER_8) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m8_m16 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m8_m16 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m8_m2.c b/libgfortran/generated/pow_m8_m2.c
new file mode 100644
index 00000000000..adf3e778b46
--- /dev/null
+++ b/libgfortran/generated/pow_m8_m2.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_8) && defined (HAVE_GFC_UINTEGER_2)
+
+GFC_UINTEGER_8 pow_m8_m2 (GFC_UINTEGER_8 x, GFC_UINTEGER_2 n);
+export_proto(pow_m8_m2);
+
+inline static GFC_UINTEGER_8
+power_simple_m8_m2 (GFC_UINTEGER_8 x, GFC_UINTEGER_2 n)
+{
+  GFC_UINTEGER_8 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_8
+pow_m8_m2 (GFC_UINTEGER_8 x, GFC_UINTEGER_2 n)
+{
+  const GFC_UINTEGER_8 mask = (GFC_UINTEGER_8) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m8_m2 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m8_m2 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m8_m4.c b/libgfortran/generated/pow_m8_m4.c
new file mode 100644
index 00000000000..0833ba001c1
--- /dev/null
+++ b/libgfortran/generated/pow_m8_m4.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_8) && defined (HAVE_GFC_UINTEGER_4)
+
+GFC_UINTEGER_8 pow_m8_m4 (GFC_UINTEGER_8 x, GFC_UINTEGER_4 n);
+export_proto(pow_m8_m4);
+
+inline static GFC_UINTEGER_8
+power_simple_m8_m4 (GFC_UINTEGER_8 x, GFC_UINTEGER_4 n)
+{
+  GFC_UINTEGER_8 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_8
+pow_m8_m4 (GFC_UINTEGER_8 x, GFC_UINTEGER_4 n)
+{
+  const GFC_UINTEGER_8 mask = (GFC_UINTEGER_8) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m8_m4 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m8_m4 (x, n);
+}
+
+#endif
diff --git a/libgfortran/generated/pow_m8_m8.c b/libgfortran/generated/pow_m8_m8.c
new file mode 100644
index 00000000000..d21899bf0ad
--- /dev/null
+++ b/libgfortran/generated/pow_m8_m8.c
@@ -0,0 +1,79 @@ 
+/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"
+
+
+/* Use 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.  */
+
+#if defined (HAVE_GFC_UINTEGER_8) && defined (HAVE_GFC_UINTEGER_8)
+
+GFC_UINTEGER_8 pow_m8_m8 (GFC_UINTEGER_8 x, GFC_UINTEGER_8 n);
+export_proto(pow_m8_m8);
+
+inline static GFC_UINTEGER_8
+power_simple_m8_m8 (GFC_UINTEGER_8 x, GFC_UINTEGER_8 n)
+{
+  GFC_UINTEGER_8 pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler's theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+GFC_UINTEGER_8
+pow_m8_m8 (GFC_UINTEGER_8 x, GFC_UINTEGER_8 n)
+{
+  const GFC_UINTEGER_8 mask = (GFC_UINTEGER_8) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_m8_m8 (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_m8_m8 (x, n);
+}
+
+#endif
diff --git a/libgfortran/gfortran.map b/libgfortran/gfortran.map
index 851df211eee..159a862e90a 100644
--- a/libgfortran/gfortran.map
+++ b/libgfortran/gfortran.map
@@ -1998,4 +1998,29 @@  GFORTRAN_15 {
     _gfortran_sminloc1_8_m4;
     _gfortran_sminloc1_8_m8;
     _gfortran_report_exception;
+    _gfortran_pow_m1_m1;
+    _gfortran_pow_m1_m2;
+    _gfortran_pow_m1_m4;
+    _gfortran_pow_m1_m8;
+    _gfortran_pow_m1_m16;
+    _gfortran_pow_m2_m1;
+    _gfortran_pow_m2_m2;
+    _gfortran_pow_m2_m4;
+    _gfortran_pow_m2_m8;
+    _gfortran_pow_m2_m16;
+    _gfortran_pow_m4_m1;
+    _gfortran_pow_m4_m2;
+    _gfortran_pow_m4_m4;
+    _gfortran_pow_m4_m8;
+    _gfortran_pow_m4_m16;
+    _gfortran_pow_m8_m1;
+    _gfortran_pow_m8_m2;
+    _gfortran_pow_m8_m4;
+    _gfortran_pow_m8_m8;
+    _gfortran_pow_m8_m16;
+    _gfortran_pow_m16_m1;
+    _gfortran_pow_m16_m2;
+    _gfortran_pow_m16_m4;
+    _gfortran_pow_m16_m8;
+    _gfortran_pow_m16_m16;
 } GFORTRAN_14;
diff --git a/libgfortran/m4/powu.m4 b/libgfortran/m4/powu.m4
new file mode 100644
index 00000000000..d8bc375437d
--- /dev/null
+++ b/libgfortran/m4/powu.m4
@@ -0,0 +1,80 @@ 
+`/* Support routines for the intrinsic power (**) operator
+   for UNSIGNED, using modulo arithmetic.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   Contributed by Thomas Koenig.
+
+This file is part of the GNU Fortran 95 runtime library (libgfortran).
+
+Libgfortran is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+Libgfortran 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 General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#include "libgfortran.h"'
+
+include(iparm.m4)dnl
+
+/* Use 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.  */
+
+`#if defined (HAVE_'rtype_name`) && defined (HAVE_'atype_name`)'
+
+rtype_name `pow_'rtype_code`_'atype_code` ('rtype_name` x, 'atype_name` n);
+export_proto(pow_'rtype_code`_'atype_code`);
+
+inline static 'rtype_name`
+power_simple_'rtype_code`_'atype_code` ('rtype_name` x, 'atype_name` n)
+{
+  'rtype_name` pow = 1;
+  for (;;)
+    {
+      if (n & 1)
+	pow *= x;
+      n >>= 1;
+      if (n)
+	x *= x;
+      else
+	break;
+    }
+  return pow; 
+}
+
+/* For odd x, Euler''`s theorem tells us that x**(2^(m-1)) = 1 mod 2^m.
+   For even x, we use the fact that (2*x)^m = 0 mod 2^m.  */
+
+'rtype_name`
+pow_'rtype_code`_'atype_code` ('rtype_name` x, 'atype_name` n)
+{
+  const 'rtype_name` mask = ('rtype_name`) (-1) / 2;
+  if (n == 0)
+    return 1;
+
+  if  (x == 0)
+    return 0;
+
+  if (x & 1)
+    return power_simple_'rtype_code`_'atype_code` (x, n & mask);
+
+  if (n > sizeof (x) * 8)
+    return 0;
+
+  return power_simple_'rtype_code`_'atype_code` (x, n);
+}
+
+#endif'