diff mbox series

[RFA,RISC-V] Use "uw" forms for constant synthesis

Message ID 9cc3310b-de68-49de-a5ad-612c20da1637@ventanamicro.com
State New
Headers show
Series [RFA,RISC-V] Use "uw" forms for constant synthesis | expand

Commit Message

Jeff Law May 5, 2024, 12:53 a.m. UTC
So another constant synthesis improvement.

In this patch we're looking at cases where we'd like to be able to use 
lui+slli, but can't because of the sign extending nature of lui on 
TARGET_64BIT.  For example: 0x8001100000020UL.  The trunk currently 
generates 4 instructions for that constant, when it can be done with 3 
(lui+slli.uw+addi).

When Zba is enabled, we can use lui+slli.uw as the slli.uw masks off the 
bits 32..63 before shifting, giving us the precise semantics we want.

I strongly suspect we'll want to do the same for a set of constants with 
lui+add.uw, lui+shNadd.uw, so you'll see the beginnings of generalizing 
support for lui followed by a "uw" instruction.

The new test just tests the set of cases that showed up while exploring 
a particular space of the constant synthesis problem.  It's not meant to 
be exhaustive (failure to use shadd when profitable).

Tested on rv64gc and rv32gcv.  OK for the trunk assuming it passes CI?

Jeff
gcc/

	* config/riscv/riscv.cc (riscv_integer_op): Add field tracking if we
	want to use a "uw" instruction variant.
	(riscv_build_integer_1): Initialize the new field in various places.
	Use lui+slli.uw for some constants.
	(riscv_move_integer): Handle slli.uw.

Comments

Jeff Law May 5, 2024, 9:44 p.m. UTC | #1
On 5/4/24 6:53 PM, Jeff Law wrote:
> 
> So another constant synthesis improvement.
> 
> In this patch we're looking at cases where we'd like to be able to use 
> lui+slli, but can't because of the sign extending nature of lui on 
> TARGET_64BIT.  For example: 0x8001100000020UL.  The trunk currently 
> generates 4 instructions for that constant, when it can be done with 3 
> (lui+slli.uw+addi).
> 
> When Zba is enabled, we can use lui+slli.uw as the slli.uw masks off the 
> bits 32..63 before shifting, giving us the precise semantics we want.
> 
> I strongly suspect we'll want to do the same for a set of constants with 
> lui+add.uw, lui+shNadd.uw, so you'll see the beginnings of generalizing 
> support for lui followed by a "uw" instruction.
> 
> The new test just tests the set of cases that showed up while exploring 
> a particular space of the constant synthesis problem.  It's not meant to 
> be exhaustive (failure to use shadd when profitable).
> 
> Tested on rv64gc and rv32gcv.  OK for the trunk assuming it passes CI?
Assume I'll fix the two overly long lines pointed out by the linter :-)
jeff
Jeff Law May 6, 2024, 9:29 p.m. UTC | #2
On 5/4/24 6:53 PM, Jeff Law wrote:
> 
> So another constant synthesis improvement.
> 
> In this patch we're looking at cases where we'd like to be able to use 
> lui+slli, but can't because of the sign extending nature of lui on 
> TARGET_64BIT.  For example: 0x8001100000020UL.  The trunk currently 
> generates 4 instructions for that constant, when it can be done with 3 
> (lui+slli.uw+addi).
> 
> When Zba is enabled, we can use lui+slli.uw as the slli.uw masks off the 
> bits 32..63 before shifting, giving us the precise semantics we want.
> 
> I strongly suspect we'll want to do the same for a set of constants with 
> lui+add.uw, lui+shNadd.uw, so you'll see the beginnings of generalizing 
> support for lui followed by a "uw" instruction.
> 
> The new test just tests the set of cases that showed up while exploring 
> a particular space of the constant synthesis problem.  It's not meant to 
> be exhaustive (failure to use shadd when profitable).
> 
> Tested on rv64gc and rv32gcv.  OK for the trunk assuming it passes CI?
I pushed this after fixing the two over-length lines.

jeff
diff mbox series

Patch

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;
+}