diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
index 44945d47fd6..fd81f69e230 100644
--- a/gcc/config/riscv/riscv.cc
+++ b/gcc/config/riscv/riscv.cc
@@ -249,6 +249,7 @@ struct riscv_arg_info {
    where A is an accumulator, each CODE[i] is a binary rtl operation
    and each VALUE[i] is a constant integer.  CODE[0] is undefined.  */
 struct riscv_integer_op {
+  bool use_uw;
   enum rtx_code code;
   unsigned HOST_WIDE_INT value;
 };
@@ -734,6 +735,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
       /* Simply ADDI or LUI.  */
       codes[0].code = UNKNOWN;
       codes[0].value = value;
+      codes[0].use_uw = false;
       return 1;
     }
   if (TARGET_ZBS && SINGLE_BIT_MASK_OPERAND (value))
@@ -741,6 +743,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
       /* Simply BSETI.  */
       codes[0].code = UNKNOWN;
       codes[0].value = value;
+      codes[0].use_uw = false;
 
       /* RISC-V sign-extends all 32bit values that live in a 32bit
 	 register.  To avoid paradoxes, we thus need to use the
@@ -769,6 +772,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	{
 	  alt_codes[alt_cost-1].code = PLUS;
 	  alt_codes[alt_cost-1].value = low_part;
+	  alt_codes[alt_cost-1].use_uw = false;
 	  memcpy (codes, alt_codes, sizeof (alt_codes));
 	  cost = alt_cost;
 	}
@@ -782,6 +786,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	{
 	  alt_codes[alt_cost-1].code = XOR;
 	  alt_codes[alt_cost-1].value = low_part;
+	  alt_codes[alt_cost-1].use_uw = false;
 	  memcpy (codes, alt_codes, sizeof (alt_codes));
 	  cost = alt_cost;
 	}
@@ -792,17 +797,37 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
     {
       int shift = ctz_hwi (value);
       unsigned HOST_WIDE_INT x = value;
+      bool use_uw = false;
       x = sext_hwi (x >> shift, HOST_BITS_PER_WIDE_INT - shift);
 
       /* Don't eliminate the lower 12 bits if LUI might apply.  */
-      if (shift > IMM_BITS && !SMALL_OPERAND (x) && LUI_OPERAND (x << IMM_BITS))
+      if (shift > IMM_BITS
+	  && !SMALL_OPERAND (x)
+	  && (LUI_OPERAND (x << IMM_BITS)
+	      || (TARGET_64BIT
+		  && TARGET_ZBA
+		  && LUI_OPERAND ((x << IMM_BITS)
+				  & ~HOST_WIDE_INT_C (0x80000000)))))
 	shift -= IMM_BITS, x <<= IMM_BITS;
 
+      /* Adjust X if it isn't a LUI operand in isolation, but we can use
+	 a subsequent "uw" instruction form to mask off the undesirable
+	 bits.  */
+      if (!LUI_OPERAND (x)
+	  && TARGET_64BIT
+	  && TARGET_ZBA
+	  && LUI_OPERAND (x & ~HOST_WIDE_INT_C (0x80000000UL)))
+	{
+	  x = sext_hwi (x, 32);
+	  use_uw = true;
+	}
+
       alt_cost = 1 + riscv_build_integer_1 (alt_codes, x, mode);
       if (alt_cost < cost)
 	{
 	  alt_codes[alt_cost-1].code = ASHIFT;
 	  alt_codes[alt_cost-1].value = shift;
+	  alt_codes[alt_cost-1].use_uw = use_uw;
 	  memcpy (codes, alt_codes, sizeof (alt_codes));
 	  cost = alt_cost;
 	}
@@ -823,8 +848,10 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	  /* The sign-bit might be zero, so just rotate to be safe.  */
 	  codes[0].value = (((unsigned HOST_WIDE_INT) value >> trailing_ones)
 			    | (value << (64 - trailing_ones)));
+	  codes[0].use_uw = false;
 	  codes[1].code = ROTATERT;
 	  codes[1].value = 64 - trailing_ones;
+	  codes[1].use_uw = false;
 	  cost = 2;
 	}
       /* Handle the case where the 11 bit range of zero bits wraps around.  */
@@ -836,8 +863,10 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	  codes[0].value = ((value << (32 - upper_trailing_ones))
 			    | ((unsigned HOST_WIDE_INT) value
 			       >> (32 + upper_trailing_ones)));
+	  codes[0].use_uw = false;
 	  codes[1].code = ROTATERT;
 	  codes[1].value = 32 - upper_trailing_ones;
+	  codes[1].use_uw = false;
 	  cost = 2;
 	}
       /* Final cases, particularly focused on bseti.  */
@@ -851,6 +880,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	    {
 	      alt_codes[i].code = (i == 0 ? UNKNOWN : IOR);
 	      alt_codes[i].value = value & 0x7ffff800;
+	      alt_codes[i].use_uw = false;
 	      value &= ~0x7ffff800;
 	      i++;
 	    }
@@ -860,6 +890,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	    {
 	      alt_codes[i].code = (i == 0 ? UNKNOWN : PLUS);
 	      alt_codes[i].value = value & 0x7ff;
+	      alt_codes[i].use_uw = false;
 	      value &= ~0x7ff;
 	      i++;
 	    }
@@ -870,6 +901,7 @@ riscv_build_integer_1 (struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS],
 	      HOST_WIDE_INT bit = ctz_hwi (value);
 	      alt_codes[i].code = (i == 0 ? UNKNOWN : IOR);
 	      alt_codes[i].value = 1UL << bit;
+	      alt_codes[i].use_uw = false;
 	      value &= ~(1ULL << bit);
 	      i++;
 	    }
@@ -911,6 +943,7 @@ riscv_build_integer (struct riscv_integer_op *codes, HOST_WIDE_INT value,
 	{
 	  alt_codes[alt_cost-1].code = LSHIFTRT;
 	  alt_codes[alt_cost-1].value = shift;
+	  alt_codes[alt_cost-1].use_uw = false;
 	  memcpy (codes, alt_codes, sizeof (alt_codes));
 	  cost = alt_cost;
 	}
@@ -922,6 +955,7 @@ riscv_build_integer (struct riscv_integer_op *codes, HOST_WIDE_INT value,
 	{
 	  alt_codes[alt_cost-1].code = LSHIFTRT;
 	  alt_codes[alt_cost-1].value = shift;
+	  alt_codes[alt_cost-1].use_uw = false;
 	  memcpy (codes, alt_codes, sizeof (alt_codes));
 	  cost = alt_cost;
 	}
@@ -2478,7 +2512,27 @@ riscv_move_integer (rtx temp, rtx dest, HOST_WIDE_INT value,
 	  else
 	    x = force_reg (mode, x);
 	  codes[i].value = trunc_int_for_mode (codes[i].value, mode);
-	  x = gen_rtx_fmt_ee (codes[i].code, mode, x, GEN_INT (codes[i].value));
+	  /* If the sequence requires using a "uw" form of an insn, we're
+	     going to have to construct the RTL ourselves and put it in
+	     a register to avoid force_reg/force_operand from mucking things
+	     up.  */
+	  if (codes[i].use_uw)
+	    {
+	      gcc_assert (TARGET_64BIT || TARGET_ZBA);
+	      rtx t = can_create_pseudo_p () ? gen_reg_rtx (mode) : temp;
+
+	      /* Create the proper mask for the slli.uw instruction.  */
+	      unsigned HOST_WIDE_INT value = 0xffffffff;
+	      value <<= codes[i].value;
+
+	      /* Right now the only "uw" form we use is slli, we may add more
+		 in the future.  */
+	      x = gen_rtx_fmt_ee (codes[i].code, mode, x, GEN_INT (codes[i].value));
+	      x = gen_rtx_fmt_ee (AND, mode, x, GEN_INT (value));
+	      x = riscv_emit_set (t, x);
+	    }
+	  else
+	    x = gen_rtx_fmt_ee (codes[i].code, mode, x, GEN_INT (codes[i].value));
 	}
     }
 
diff --git a/gcc/testsuite/gcc.target/riscv/synthesis-2.c b/gcc/testsuite/gcc.target/riscv/synthesis-2.c
new file mode 100644
index 00000000000..b88374da3c4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/synthesis-2.c
@@ -0,0 +1,1481 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target rv64 } */
+/* We aggressively skip as we really just need to test the basic synthesis
+   which shouldn't vary based on the optimization level.  -O1 seems to work
+   and eliminates the usual sources of extraneous dead code that would throw
+   off the counts.  */
+/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-O2" "-O3" "-Os" "-Oz" "-flto" } } */
+/* { dg-options "-march=rv64gc_zba_zbb_zbs" } */
+
+/* All these cases have the same form.  lui+slli.uw+addi
+/* { dg-final { scan-assembler-times "\\tadd" 367 } } */
+/* { dg-final { scan-assembler-times "\\tslli.uw" 367 } } */
+/* { dg-final { scan-assembler-times "\\taddi" 367 } } */
+
+unsigned long foo_0x480008001(void) {
+    return 0x480008001UL;
+}
+
+unsigned long foo_0x1080020001(void) {
+    return 0x1080020001UL;
+}
+
+unsigned long foo_0x2800040001(void) {
+    return 0x2800040001UL;
+}
+
+unsigned long foo_0x4080080001(void) {
+    return 0x4080080001UL;
+}
+
+unsigned long foo_0x6000080001(void) {
+    return 0x6000080001UL;
+}
+
+unsigned long foo_0x8800100001(void) {
+    return 0x8800100001UL;
+}
+
+unsigned long foo_0x10080200001(void) {
+    return 0x10080200001UL;
+}
+
+unsigned long foo_0x12000200001(void) {
+    return 0x12000200001UL;
+}
+
+unsigned long foo_0x20800400001(void) {
+    return 0x20800400001UL;
+}
+
+unsigned long foo_0x40080800001(void) {
+    return 0x40080800001UL;
+}
+
+unsigned long foo_0x42000800001(void) {
+    return 0x42000800001UL;
+}
+
+unsigned long foo_0x80801000001(void) {
+    return 0x80801000001UL;
+}
+
+unsigned long foo_0xa0001000001(void) {
+    return 0xa0001000001UL;
+}
+
+unsigned long foo_0x100082000001(void) {
+    return 0x100082000001UL;
+}
+
+unsigned long foo_0x102002000001(void) {
+    return 0x102002000001UL;
+}
+
+unsigned long foo_0x180002000001(void) {
+    return 0x180002000001UL;
+}
+
+unsigned long foo_0x200804000001(void) {
+    return 0x200804000001UL;
+}
+
+unsigned long foo_0x220004000001(void) {
+    return 0x220004000001UL;
+}
+
+unsigned long foo_0x400088000001(void) {
+    return 0x400088000001UL;
+}
+
+unsigned long foo_0x402008000001(void) {
+    return 0x402008000001UL;
+}
+
+unsigned long foo_0x480008000001(void) {
+    return 0x480008000001UL;
+}
+
+unsigned long foo_0x800810000001(void) {
+    return 0x800810000001UL;
+}
+
+unsigned long foo_0x820010000001(void) {
+    return 0x820010000001UL;
+}
+
+unsigned long foo_0x10000a0000001(void) {
+    return 0x10000a0000001UL;
+}
+
+unsigned long foo_0x1002020000001(void) {
+    return 0x1002020000001UL;
+}
+
+unsigned long foo_0x1080020000001(void) {
+    return 0x1080020000001UL;
+}
+
+unsigned long foo_0x2000840000001(void) {
+    return 0x2000840000001UL;
+}
+
+unsigned long foo_0x2020040000001(void) {
+    return 0x2020040000001UL;
+}
+
+unsigned long foo_0x2800040000001(void) {
+    return 0x2800040000001UL;
+}
+
+unsigned long foo_0x4002080000001(void) {
+    return 0x4002080000001UL;
+}
+
+unsigned long foo_0x4080080000001(void) {
+    return 0x4080080000001UL;
+}
+
+unsigned long foo_0x6000080000001(void) {
+    return 0x6000080000001UL;
+}
+
+unsigned long foo_0x8000900000001(void) {
+    return 0x8000900000001UL;
+}
+
+unsigned long foo_0x8020100000001(void) {
+    return 0x8020100000001UL;
+}
+
+unsigned long foo_0x8800100000001(void) {
+    return 0x8800100000001UL;
+}
+
+unsigned long foo_0x10002200000001(void) {
+    return 0x10002200000001UL;
+}
+
+unsigned long foo_0x10080200000001(void) {
+    return 0x10080200000001UL;
+}
+
+unsigned long foo_0x12000200000001(void) {
+    return 0x12000200000001UL;
+}
+
+unsigned long foo_0x20000c00000001(void) {
+    return 0x20000c00000001UL;
+}
+
+unsigned long foo_0x20020400000001(void) {
+    return 0x20020400000001UL;
+}
+
+unsigned long foo_0x20800400000001(void) {
+    return 0x20800400000001UL;
+}
+
+unsigned long foo_0x40002800000001(void) {
+    return 0x40002800000001UL;
+}
+
+unsigned long foo_0x40080800000001(void) {
+    return 0x40080800000001UL;
+}
+
+unsigned long foo_0x42000800000001(void) {
+    return 0x42000800000001UL;
+}
+
+unsigned long foo_0x80021000000001(void) {
+    return 0x80021000000001UL;
+}
+
+unsigned long foo_0x80801000000001(void) {
+    return 0x80801000000001UL;
+}
+
+unsigned long foo_0xa0001000000001(void) {
+    return 0xa0001000000001UL;
+}
+
+unsigned long foo_0x100082000000001(void) {
+    return 0x100082000000001UL;
+}
+
+unsigned long foo_0x102002000000001(void) {
+    return 0x102002000000001UL;
+}
+
+unsigned long foo_0x180002000000001(void) {
+    return 0x180002000000001UL;
+}
+
+unsigned long foo_0x200024000000001(void) {
+    return 0x200024000000001UL;
+}
+
+unsigned long foo_0x200804000000001(void) {
+    return 0x200804000000001UL;
+}
+
+unsigned long foo_0x220004000000001(void) {
+    return 0x220004000000001UL;
+}
+
+unsigned long foo_0x400088000000001(void) {
+    return 0x400088000000001UL;
+}
+
+unsigned long foo_0x402008000000001(void) {
+    return 0x402008000000001UL;
+}
+
+unsigned long foo_0x480008000000001(void) {
+    return 0x480008000000001UL;
+}
+
+unsigned long foo_0x800030000000001(void) {
+    return 0x800030000000001UL;
+}
+
+unsigned long foo_0x800810000000001(void) {
+    return 0x800810000000001UL;
+}
+
+unsigned long foo_0x820010000000001(void) {
+    return 0x820010000000001UL;
+}
+
+unsigned long foo_0x10000a0000000001(void) {
+    return 0x10000a0000000001UL;
+}
+
+unsigned long foo_0x1002020000000001(void) {
+    return 0x1002020000000001UL;
+}
+
+unsigned long foo_0x1080020000000001(void) {
+    return 0x1080020000000001UL;
+}
+
+unsigned long foo_0x2000840000000001(void) {
+    return 0x2000840000000001UL;
+}
+
+unsigned long foo_0x2020040000000001(void) {
+    return 0x2020040000000001UL;
+}
+
+unsigned long foo_0x2800040000000001(void) {
+    return 0x2800040000000001UL;
+}
+
+unsigned long foo_0x4002080000000001(void) {
+    return 0x4002080000000001UL;
+}
+
+unsigned long foo_0x4080080000000001(void) {
+    return 0x4080080000000001UL;
+}
+
+unsigned long foo_0x6000080000000001(void) {
+    return 0x6000080000000001UL;
+}
+
+unsigned long foo_0x900010002(void) {
+    return 0x900010002UL;
+}
+
+unsigned long foo_0x2100040002(void) {
+    return 0x2100040002UL;
+}
+
+unsigned long foo_0x5000080002(void) {
+    return 0x5000080002UL;
+}
+
+unsigned long foo_0x8100100002(void) {
+    return 0x8100100002UL;
+}
+
+unsigned long foo_0xc000100002(void) {
+    return 0xc000100002UL;
+}
+
+unsigned long foo_0x11000200002(void) {
+    return 0x11000200002UL;
+}
+
+unsigned long foo_0x20100400002(void) {
+    return 0x20100400002UL;
+}
+
+unsigned long foo_0x24000400002(void) {
+    return 0x24000400002UL;
+}
+
+unsigned long foo_0x41000800002(void) {
+    return 0x41000800002UL;
+}
+
+unsigned long foo_0x80101000002(void) {
+    return 0x80101000002UL;
+}
+
+unsigned long foo_0x84001000002(void) {
+    return 0x84001000002UL;
+}
+
+unsigned long foo_0x101002000002(void) {
+    return 0x101002000002UL;
+}
+
+unsigned long foo_0x140002000002(void) {
+    return 0x140002000002UL;
+}
+
+unsigned long foo_0x200104000002(void) {
+    return 0x200104000002UL;
+}
+
+unsigned long foo_0x204004000002(void) {
+    return 0x204004000002UL;
+}
+
+unsigned long foo_0x300004000002(void) {
+    return 0x300004000002UL;
+}
+
+unsigned long foo_0x401008000002(void) {
+    return 0x401008000002UL;
+}
+
+unsigned long foo_0x440008000002(void) {
+    return 0x440008000002UL;
+}
+
+unsigned long foo_0x800110000002(void) {
+    return 0x800110000002UL;
+}
+
+unsigned long foo_0x804010000002(void) {
+    return 0x804010000002UL;
+}
+
+unsigned long foo_0x900010000002(void) {
+    return 0x900010000002UL;
+}
+
+unsigned long foo_0x1001020000002(void) {
+    return 0x1001020000002UL;
+}
+
+unsigned long foo_0x1040020000002(void) {
+    return 0x1040020000002UL;
+}
+
+unsigned long foo_0x2000140000002(void) {
+    return 0x2000140000002UL;
+}
+
+unsigned long foo_0x2004040000002(void) {
+    return 0x2004040000002UL;
+}
+
+unsigned long foo_0x2100040000002(void) {
+    return 0x2100040000002UL;
+}
+
+unsigned long foo_0x4001080000002(void) {
+    return 0x4001080000002UL;
+}
+
+unsigned long foo_0x4040080000002(void) {
+    return 0x4040080000002UL;
+}
+
+unsigned long foo_0x5000080000002(void) {
+    return 0x5000080000002UL;
+}
+
+unsigned long foo_0x8004100000002(void) {
+    return 0x8004100000002UL;
+}
+
+unsigned long foo_0x8100100000002(void) {
+    return 0x8100100000002UL;
+}
+
+unsigned long foo_0xc000100000002(void) {
+    return 0xc000100000002UL;
+}
+
+unsigned long foo_0x10001200000002(void) {
+    return 0x10001200000002UL;
+}
+
+unsigned long foo_0x10040200000002(void) {
+    return 0x10040200000002UL;
+}
+
+unsigned long foo_0x11000200000002(void) {
+    return 0x11000200000002UL;
+}
+
+unsigned long foo_0x20004400000002(void) {
+    return 0x20004400000002UL;
+}
+
+unsigned long foo_0x20100400000002(void) {
+    return 0x20100400000002UL;
+}
+
+unsigned long foo_0x24000400000002(void) {
+    return 0x24000400000002UL;
+}
+
+unsigned long foo_0x40001800000002(void) {
+    return 0x40001800000002UL;
+}
+
+unsigned long foo_0x40040800000002(void) {
+    return 0x40040800000002UL;
+}
+
+unsigned long foo_0x41000800000002(void) {
+    return 0x41000800000002UL;
+}
+
+unsigned long foo_0x80005000000002(void) {
+    return 0x80005000000002UL;
+}
+
+unsigned long foo_0x80101000000002(void) {
+    return 0x80101000000002UL;
+}
+
+unsigned long foo_0x84001000000002(void) {
+    return 0x84001000000002UL;
+}
+
+unsigned long foo_0x100042000000002(void) {
+    return 0x100042000000002UL;
+}
+
+unsigned long foo_0x101002000000002(void) {
+    return 0x101002000000002UL;
+}
+
+unsigned long foo_0x140002000000002(void) {
+    return 0x140002000000002UL;
+}
+
+unsigned long foo_0x200104000000002(void) {
+    return 0x200104000000002UL;
+}
+
+unsigned long foo_0x204004000000002(void) {
+    return 0x204004000000002UL;
+}
+
+unsigned long foo_0x300004000000002(void) {
+    return 0x300004000000002UL;
+}
+
+unsigned long foo_0x400048000000002(void) {
+    return 0x400048000000002UL;
+}
+
+unsigned long foo_0x401008000000002(void) {
+    return 0x401008000000002UL;
+}
+
+unsigned long foo_0x440008000000002(void) {
+    return 0x440008000000002UL;
+}
+
+unsigned long foo_0x800110000000002(void) {
+    return 0x800110000000002UL;
+}
+
+unsigned long foo_0x804010000000002(void) {
+    return 0x804010000000002UL;
+}
+
+unsigned long foo_0x900010000000002(void) {
+    return 0x900010000000002UL;
+}
+
+unsigned long foo_0x1000060000000002(void) {
+    return 0x1000060000000002UL;
+}
+
+unsigned long foo_0x1001020000000002(void) {
+    return 0x1001020000000002UL;
+}
+
+unsigned long foo_0x1040020000000002(void) {
+    return 0x1040020000000002UL;
+}
+
+unsigned long foo_0x2000140000000002(void) {
+    return 0x2000140000000002UL;
+}
+
+unsigned long foo_0x2004040000000002(void) {
+    return 0x2004040000000002UL;
+}
+
+unsigned long foo_0x2100040000000002(void) {
+    return 0x2100040000000002UL;
+}
+
+unsigned long foo_0x4001080000000002(void) {
+    return 0x4001080000000002UL;
+}
+
+unsigned long foo_0x4040080000000002(void) {
+    return 0x4040080000000002UL;
+}
+
+unsigned long foo_0x5000080000000002(void) {
+    return 0x5000080000000002UL;
+}
+
+unsigned long foo_0x600008004(void) {
+    return 0x600008004UL;
+}
+
+unsigned long foo_0x880010004(void) {
+    return 0x880010004UL;
+}
+
+unsigned long foo_0x1200020004(void) {
+    return 0x1200020004UL;
+}
+
+unsigned long foo_0x2080040004(void) {
+    return 0x2080040004UL;
+}
+
+unsigned long foo_0x4200080004(void) {
+    return 0x4200080004UL;
+}
+
+unsigned long foo_0x8080100004(void) {
+    return 0x8080100004UL;
+}
+
+unsigned long foo_0xa000100004(void) {
+    return 0xa000100004UL;
+}
+
+unsigned long foo_0x10200200004(void) {
+    return 0x10200200004UL;
+}
+
+unsigned long foo_0x18000200004(void) {
+    return 0x18000200004UL;
+}
+
+unsigned long foo_0x20080400004(void) {
+    return 0x20080400004UL;
+}
+
+unsigned long foo_0x22000400004(void) {
+    return 0x22000400004UL;
+}
+
+unsigned long foo_0x40200800004(void) {
+    return 0x40200800004UL;
+}
+
+unsigned long foo_0x48000800004(void) {
+    return 0x48000800004UL;
+}
+
+unsigned long foo_0x80081000004(void) {
+    return 0x80081000004UL;
+}
+
+unsigned long foo_0x82001000004(void) {
+    return 0x82001000004UL;
+}
+
+unsigned long foo_0x100202000004(void) {
+    return 0x100202000004UL;
+}
+
+unsigned long foo_0x108002000004(void) {
+    return 0x108002000004UL;
+}
+
+unsigned long foo_0x200084000004(void) {
+    return 0x200084000004UL;
+}
+
+unsigned long foo_0x202004000004(void) {
+    return 0x202004000004UL;
+}
+
+unsigned long foo_0x280004000004(void) {
+    return 0x280004000004UL;
+}
+
+unsigned long foo_0x400208000004(void) {
+    return 0x400208000004UL;
+}
+
+unsigned long foo_0x408008000004(void) {
+    return 0x408008000004UL;
+}
+
+unsigned long foo_0x600008000004(void) {
+    return 0x600008000004UL;
+}
+
+unsigned long foo_0x800090000004(void) {
+    return 0x800090000004UL;
+}
+
+unsigned long foo_0x802010000004(void) {
+    return 0x802010000004UL;
+}
+
+unsigned long foo_0x880010000004(void) {
+    return 0x880010000004UL;
+}
+
+unsigned long foo_0x1000220000004(void) {
+    return 0x1000220000004UL;
+}
+
+unsigned long foo_0x1008020000004(void) {
+    return 0x1008020000004UL;
+}
+
+unsigned long foo_0x1200020000004(void) {
+    return 0x1200020000004UL;
+}
+
+unsigned long foo_0x20000c0000004(void) {
+    return 0x20000c0000004UL;
+}
+
+unsigned long foo_0x2002040000004(void) {
+    return 0x2002040000004UL;
+}
+
+unsigned long foo_0x2080040000004(void) {
+    return 0x2080040000004UL;
+}
+
+unsigned long foo_0x4000280000004(void) {
+    return 0x4000280000004UL;
+}
+
+unsigned long foo_0x4008080000004(void) {
+    return 0x4008080000004UL;
+}
+
+unsigned long foo_0x4200080000004(void) {
+    return 0x4200080000004UL;
+}
+
+unsigned long foo_0x8002100000004(void) {
+    return 0x8002100000004UL;
+}
+
+unsigned long foo_0x8080100000004(void) {
+    return 0x8080100000004UL;
+}
+
+unsigned long foo_0xa000100000004(void) {
+    return 0xa000100000004UL;
+}
+
+unsigned long foo_0x10008200000004(void) {
+    return 0x10008200000004UL;
+}
+
+unsigned long foo_0x10200200000004(void) {
+    return 0x10200200000004UL;
+}
+
+unsigned long foo_0x18000200000004(void) {
+    return 0x18000200000004UL;
+}
+
+unsigned long foo_0x20002400000004(void) {
+    return 0x20002400000004UL;
+}
+
+unsigned long foo_0x20080400000004(void) {
+    return 0x20080400000004UL;
+}
+
+unsigned long foo_0x22000400000004(void) {
+    return 0x22000400000004UL;
+}
+
+unsigned long foo_0x40008800000004(void) {
+    return 0x40008800000004UL;
+}
+
+unsigned long foo_0x40200800000004(void) {
+    return 0x40200800000004UL;
+}
+
+unsigned long foo_0x48000800000004(void) {
+    return 0x48000800000004UL;
+}
+
+unsigned long foo_0x80003000000004(void) {
+    return 0x80003000000004UL;
+}
+
+unsigned long foo_0x80081000000004(void) {
+    return 0x80081000000004UL;
+}
+
+unsigned long foo_0x82001000000004(void) {
+    return 0x82001000000004UL;
+}
+
+unsigned long foo_0x10000a000000004(void) {
+    return 0x10000a000000004UL;
+}
+
+unsigned long foo_0x100202000000004(void) {
+    return 0x100202000000004UL;
+}
+
+unsigned long foo_0x108002000000004(void) {
+    return 0x108002000000004UL;
+}
+
+unsigned long foo_0x200084000000004(void) {
+    return 0x200084000000004UL;
+}
+
+unsigned long foo_0x202004000000004(void) {
+    return 0x202004000000004UL;
+}
+
+unsigned long foo_0x280004000000004(void) {
+    return 0x280004000000004UL;
+}
+
+unsigned long foo_0x400208000000004(void) {
+    return 0x400208000000004UL;
+}
+
+unsigned long foo_0x408008000000004(void) {
+    return 0x408008000000004UL;
+}
+
+unsigned long foo_0x600008000000004(void) {
+    return 0x600008000000004UL;
+}
+
+unsigned long foo_0x800090000000004(void) {
+    return 0x800090000000004UL;
+}
+
+unsigned long foo_0x802010000000004(void) {
+    return 0x802010000000004UL;
+}
+
+unsigned long foo_0x880010000000004(void) {
+    return 0x880010000000004UL;
+}
+
+unsigned long foo_0x1000220000000004(void) {
+    return 0x1000220000000004UL;
+}
+
+unsigned long foo_0x1008020000000004(void) {
+    return 0x1008020000000004UL;
+}
+
+unsigned long foo_0x1200020000000004(void) {
+    return 0x1200020000000004UL;
+}
+
+unsigned long foo_0x20000c0000000004(void) {
+    return 0x20000c0000000004UL;
+}
+
+unsigned long foo_0x2002040000000004(void) {
+    return 0x2002040000000004UL;
+}
+
+unsigned long foo_0x2080040000000004(void) {
+    return 0x2080040000000004UL;
+}
+
+unsigned long foo_0x4000280000000004(void) {
+    return 0x4000280000000004UL;
+}
+
+unsigned long foo_0x4008080000000004(void) {
+    return 0x4008080000000004UL;
+}
+
+unsigned long foo_0x4200080000000004(void) {
+    return 0x4200080000000004UL;
+}
+
+unsigned long foo_0x500008008(void) {
+    return 0x500008008UL;
+}
+
+unsigned long foo_0xc00010008(void) {
+    return 0xc00010008UL;
+}
+
+unsigned long foo_0x1100020008(void) {
+    return 0x1100020008UL;
+}
+
+unsigned long foo_0x2400040008(void) {
+    return 0x2400040008UL;
+}
+
+unsigned long foo_0x4100080008(void) {
+    return 0x4100080008UL;
+}
+
+unsigned long foo_0x8400100008(void) {
+    return 0x8400100008UL;
+}
+
+unsigned long foo_0x10100200008(void) {
+    return 0x10100200008UL;
+}
+
+unsigned long foo_0x14000200008(void) {
+    return 0x14000200008UL;
+}
+
+unsigned long foo_0x20400400008(void) {
+    return 0x20400400008UL;
+}
+
+unsigned long foo_0x30000400008(void) {
+    return 0x30000400008UL;
+}
+
+unsigned long foo_0x40100800008(void) {
+    return 0x40100800008UL;
+}
+
+unsigned long foo_0x44000800008(void) {
+    return 0x44000800008UL;
+}
+
+unsigned long foo_0x80401000008(void) {
+    return 0x80401000008UL;
+}
+
+unsigned long foo_0x90001000008(void) {
+    return 0x90001000008UL;
+}
+
+unsigned long foo_0x100102000008(void) {
+    return 0x100102000008UL;
+}
+
+unsigned long foo_0x104002000008(void) {
+    return 0x104002000008UL;
+}
+
+unsigned long foo_0x200404000008(void) {
+    return 0x200404000008UL;
+}
+
+unsigned long foo_0x210004000008(void) {
+    return 0x210004000008UL;
+}
+
+unsigned long foo_0x400108000008(void) {
+    return 0x400108000008UL;
+}
+
+unsigned long foo_0x404008000008(void) {
+    return 0x404008000008UL;
+}
+
+unsigned long foo_0x500008000008(void) {
+    return 0x500008000008UL;
+}
+
+unsigned long foo_0x800410000008(void) {
+    return 0x800410000008UL;
+}
+
+unsigned long foo_0x810010000008(void) {
+    return 0x810010000008UL;
+}
+
+unsigned long foo_0xc00010000008(void) {
+    return 0xc00010000008UL;
+}
+
+unsigned long foo_0x1000120000008(void) {
+    return 0x1000120000008UL;
+}
+
+unsigned long foo_0x1004020000008(void) {
+    return 0x1004020000008UL;
+}
+
+unsigned long foo_0x1100020000008(void) {
+    return 0x1100020000008UL;
+}
+
+unsigned long foo_0x2000440000008(void) {
+    return 0x2000440000008UL;
+}
+
+unsigned long foo_0x2010040000008(void) {
+    return 0x2010040000008UL;
+}
+
+unsigned long foo_0x2400040000008(void) {
+    return 0x2400040000008UL;
+}
+
+unsigned long foo_0x4000180000008(void) {
+    return 0x4000180000008UL;
+}
+
+unsigned long foo_0x4004080000008(void) {
+    return 0x4004080000008UL;
+}
+
+unsigned long foo_0x4100080000008(void) {
+    return 0x4100080000008UL;
+}
+
+unsigned long foo_0x8000500000008(void) {
+    return 0x8000500000008UL;
+}
+
+unsigned long foo_0x8010100000008(void) {
+    return 0x8010100000008UL;
+}
+
+unsigned long foo_0x8400100000008(void) {
+    return 0x8400100000008UL;
+}
+
+unsigned long foo_0x10004200000008(void) {
+    return 0x10004200000008UL;
+}
+
+unsigned long foo_0x10100200000008(void) {
+    return 0x10100200000008UL;
+}
+
+unsigned long foo_0x14000200000008(void) {
+    return 0x14000200000008UL;
+}
+
+unsigned long foo_0x20010400000008(void) {
+    return 0x20010400000008UL;
+}
+
+unsigned long foo_0x20400400000008(void) {
+    return 0x20400400000008UL;
+}
+
+unsigned long foo_0x30000400000008(void) {
+    return 0x30000400000008UL;
+}
+
+unsigned long foo_0x40004800000008(void) {
+    return 0x40004800000008UL;
+}
+
+unsigned long foo_0x40100800000008(void) {
+    return 0x40100800000008UL;
+}
+
+unsigned long foo_0x44000800000008(void) {
+    return 0x44000800000008UL;
+}
+
+unsigned long foo_0x80011000000008(void) {
+    return 0x80011000000008UL;
+}
+
+unsigned long foo_0x80401000000008(void) {
+    return 0x80401000000008UL;
+}
+
+unsigned long foo_0x90001000000008(void) {
+    return 0x90001000000008UL;
+}
+
+unsigned long foo_0x100006000000008(void) {
+    return 0x100006000000008UL;
+}
+
+unsigned long foo_0x100102000000008(void) {
+    return 0x100102000000008UL;
+}
+
+unsigned long foo_0x104002000000008(void) {
+    return 0x104002000000008UL;
+}
+
+unsigned long foo_0x200014000000008(void) {
+    return 0x200014000000008UL;
+}
+
+unsigned long foo_0x200404000000008(void) {
+    return 0x200404000000008UL;
+}
+
+unsigned long foo_0x210004000000008(void) {
+    return 0x210004000000008UL;
+}
+
+unsigned long foo_0x400108000000008(void) {
+    return 0x400108000000008UL;
+}
+
+unsigned long foo_0x404008000000008(void) {
+    return 0x404008000000008UL;
+}
+
+unsigned long foo_0x500008000000008(void) {
+    return 0x500008000000008UL;
+}
+
+unsigned long foo_0x800410000000008(void) {
+    return 0x800410000000008UL;
+}
+
+unsigned long foo_0x810010000000008(void) {
+    return 0x810010000000008UL;
+}
+
+unsigned long foo_0xc00010000000008(void) {
+    return 0xc00010000000008UL;
+}
+
+unsigned long foo_0x1000120000000008(void) {
+    return 0x1000120000000008UL;
+}
+
+unsigned long foo_0x1004020000000008(void) {
+    return 0x1004020000000008UL;
+}
+
+unsigned long foo_0x1100020000000008(void) {
+    return 0x1100020000000008UL;
+}
+
+unsigned long foo_0x2000440000000008(void) {
+    return 0x2000440000000008UL;
+}
+
+unsigned long foo_0x2010040000000008(void) {
+    return 0x2010040000000008UL;
+}
+
+unsigned long foo_0x2400040000000008(void) {
+    return 0x2400040000000008UL;
+}
+
+unsigned long foo_0x4000180000000008(void) {
+    return 0x4000180000000008UL;
+}
+
+unsigned long foo_0x4004080000000008(void) {
+    return 0x4004080000000008UL;
+}
+
+unsigned long foo_0x4100080000000008(void) {
+    return 0x4100080000000008UL;
+}
+
+unsigned long foo_0xa00010010(void) {
+    return 0xa00010010UL;
+}
+
+unsigned long foo_0x1800020010(void) {
+    return 0x1800020010UL;
+}
+
+unsigned long foo_0x2200040010(void) {
+    return 0x2200040010UL;
+}
+
+unsigned long foo_0x4800080010(void) {
+    return 0x4800080010UL;
+}
+
+unsigned long foo_0x8200100010(void) {
+    return 0x8200100010UL;
+}
+
+unsigned long foo_0x10800200010(void) {
+    return 0x10800200010UL;
+}
+
+unsigned long foo_0x20200400010(void) {
+    return 0x20200400010UL;
+}
+
+unsigned long foo_0x28000400010(void) {
+    return 0x28000400010UL;
+}
+
+unsigned long foo_0x40800800010(void) {
+    return 0x40800800010UL;
+}
+
+unsigned long foo_0x60000800010(void) {
+    return 0x60000800010UL;
+}
+
+unsigned long foo_0x80201000010(void) {
+    return 0x80201000010UL;
+}
+
+unsigned long foo_0x88001000010(void) {
+    return 0x88001000010UL;
+}
+
+unsigned long foo_0x100802000010(void) {
+    return 0x100802000010UL;
+}
+
+unsigned long foo_0x120002000010(void) {
+    return 0x120002000010UL;
+}
+
+unsigned long foo_0x200204000010(void) {
+    return 0x200204000010UL;
+}
+
+unsigned long foo_0x208004000010(void) {
+    return 0x208004000010UL;
+}
+
+unsigned long foo_0x400808000010(void) {
+    return 0x400808000010UL;
+}
+
+unsigned long foo_0x420008000010(void) {
+    return 0x420008000010UL;
+}
+
+unsigned long foo_0x800210000010(void) {
+    return 0x800210000010UL;
+}
+
+unsigned long foo_0x808010000010(void) {
+    return 0x808010000010UL;
+}
+
+unsigned long foo_0xa00010000010(void) {
+    return 0xa00010000010UL;
+}
+
+unsigned long foo_0x1000820000010(void) {
+    return 0x1000820000010UL;
+}
+
+unsigned long foo_0x1020020000010(void) {
+    return 0x1020020000010UL;
+}
+
+unsigned long foo_0x1800020000010(void) {
+    return 0x1800020000010UL;
+}
+
+unsigned long foo_0x2000240000010(void) {
+    return 0x2000240000010UL;
+}
+
+unsigned long foo_0x2008040000010(void) {
+    return 0x2008040000010UL;
+}
+
+unsigned long foo_0x2200040000010(void) {
+    return 0x2200040000010UL;
+}
+
+unsigned long foo_0x4000880000010(void) {
+    return 0x4000880000010UL;
+}
+
+unsigned long foo_0x4020080000010(void) {
+    return 0x4020080000010UL;
+}
+
+unsigned long foo_0x4800080000010(void) {
+    return 0x4800080000010UL;
+}
+
+unsigned long foo_0x8000300000010(void) {
+    return 0x8000300000010UL;
+}
+
+unsigned long foo_0x8008100000010(void) {
+    return 0x8008100000010UL;
+}
+
+unsigned long foo_0x8200100000010(void) {
+    return 0x8200100000010UL;
+}
+
+unsigned long foo_0x10000a00000010(void) {
+    return 0x10000a00000010UL;
+}
+
+unsigned long foo_0x10020200000010(void) {
+    return 0x10020200000010UL;
+}
+
+unsigned long foo_0x10800200000010(void) {
+    return 0x10800200000010UL;
+}
+
+unsigned long foo_0x20008400000010(void) {
+    return 0x20008400000010UL;
+}
+
+unsigned long foo_0x20200400000010(void) {
+    return 0x20200400000010UL;
+}
+
+unsigned long foo_0x28000400000010(void) {
+    return 0x28000400000010UL;
+}
+
+unsigned long foo_0x40020800000010(void) {
+    return 0x40020800000010UL;
+}
+
+unsigned long foo_0x40800800000010(void) {
+    return 0x40800800000010UL;
+}
+
+unsigned long foo_0x60000800000010(void) {
+    return 0x60000800000010UL;
+}
+
+unsigned long foo_0x80009000000010(void) {
+    return 0x80009000000010UL;
+}
+
+unsigned long foo_0x80201000000010(void) {
+    return 0x80201000000010UL;
+}
+
+unsigned long foo_0x88001000000010(void) {
+    return 0x88001000000010UL;
+}
+
+unsigned long foo_0x100022000000010(void) {
+    return 0x100022000000010UL;
+}
+
+unsigned long foo_0x100802000000010(void) {
+    return 0x100802000000010UL;
+}
+
+unsigned long foo_0x120002000000010(void) {
+    return 0x120002000000010UL;
+}
+
+unsigned long foo_0x20000c000000010(void) {
+    return 0x20000c000000010UL;
+}
+
+unsigned long foo_0x200204000000010(void) {
+    return 0x200204000000010UL;
+}
+
+unsigned long foo_0x208004000000010(void) {
+    return 0x208004000000010UL;
+}
+
+unsigned long foo_0x400028000000010(void) {
+    return 0x400028000000010UL;
+}
+
+unsigned long foo_0x400808000000010(void) {
+    return 0x400808000000010UL;
+}
+
+unsigned long foo_0x420008000000010(void) {
+    return 0x420008000000010UL;
+}
+
+unsigned long foo_0x800210000000010(void) {
+    return 0x800210000000010UL;
+}
+
+unsigned long foo_0x808010000000010(void) {
+    return 0x808010000000010UL;
+}
+
+unsigned long foo_0xa00010000000010(void) {
+    return 0xa00010000000010UL;
+}
+
+unsigned long foo_0x1000820000000010(void) {
+    return 0x1000820000000010UL;
+}
+
+unsigned long foo_0x1020020000000010(void) {
+    return 0x1020020000000010UL;
+}
+
+unsigned long foo_0x1800020000000010(void) {
+    return 0x1800020000000010UL;
+}
+
+unsigned long foo_0x2000240000000010(void) {
+    return 0x2000240000000010UL;
+}
+
+unsigned long foo_0x2008040000000010(void) {
+    return 0x2008040000000010UL;
+}
+
+unsigned long foo_0x2200040000000010(void) {
+    return 0x2200040000000010UL;
+}
+
+unsigned long foo_0x4000880000000010(void) {
+    return 0x4000880000000010UL;
+}
+
+unsigned long foo_0x4020080000000010(void) {
+    return 0x4020080000000010UL;
+}
+
+unsigned long foo_0x4800080000000010(void) {
+    return 0x4800080000000010UL;
+}
+
+unsigned long foo_0x1400020020(void) {
+    return 0x1400020020UL;
+}
+
+unsigned long foo_0x3000040020(void) {
+    return 0x3000040020UL;
+}
+
+unsigned long foo_0x4400080020(void) {
+    return 0x4400080020UL;
+}
+
+unsigned long foo_0x9000100020(void) {
+    return 0x9000100020UL;
+}
+
+unsigned long foo_0x10400200020(void) {
+    return 0x10400200020UL;
+}
+
+unsigned long foo_0x21000400020(void) {
+    return 0x21000400020UL;
+}
+
+unsigned long foo_0x40400800020(void) {
+    return 0x40400800020UL;
+}
+
+unsigned long foo_0x50000800020(void) {
+    return 0x50000800020UL;
+}
+
+unsigned long foo_0x81001000020(void) {
+    return 0x81001000020UL;
+}
+
+unsigned long foo_0xc0001000020(void) {
+    return 0xc0001000020UL;
+}
+
+unsigned long foo_0x100402000020(void) {
+    return 0x100402000020UL;
+}
+
+unsigned long foo_0x110002000020(void) {
+    return 0x110002000020UL;
+}
+
+unsigned long foo_0x201004000020(void) {
+    return 0x201004000020UL;
+}
+
+unsigned long foo_0x240004000020(void) {
+    return 0x240004000020UL;
+}
+
+unsigned long foo_0x400408000020(void) {
+    return 0x400408000020UL;
+}
+
+unsigned long foo_0x410008000020(void) {
+    return 0x410008000020UL;
+}
+
+unsigned long foo_0x801010000020(void) {
+    return 0x801010000020UL;
+}
+
+unsigned long foo_0x840010000020(void) {
+    return 0x840010000020UL;
+}
+
+unsigned long foo_0x1000420000020(void) {
+    return 0x1000420000020UL;
+}
+
+unsigned long foo_0x1010020000020(void) {
+    return 0x1010020000020UL;
+}
+
+unsigned long foo_0x1400020000020(void) {
+    return 0x1400020000020UL;
+}
+
+unsigned long foo_0x2001040000020(void) {
+    return 0x2001040000020UL;
+}
+
+unsigned long foo_0x2040040000020(void) {
+    return 0x2040040000020UL;
+}
+
+unsigned long foo_0x3000040000020(void) {
+    return 0x3000040000020UL;
+}
+
+unsigned long foo_0x4000480000020(void) {
+    return 0x4000480000020UL;
+}
+
+unsigned long foo_0x4010080000020(void) {
+    return 0x4010080000020UL;
+}
+
+unsigned long foo_0x4400080000020(void) {
+    return 0x4400080000020UL;
+}
+
+unsigned long foo_0x8001100000020(void) {
+    return 0x8001100000020UL;
+}
