[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
<