]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add ports for TILE-Gx and TILEPro.
authorWalter Lee <walt@tilera.com>
Tue, 14 Feb 2012 10:02:21 +0000 (10:02 +0000)
committerWalter Lee <walt@gcc.gnu.org>
Tue, 14 Feb 2012 10:02:21 +0000 (10:02 +0000)
.
* MAINTAINERS (tilegx port): Add myself.
(tilepro port): Add myself.

contrib
* config-list.mk (LIST): Add tilegx-linux-gnu and
tilepro-linux-gnu.
* gcc_update (gcc/config/tilegx/mul-tables.c): New dependencies.
(gcc/config/tilepro/mul-tables.c): New dependencies.

gcc
* config.gcc: Handle tilegx and tilepro.
* configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for
tilegx and tilepro.
Add HAVE_AS_TLS check for tilegx and tilepro.
* configure: Regenerate.
* doc/contrib.texi: Add Mat Hostetter and self.
* doc/extend.texi (TILE-Gx Built-in Functions): New node.
Document instruction intrinsics and network accessing intrinsics.
(TILEPro Built-in Functions): New node.  Document instruction
intrinsics and network accessing intrinsics.
* doc/install.texi (Specific, tilegx-*-linux*): Document it.
(Specific, tilepro-*-linux*): Likewise.
* doc/invoke.texi (TILE-Gx Options): New section.
(TILEPro Options): New section.
* doc/md.texi (TILE-Gx): New section.
(TILEPro): New section.
* common/config/tilegx: New directory for tilegx.
* common/config/tilepro: New directory for tilepro.
* config/tilegx: New directory for tilegx.
* config/tilepro: New directory for tilepro.

gcc/testsuite
* g++.dg/other/PR23205.C: Disable test on tile.
* g++.dg/other/pr23205-2.C: Disable test on tile.
* gcc.dg/20020312-2.c: Add a condition for __tile__.
* gcc.dg/20040813-1.c: Disable test on tile.
* gcc.dg/lower-subreg-1.c: Disable test on tilegx.
* gcc.misc-tests/linkage.exp: Handle tilegx.

libcpp
* configure.ac: Require 64-bit hwint for tilegx and tilepro.
* configure: Regenerate.

libgcc
* config.host: Handle tilegx and tilepro.
* config/tilegx: New directory for tilegx.
* config/tilepro: New directory for tilepro.

libgomp
* configure.tgt: Handle tilegx and tilepro.
* config/linux/tile: New directory for tilegx and tilepro.

Added:
     trunk/gcc/common/config/tilegx/tilegx-common.c
     trunk/gcc/common/config/tilepro/tilepro-common.c
     trunk/gcc/config/tilegx/constraints.md
     trunk/gcc/config/tilegx/linux.h
     trunk/gcc/config/tilegx/mul-tables.c
     trunk/gcc/config/tilegx/predicates.md
     trunk/gcc/config/tilegx/sync.md
     trunk/gcc/config/tilegx/t-tilegx
     trunk/gcc/config/tilegx/tilegx-builtins.h
     trunk/gcc/config/tilegx/tilegx-c.c
     trunk/gcc/config/tilegx/tilegx-generic.md
     trunk/gcc/config/tilegx/tilegx-modes.def
     trunk/gcc/config/tilegx/tilegx-multiply.h
     trunk/gcc/config/tilegx/tilegx-protos.h
     trunk/gcc/config/tilegx/tilegx.c
     trunk/gcc/config/tilegx/tilegx.h
     trunk/gcc/config/tilegx/tilegx.md
     trunk/gcc/config/tilegx/tilegx.opt
     trunk/gcc/config/tilepro/constraints.md
     trunk/gcc/config/tilepro/gen-mul-tables.cc
     trunk/gcc/config/tilepro/linux.h
     trunk/gcc/config/tilepro/mul-tables.c
     trunk/gcc/config/tilepro/predicates.md
     trunk/gcc/config/tilepro/t-tilepro
     trunk/gcc/config/tilepro/tilepro-builtins.h
     trunk/gcc/config/tilepro/tilepro-c.c
     trunk/gcc/config/tilepro/tilepro-generic.md
     trunk/gcc/config/tilepro/tilepro-modes.def
     trunk/gcc/config/tilepro/tilepro-multiply.h
     trunk/gcc/config/tilepro/tilepro-protos.h
     trunk/gcc/config/tilepro/tilepro.c
     trunk/gcc/config/tilepro/tilepro.h
     trunk/gcc/config/tilepro/tilepro.md
     trunk/gcc/config/tilepro/tilepro.opt
     trunk/libgcc/config/tilegx/sfp-machine.h
     trunk/libgcc/config/tilegx/sfp-machine32.h
     trunk/libgcc/config/tilegx/sfp-machine64.h
     trunk/libgcc/config/tilegx/t-crtstuff
     trunk/libgcc/config/tilegx/t-softfp
     trunk/libgcc/config/tilegx/t-tilegx
     trunk/libgcc/config/tilepro/atomic.c
     trunk/libgcc/config/tilepro/atomic.h
     trunk/libgcc/config/tilepro/linux-unwind.h
     trunk/libgcc/config/tilepro/sfp-machine.h
     trunk/libgcc/config/tilepro/softdivide.c
     trunk/libgcc/config/tilepro/softmpy.S
     trunk/libgcc/config/tilepro/t-crtstuff
     trunk/libgcc/config/tilepro/t-tilepro
     trunk/libgomp/config/linux/tile/futex.h
Modified:
     trunk/MAINTAINERS
     trunk/contrib/config-list.mk
     trunk/contrib/gcc_update
     trunk/gcc/config.gcc
     trunk/gcc/configure
     trunk/gcc/configure.ac
     trunk/gcc/doc/contrib.texi
     trunk/gcc/doc/extend.texi
     trunk/gcc/doc/install.texi
     trunk/gcc/doc/invoke.texi
     trunk/gcc/doc/md.texi
     trunk/gcc/testsuite/g++.dg/other/PR23205.C
     trunk/gcc/testsuite/g++.dg/other/pr23205-2.C
     trunk/gcc/testsuite/gcc.dg/20020312-2.c
     trunk/gcc/testsuite/gcc.dg/20040813-1.c
     trunk/gcc/testsuite/gcc.dg/lower-subreg-1.c
     trunk/gcc/testsuite/gcc.misc-tests/linkage.exp
     trunk/libcpp/configure
     trunk/libcpp/configure.ac
     trunk/libgcc/config.host
     trunk/libgomp/configure.tgt

From-SVN: r184203

77 files changed:
ChangeLog
MAINTAINERS
contrib/ChangeLog
contrib/config-list.mk
contrib/gcc_update
gcc/ChangeLog
gcc/common/config/tilegx/tilegx-common.c [new file with mode: 0644]
gcc/common/config/tilepro/tilepro-common.c [new file with mode: 0644]
gcc/config.gcc
gcc/config/tilegx/constraints.md [new file with mode: 0644]
gcc/config/tilegx/linux.h [new file with mode: 0644]
gcc/config/tilegx/mul-tables.c [new file with mode: 0644]
gcc/config/tilegx/predicates.md [new file with mode: 0644]
gcc/config/tilegx/sync.md [new file with mode: 0644]
gcc/config/tilegx/t-tilegx [new file with mode: 0644]
gcc/config/tilegx/tilegx-builtins.h [new file with mode: 0644]
gcc/config/tilegx/tilegx-c.c [new file with mode: 0644]
gcc/config/tilegx/tilegx-generic.md [new file with mode: 0644]
gcc/config/tilegx/tilegx-modes.def [new file with mode: 0644]
gcc/config/tilegx/tilegx-multiply.h [new file with mode: 0644]
gcc/config/tilegx/tilegx-protos.h [new file with mode: 0644]
gcc/config/tilegx/tilegx.c [new file with mode: 0644]
gcc/config/tilegx/tilegx.h [new file with mode: 0644]
gcc/config/tilegx/tilegx.md [new file with mode: 0644]
gcc/config/tilegx/tilegx.opt [new file with mode: 0644]
gcc/config/tilepro/constraints.md [new file with mode: 0644]
gcc/config/tilepro/gen-mul-tables.cc [new file with mode: 0644]
gcc/config/tilepro/linux.h [new file with mode: 0644]
gcc/config/tilepro/mul-tables.c [new file with mode: 0644]
gcc/config/tilepro/predicates.md [new file with mode: 0644]
gcc/config/tilepro/t-tilepro [new file with mode: 0644]
gcc/config/tilepro/tilepro-builtins.h [new file with mode: 0644]
gcc/config/tilepro/tilepro-c.c [new file with mode: 0644]
gcc/config/tilepro/tilepro-generic.md [new file with mode: 0644]
gcc/config/tilepro/tilepro-modes.def [new file with mode: 0644]
gcc/config/tilepro/tilepro-multiply.h [new file with mode: 0644]
gcc/config/tilepro/tilepro-protos.h [new file with mode: 0644]
gcc/config/tilepro/tilepro.c [new file with mode: 0644]
gcc/config/tilepro/tilepro.h [new file with mode: 0644]
gcc/config/tilepro/tilepro.md [new file with mode: 0644]
gcc/config/tilepro/tilepro.opt [new file with mode: 0644]
gcc/configure
gcc/configure.ac
gcc/doc/contrib.texi
gcc/doc/extend.texi
gcc/doc/install.texi
gcc/doc/invoke.texi
gcc/doc/md.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/PR23205.C
gcc/testsuite/g++.dg/other/pr23205-2.C
gcc/testsuite/gcc.dg/20020312-2.c
gcc/testsuite/gcc.dg/20040813-1.c
gcc/testsuite/gcc.dg/lower-subreg-1.c
gcc/testsuite/gcc.misc-tests/linkage.exp
libcpp/ChangeLog
libcpp/configure
libcpp/configure.ac
libgcc/ChangeLog
libgcc/config.host
libgcc/config/tilegx/sfp-machine.h [new file with mode: 0644]
libgcc/config/tilegx/sfp-machine32.h [new file with mode: 0644]
libgcc/config/tilegx/sfp-machine64.h [new file with mode: 0644]
libgcc/config/tilegx/t-crtstuff [new file with mode: 0644]
libgcc/config/tilegx/t-softfp [new file with mode: 0644]
libgcc/config/tilegx/t-tilegx [new file with mode: 0644]
libgcc/config/tilepro/atomic.c [new file with mode: 0644]
libgcc/config/tilepro/atomic.h [new file with mode: 0644]
libgcc/config/tilepro/linux-unwind.h [new file with mode: 0644]
libgcc/config/tilepro/sfp-machine.h [new file with mode: 0644]
libgcc/config/tilepro/softdivide.c [new file with mode: 0644]
libgcc/config/tilepro/softmpy.S [new file with mode: 0644]
libgcc/config/tilepro/t-crtstuff [new file with mode: 0644]
libgcc/config/tilepro/t-tilepro [new file with mode: 0644]
libgomp/ChangeLog
libgomp/config/linux/tile/futex.h [new file with mode: 0644]
libgomp/configure.tgt

index 43a18dee0f89aa9014ec38163fba500aba2357ca..3a14fa7b6d52bc711453e063e4b68d1f11d0ef41 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,8 @@
 2012-02-14  Walter Lee  <walt@tilera.com>
 
-       * MAINTAINERS (Write After Approval): Add myself.
+       * MAINTAINERS (tilegx port): Add myself.
+       (tilepro port): Add myself.
+       (Write After Approval): Add myself.
 
 2012-02-12  Gerald Pfeifer  <gerald@pfeifer.com>
 
index aeb2a1444dd21cf0bf0ddb1f8d9cda3476542f05..2c8f466bc6e08c8f3bdb965811c16373c18e8639 100644 (file)
@@ -104,6 +104,8 @@ sparc port          Eric Botcazou           ebotcazou@libertysurf.fr
 spu port               Trevor Smigiel          trevor_smigiel@playstation.sony.com
 spu port               David Edelsohn          dje.gcc@gmail.com
 spu port               Ulrich Weigand          uweigand@de.ibm.com
+tilegx port            Walter Lee              walt@tilera.com
+tilepro port           Walter Lee              walt@tilera.com
 v850 port              Nick Clifton            nickc@redhat.com
 vax port               Matt Thomas             matt@3am-software.com
 x86-64 port            Jan Hubicka             jh@suse.cz
index 6386f083ea5757016d6556bf738e4a0ecf01cf0b..789f345e0f537e907b227f6884bf4d5df09f3ee9 100644 (file)
@@ -1,3 +1,10 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * config-list.mk (LIST): Add tilegx-linux-gnu and
+       tilepro-linux-gnu.
+       * gcc_update (gcc/config/tilegx/mul-tables.c): New dependencies.
+       (gcc/config/tilepro/mul-tables.c): New dependencies.
+
 2012-02-11  Mike Stump  <mikestump@comcast.net>
 
        * compare_tests (exit_status): Fix.
index e0e8554351f40868e5613d1a263f18ef820de2fc..108f84d85cf7c595b5a1e3dec45e11e126865bb4 100644 (file)
@@ -60,7 +60,8 @@ LIST = alpha-linux-gnu alpha-freebsd6 alpha-netbsd alpha-openbsd \
   sparc-leon3-linux-gnuOPT-enable-target=all sparc-netbsdelf \
   sparc64-sun-solaris2.10OPT-with-gnu-ldOPT-with-gnu-asOPT-enable-threads=posix \
   sparc-wrs-vxworks sparc64-elf sparc64-rtems sparc64-linux sparc64-freebsd6 \
-  sparc64-netbsd sparc64-openbsd spu-elf v850e-elf v850-elf vax-linux-gnu \
+  sparc64-netbsd sparc64-openbsd spu-elf tilegx-linux-gnu tilepro-linux-gnu \
+  v850e-elf v850-elf vax-linux-gnu \
   vax-netbsdelf vax-openbsd x86_64-apple-darwin \
   x86_64-pc-linux-gnuOPT-with-fpmath=avx \
   x86_64-elfOPT-with-fpmath=sse x86_64-freebsd6 x86_64-netbsd \
index 364a1a240980aa5223af055fc8a2c7669c67da63..0289d9b2663dde2bb3152b4d72b1a85d26565bc5 100755 (executable)
@@ -90,6 +90,8 @@ gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult
 gcc/config/m68k/m68k-tables.opt: gcc/config/m68k/m68k-devices.def gcc/config/m68k/m68k-isas.def gcc/config/m68k/m68k-microarchs.def gcc/config/m68k/genopt.sh
 gcc/config/mips/mips-tables.opt: gcc/config/mips/mips-cpus.def gcc/config/mips/genopt.sh
 gcc/config/rs6000/rs6000-tables.opt: gcc/config/rs6000/rs6000-cpus.def gcc/config/rs6000/genopt.sh
+gcc/config/tilegx/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
+gcc/config/tilepro/mul-tables.c: gcc/config/tilepro/gen-mul-tables.cc
 # And then, language-specific files
 gcc/cp/cfns.h: gcc/cp/cfns.gperf
 gcc/java/keyword.h: gcc/java/keyword.gperf
index 863952c343e9b11c94088aae2eb01f14b36e0f5d..eca470c3cc87eb78e782b0aac507eea900d9a7f3 100644 (file)
@@ -1,3 +1,56 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * config.gcc: Handle tilegx and tilepro.
+       * configure.ac (gcc_cv_as_dwarf2_debug_line): Enable test for
+       tilegx and tilepro.
+       Add HAVE_AS_TLS check for tilegx and tilepro.
+       * configure: Regenerate.
+       * doc/contrib.texi: Add Mat Hostetter and self.
+       * doc/extend.texi (TILE-Gx Built-in Functions): New node.
+       Document instruction intrinsics and network accessing intrinsics.
+       (TILEPro Built-in Functions): New node.  Document instruction
+       intrinsics and network accessing intrinsics.
+       * doc/install.texi (Specific, tilegx-*-linux*): Document it.
+       (Specific, tilepro-*-linux*): Likewise.
+       * doc/invoke.texi (TILE-Gx Options): New section.
+       (TILEPro Options): New section.
+       * doc/md.texi (TILE-Gx): New section.
+       (TILEPro): New section.
+       * common/config/tilegx/tilegx-common.c: New file.
+       * common/config/tilepro/tilepro-common.c: New file.
+       * config/tilegx/constraints.md: New file.
+       * config/tilegx/linux.h: New file.
+       * config/tilegx/mul-tables.c: New file.
+       * config/tilegx/predicates.md: New file.
+       * config/tilegx/sync.md: New file.
+       * config/tilegx/t-tilegx: New file.
+       * config/tilegx/tilegx-builtins.h: New file.
+       * config/tilegx/tilegx-c.c: New file.
+       * config/tilegx/tilegx-generic.md: New file.
+       * config/tilegx/tilegx-modes.def: New file.
+       * config/tilegx/tilegx-multiply.h: New file.
+       * config/tilegx/tilegx-protos.h: New file.
+       * config/tilegx/tilegx.c: New file.
+       * config/tilegx/tilegx.h: New file.
+       * config/tilegx/tilegx.md: New file.
+       * config/tilegx/tilegx.opt: New file.
+       * config/tilepro/constraints.md: New file.
+       * config/tilepro/gen-mul-tables.cc: New file.
+       * config/tilepro/linux.h: New file.
+       * config/tilepro/mul-tables.c: New file.
+       * config/tilepro/predicates.md: New file.
+       * config/tilepro/t-tilepro: New file.
+       * config/tilepro/tilepro-builtins.h: New file.
+       * config/tilepro/tilepro-c.c: New file.
+       * config/tilepro/tilepro-generic.md: New file.
+       * config/tilepro/tilepro-modes.def: New file.
+       * config/tilepro/tilepro-multiply.h: New file.
+       * config/tilepro/tilepro-protos.h: New file.
+       * config/tilepro/tilepro.c: New file.
+       * config/tilepro/tilepro.h: New file.
+       * config/tilepro/tilepro.md: New file.
+       * config/tilepro/tilepro.opt: New file.
+
 2012-02-14  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/52210
diff --git a/gcc/common/config/tilegx/tilegx-common.c b/gcc/common/config/tilegx/tilegx-common.c
new file mode 100644 (file)
index 0000000..7ee29b7
--- /dev/null
@@ -0,0 +1,55 @@
+/* Common hooks for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "diagnostic-core.h"
+#include "tm.h"
+#include "common/common-target.h"
+#include "common/common-target-def.h"
+#include "opts.h"
+#include "flags.h"
+
+static const struct default_options tilegx_option_optimization_table[] = {
+  {OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1},
+  /* Scheduling and bundling are super important for our architecture, so
+     enable them at -O1. */
+  {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1},
+  {OPT_LEVELS_1_PLUS, OPT_fschedule_insns2, NULL, 1},
+  {OPT_LEVELS_NONE, 0, NULL, 0}
+};
+
+
+static void
+tilegx_option_init_struct (struct gcc_options *opts)
+{
+  opts->x_flag_asynchronous_unwind_tables = 1;
+}
+
+
+#undef  TARGET_OPTION_OPTIMIZATION_TABLE
+#define TARGET_OPTION_OPTIMIZATION_TABLE tilegx_option_optimization_table
+
+#undef  TARGET_OPTION_INIT_STRUCT
+#define TARGET_OPTION_INIT_STRUCT tilegx_option_init_struct
+
+struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
diff --git a/gcc/common/config/tilepro/tilepro-common.c b/gcc/common/config/tilepro/tilepro-common.c
new file mode 100644 (file)
index 0000000..01ceb7f
--- /dev/null
@@ -0,0 +1,56 @@
+/* Common hooks for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "diagnostic-core.h"
+#include "tm.h"
+#include "common/common-target.h"
+#include "common/common-target-def.h"
+#include "opts.h"
+#include "flags.h"
+
+static const struct default_options tilepro_option_optimization_table[] = {
+  {OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1},
+  /* Scheduling and bundling are super important for our architecture, so
+     enable them at -O1. */
+  {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1},
+  {OPT_LEVELS_1_PLUS, OPT_fschedule_insns2, NULL, 1},
+  {OPT_LEVELS_NONE, 0, NULL, 0}
+};
+
+
+static void
+tilepro_option_init_struct (struct gcc_options *opts)
+{
+  opts->x_flag_asynchronous_unwind_tables = 1;
+}
+
+
+
+#undef  TARGET_OPTION_OPTIMIZATION_TABLE
+#define TARGET_OPTION_OPTIMIZATION_TABLE tilepro_option_optimization_table
+
+#undef  TARGET_OPTION_INIT_STRUCT
+#define TARGET_OPTION_INIT_STRUCT tilepro_option_init_struct
+
+struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
index 65a423a0f965074a7b8ddbf3f2239d91c1d25674..bdd5eb3189040066bb5c91f8663a8e455dbe07e2 100644 (file)
@@ -448,6 +448,14 @@ tic6x-*-*)
 xtensa*-*-*)
        extra_options="${extra_options} fused-madd.opt"
        ;;
+tilegx*-*-*)
+       cpu_type=tilegx
+       need_64bit_hwint=yes
+       ;;
+tilepro-*-*)
+       cpu_type=tilepro
+       need_64bit_hwint=yes
+       ;;
 esac
 
 tm_file=${cpu_type}/${cpu_type}.h
@@ -2468,6 +2476,20 @@ tic6x-*-uclinux)
        tmake_file="${tmake_file} c6x/t-c6x c6x/t-c6x-elf c6x/t-c6x-uclinux"
        use_collect2=no
        ;;
+tilegx-*-linux*)
+       tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilegx/linux.h ${tm_file}"
+        tmake_file="${tmake_file} tilegx/t-tilegx"
+       extra_objs="mul-tables.o"
+       c_target_objs="tilegx-c.o"
+       cxx_target_objs="tilegx-c.o"
+       ;;
+tilepro-*-linux*)
+       tm_file="elfos.h gnu-user.h linux.h glibc-stdint.h tilepro/linux.h ${tm_file}"
+        tmake_file="${tmake_file} tilepro/t-tilepro"
+       extra_objs="mul-tables.o"
+       c_target_objs="tilepro-c.o"
+       cxx_target_objs="tilepro-c.o"
+       ;;
 v850*-*-*)
        case ${target} in
        v850e2v3-*-*)
diff --git a/gcc/config/tilegx/constraints.md b/gcc/config/tilegx/constraints.md
new file mode 100644 (file)
index 0000000..fcbd220
--- /dev/null
@@ -0,0 +1,123 @@
+;; Constraint definitions for Tilera TILE-Gx.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_register_constraint "R00" "R0_REGS"  "r0")
+(define_register_constraint "R01" "R1_REGS"  "r1")
+(define_register_constraint "R02" "R2_REGS"  "r2")
+(define_register_constraint "R03" "R3_REGS"  "r3")
+(define_register_constraint "R04" "R4_REGS"  "r4")
+(define_register_constraint "R05" "R5_REGS"  "r5")
+(define_register_constraint "R06" "R6_REGS"  "r6")
+(define_register_constraint "R07" "R7_REGS"  "r7")
+(define_register_constraint "R08" "R8_REGS"  "r8")
+(define_register_constraint "R09" "R9_REGS"  "r9")
+(define_register_constraint "R10" "R10_REGS" "r10")
+
+(define_constraint "I"
+  "A signed 8 bit constant"
+  (and (match_code "const_int")
+       (match_test "ival >= -128 && ival <= 127")))
+
+(define_constraint "J"
+  "Signed 16-bit integer constant"
+  (and (match_code "const_int")
+       (match_test "ival >= -32768 && ival <= 32767")))
+
+(define_constraint "K"
+  "Unsigned 16-bit integer constant"
+  (and (match_code "const_int")
+       (match_test "(ival >= 0 && ival <= 65535)")))
+
+(define_constraint "L"
+  "Integer constant that fits in one signed byte when incremented"
+  (and (match_code "const_int")
+       (match_test "ival >= -129 && ival <= 126")))
+
+(define_constraint "M"
+  "A bit mask suitable for 'bfins'"
+  (and (match_code "const_int")
+       (match_test "tilegx_bitfield_operand_p (ival, NULL, NULL)")))
+
+(define_constraint "N"
+  "Integer constant that is a byte tiled out eight times"
+  (and (match_code "const_int")
+       (match_test "(ival == (ival & 0xFF) * 0x0101010101010101LL)")))
+
+(define_constraint "O"
+ "The integer zero constant"
+ (and (match_code "const_int")
+      (match_test "ival == 0")))
+
+(define_constraint "P"
+  "Integer constant that is a sign-extended byte tiled out as four shorts"
+  (and (match_code "const_int")
+       (match_test "(ival
+                     == ((trunc_int_for_mode (ival, QImode) & 0xFFFF)
+                         * 0x0001000100010001LL))")))
+
+(define_constraint "Q"
+  "Integer constant that fits in one signed byte when incremented, but not -1"
+  (and (match_code "const_int")
+       (match_test "ival >= -129 && ival <= 126 && ival != -1")))
+
+(define_constraint "S"
+  "Integer constant that has all 1 bits consecutive and starting at bit 0"
+  (and (match_code "const_int")
+       (match_test "ival != 0 && (ival & (ival + 1)) == 0")))
+
+(define_constraint "T"
+  "An unspec wrapper for a symbolc operand"
+  (ior (match_operand 0 "const_last_symbolic_operand")
+       (match_operand 0 "const_symbolic_operand")))
+
+(define_memory_constraint "U"
+  "Non-auto-incrementing memory"
+  (and (match_code "mem")
+       (match_test "GET_RTX_CLASS (GET_CODE (XEXP (op, 0))) != RTX_AUTOINC")))
+
+(define_constraint "W"
+  "An 8-element vector constant with identical elements"
+  (and (match_code "const_vector")
+       (match_test "CONST_VECTOR_NUNITS (op) == 8")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 4)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 5)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 6)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 7)")))
+
+(define_constraint "Y"
+  "A 4-element vector constant with identical elements"
+  (and (match_code "const_vector")
+       (match_test "CONST_VECTOR_NUNITS (op) == 4")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)")))
+(define_constraint "Z0"
+ "The integer constant 0xffffffff"
+ (and (match_code "const_int")
+      (match_test "ival == 0xffffffff")))
+
+(define_constraint "Z1"
+ "The integer constant 0xffffffff00000000"
+ (and (match_code "const_int")
+      (match_test "ival == (HOST_WIDE_INT)0xffffffff00000000LL")))
diff --git a/gcc/config/tilegx/linux.h b/gcc/config/tilegx/linux.h
new file mode 100644 (file)
index 0000000..b42e2bb
--- /dev/null
@@ -0,0 +1,72 @@
+/* Definitions for TILE-Gx running Linux-based GNU systems with ELF.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#undef CPP_SPEC
+#define CPP_SPEC "%{pthread:-D_REENTRANT}"
+
+#undef ASM_SPEC
+#define ASM_SPEC "%{m32:--32} %{m64:--64}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "%{m64:-m elf64tilegx} %{m32:-m elf32tilegx} \
+  %{shared:-shared} \
+  %{!shared: \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      -dynamic-linker \
+        %{ m32: /lib32/ld.so.1} \
+        %{!m32: /lib/ld.so.1}} \
+    %{static:-static}}"
+
+#define MULTILIB_DEFAULTS { "m64" }
+
+#define NO_PROFILE_COUNTERS    1
+
+#undef MCOUNT_NAME
+#define MCOUNT_NAME "__mcount"
+
+#undef NEED_INDICATE_EXEC_STACK
+#define NEED_INDICATE_EXEC_STACK 1
+
+#ifdef TARGET_LIBC_PROVIDES_SSP
+/* TILE-Gx glibc provides __stack_chk_guard two pointer-size words before
+   tp. */
+#define TARGET_THREAD_SSP_OFFSET (-2 * GET_MODE_SIZE (ptr_mode))
+#endif
+
+/* For __clear_cache in libgcc2.c.  */
+#ifdef IN_LIBGCC2
+
+#include <arch/icache.h>
+
+/* Use the minimum page size of 4K.  Alternatively we can call
+   getpagesize() but it introduces a libc dependence.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE(beg, end) invalidate_icache (beg, end - beg, 4096)
+
+#else
+
+/* define CLEAR_INSN_CACHE so that gcc knows to expand __builtin__clear_cache
+   to the libraray call.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE 1
+
+#endif
diff --git a/gcc/config/tilegx/mul-tables.c b/gcc/config/tilegx/mul-tables.c
new file mode 100644 (file)
index 0000000..b7d171f
--- /dev/null
@@ -0,0 +1,27244 @@
+/* Constant multiply table for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "expr.h"
+#include "optabs.h"
+#include "tilegx-multiply.h"
+
+const enum insn_code tilegx_multiply_insn_seq_decode_opcode[] = {
+  CODE_FOR_nothing /* must be first */ ,
+  CODE_FOR_adddi3,
+  CODE_FOR_subdi3,
+  CODE_FOR_insn_shl1add,
+  CODE_FOR_insn_shl2add,
+  CODE_FOR_insn_shl3add,
+  CODE_FOR_ashldi3
+};
+
+const struct tilegx_multiply_insn_seq tilegx_multiply_insn_seq_table[] = {
+  {-9223372036854775807ll - 1 /* 0x8000000000000000 */ ,
+   {{6, 1, 63}}                        /* shli r2, r1, 63 */
+   },
+  {-9223372036854775807ll /* 0x8000000000000001 */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {-9223372036854775806ll /* 0x8000000000000002 */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {-9223372036854775805ll /* 0x8000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775804ll /* 0x8000000000000004 */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {-9223372036854775803ll /* 0x8000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775802ll /* 0x8000000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-9223372036854775801ll /* 0x8000000000000007 */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {-9223372036854775800ll /* 0x8000000000000008 */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {-9223372036854775799ll /* 0x8000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775798ll /* 0x800000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-9223372036854775792ll /* 0x8000000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775776ll /* 0x8000000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775744ll /* 0x8000000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775680ll /* 0x8000000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775552ll /* 0x8000000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854775296ll /* 0x8000000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854774784ll /* 0x8000000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854773760ll /* 0x8000000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854771712ll /* 0x8000000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854767616ll /* 0x8000000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854759424ll /* 0x8000000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854743040ll /* 0x8000000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854710272ll /* 0x8000000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854644736ll /* 0x8000000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854513664ll /* 0x8000000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036854251520ll /* 0x8000000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036853727232ll /* 0x8000000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036852678656ll /* 0x8000000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036850581504ll /* 0x8000000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036846387200ll /* 0x8000000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036837998592ll /* 0x8000000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036821221376ll /* 0x8000000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036787666944ll /* 0x8000000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036720558080ll /* 0x8000000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036586340352ll /* 0x8000000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372036317904896ll /* 0x8000000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372035781033984ll /* 0x8000000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372034707292160ll /* 0x8000000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372032559808512ll /* 0x8000000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372028264841216ll /* 0x8000000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372019674906624ll /* 0x8000000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223372002495037440ll /* 0x8000000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223371968135299072ll /* 0x8000001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223371899415822336ll /* 0x8000002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223371761976868864ll /* 0x8000004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223371487098961920ll /* 0x8000008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223370937343148032ll /* 0x8000010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223369837831520256ll /* 0x8000020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223367638808264704ll /* 0x8000040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223363240761753600ll /* 0x8000080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223354444668731392ll /* 0x8000100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223336852482686976ll /* 0x8000200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223301668110598144ll /* 0x8000400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223231299366420480ll /* 0x8000800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9223090561878065152ll /* 0x8001000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9222809086901354496ll /* 0x8002000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9222246136947933184ll /* 0x8004000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9221120237041090560ll /* 0x8008000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9218868437227405312ll /* 0x8010000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9214364837600034816ll /* 0x8020000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9205357638345293824ll /* 0x8040000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9187343239835811840ll /* 0x8080000000000000 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9151314442816847872ll /* 0x8100000000000000 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-9079256848778919936ll /* 0x8200000000000000 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-8935141660703064064ll /* 0x8400000000000000 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-8646911284551352320ll /* 0x8800000000000000 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-8070450532247928832ll /* 0x9000000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 60}}                        /* shli r3, r2, 60 */
+   },
+  {-6917529027641081857ll /* 0x9fffffffffffffff */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 61},                        /* shli r3, r2, 61 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {-6917529027641081856ll /* 0xa000000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 61}}                        /* shli r3, r2, 61 */
+   },
+  {-4611686018427387912ll /* 0xbffffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 62},                        /* shli r3, r2, 62 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4611686018427387911ll /* 0xbffffffffffffff9 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4611686018427387908ll /* 0xbffffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 62},                        /* shli r3, r2, 62 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4611686018427387907ll /* 0xbffffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 62},                        /* shli r3, r2, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {-4611686018427387906ll /* 0xbffffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 62},                        /* shli r3, r2, 62 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4611686018427387905ll /* 0xbfffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387904ll /* 0xc000000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 62}}                        /* shli r3, r2, 62 */
+   },
+  {-4611686018427387903ll /* 0xc000000000000001 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4611686018427387902ll /* 0xc000000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387901ll /* 0xc000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387900ll /* 0xc000000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387899ll /* 0xc000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387898ll /* 0xc000000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 62},                        /* shli r3, r2, 62 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4611686018427387896ll /* 0xc000000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4611686018427387895ll /* 0xc000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3458764513820540929ll /* 0xcfffffffffffffff */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693960ll /* 0xdffffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 61},                        /* shli r3, r2, 61 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2305843009213693959ll /* 0xdffffffffffffff9 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2305843009213693956ll /* 0xdffffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 61},                        /* shli r3, r2, 61 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2305843009213693955ll /* 0xdffffffffffffffd */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2305843009213693954ll /* 0xdffffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 61},                        /* shli r3, r2, 61 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2305843009213693953ll /* 0xdfffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693952ll /* 0xe000000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 61}}                        /* shli r3, r2, 61 */
+   },
+  {-2305843009213693951ll /* 0xe000000000000001 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2305843009213693950ll /* 0xe000000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693949ll /* 0xe000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693948ll /* 0xe000000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693947ll /* 0xe000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693944ll /* 0xe000000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2305843009213693943ll /* 0xe000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1729382256910270465ll /* 0xe7ffffffffffffff */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846984ll /* 0xeffffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 60},                        /* shli r3, r2, 60 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1152921504606846983ll /* 0xeffffffffffffff9 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1152921504606846980ll /* 0xeffffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 60},                        /* shli r3, r2, 60 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1152921504606846979ll /* 0xeffffffffffffffd */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1152921504606846978ll /* 0xeffffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 60},                        /* shli r3, r2, 60 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1152921504606846977ll /* 0xefffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846976ll /* 0xf000000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 60}}                        /* shli r3, r2, 60 */
+   },
+  {-1152921504606846975ll /* 0xf000000000000001 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1152921504606846974ll /* 0xf000000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846973ll /* 0xf000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846972ll /* 0xf000000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846971ll /* 0xf000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846968ll /* 0xf000000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1152921504606846967ll /* 0xf000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-864691128455135233ll /* 0xf3ffffffffffffff */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423496ll /* 0xf7fffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 59},                        /* shli r3, r2, 59 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-576460752303423495ll /* 0xf7fffffffffffff9 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-576460752303423492ll /* 0xf7fffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 59},                        /* shli r3, r2, 59 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-576460752303423491ll /* 0xf7fffffffffffffd */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-576460752303423490ll /* 0xf7fffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 59},                        /* shli r3, r2, 59 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-576460752303423489ll /* 0xf7ffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423488ll /* 0xf800000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 59}}                        /* shli r3, r2, 59 */
+   },
+  {-576460752303423487ll /* 0xf800000000000001 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-576460752303423486ll /* 0xf800000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423485ll /* 0xf800000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423484ll /* 0xf800000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423483ll /* 0xf800000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423480ll /* 0xf800000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-576460752303423479ll /* 0xf800000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-432345564227567617ll /* 0xf9ffffffffffffff */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711752ll /* 0xfbfffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 58},                        /* shli r3, r2, 58 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-288230376151711751ll /* 0xfbfffffffffffff9 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-288230376151711748ll /* 0xfbfffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 58},                        /* shli r3, r2, 58 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-288230376151711747ll /* 0xfbfffffffffffffd */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-288230376151711746ll /* 0xfbfffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 58},                        /* shli r3, r2, 58 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-288230376151711745ll /* 0xfbffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711744ll /* 0xfc00000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 58}}                        /* shli r3, r2, 58 */
+   },
+  {-288230376151711743ll /* 0xfc00000000000001 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-288230376151711742ll /* 0xfc00000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711741ll /* 0xfc00000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711740ll /* 0xfc00000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711739ll /* 0xfc00000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711736ll /* 0xfc00000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-288230376151711735ll /* 0xfc00000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-216172782113783809ll /* 0xfcffffffffffffff */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855880ll /* 0xfdfffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 57},                        /* shli r3, r2, 57 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-144115188075855879ll /* 0xfdfffffffffffff9 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-144115188075855876ll /* 0xfdfffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 57},                        /* shli r3, r2, 57 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-144115188075855875ll /* 0xfdfffffffffffffd */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-144115188075855874ll /* 0xfdfffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 57},                        /* shli r3, r2, 57 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-144115188075855873ll /* 0xfdffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855872ll /* 0xfe00000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 57}}                        /* shli r3, r2, 57 */
+   },
+  {-144115188075855871ll /* 0xfe00000000000001 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-144115188075855870ll /* 0xfe00000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855869ll /* 0xfe00000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855868ll /* 0xfe00000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855867ll /* 0xfe00000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855864ll /* 0xfe00000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-144115188075855863ll /* 0xfe00000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-108086391056891905ll /* 0xfe7fffffffffffff */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927944ll /* 0xfefffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 56},                        /* shli r3, r2, 56 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-72057594037927943ll /* 0xfefffffffffffff9 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-72057594037927940ll /* 0xfefffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 56},                        /* shli r3, r2, 56 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-72057594037927939ll /* 0xfefffffffffffffd */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-72057594037927938ll /* 0xfefffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 56},                        /* shli r3, r2, 56 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-72057594037927937ll /* 0xfeffffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927936ll /* 0xff00000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 56}}                        /* shli r3, r2, 56 */
+   },
+  {-72057594037927935ll /* 0xff00000000000001 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-72057594037927934ll /* 0xff00000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927933ll /* 0xff00000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927932ll /* 0xff00000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927931ll /* 0xff00000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927928ll /* 0xff00000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-72057594037927927ll /* 0xff00000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-54043195528445953ll /* 0xff3fffffffffffff */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963976ll /* 0xff7ffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 55},                        /* shli r3, r2, 55 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-36028797018963975ll /* 0xff7ffffffffffff9 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-36028797018963972ll /* 0xff7ffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 55},                        /* shli r3, r2, 55 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-36028797018963971ll /* 0xff7ffffffffffffd */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-36028797018963970ll /* 0xff7ffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 55},                        /* shli r3, r2, 55 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-36028797018963969ll /* 0xff7fffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963968ll /* 0xff80000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 55}}                        /* shli r3, r2, 55 */
+   },
+  {-36028797018963967ll /* 0xff80000000000001 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-36028797018963966ll /* 0xff80000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963965ll /* 0xff80000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963964ll /* 0xff80000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963963ll /* 0xff80000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963960ll /* 0xff80000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-36028797018963959ll /* 0xff80000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-27021597764222977ll /* 0xff9fffffffffffff */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481992ll /* 0xffbffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 54},                        /* shli r3, r2, 54 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-18014398509481991ll /* 0xffbffffffffffff9 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-18014398509481988ll /* 0xffbffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 54},                        /* shli r3, r2, 54 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-18014398509481987ll /* 0xffbffffffffffffd */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-18014398509481986ll /* 0xffbffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 54},                        /* shli r3, r2, 54 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-18014398509481985ll /* 0xffbfffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481984ll /* 0xffc0000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 54}}                        /* shli r3, r2, 54 */
+   },
+  {-18014398509481983ll /* 0xffc0000000000001 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-18014398509481982ll /* 0xffc0000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481981ll /* 0xffc0000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481980ll /* 0xffc0000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481979ll /* 0xffc0000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481976ll /* 0xffc0000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-18014398509481975ll /* 0xffc0000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-13510798882111489ll /* 0xffcfffffffffffff */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254741000ll /* 0xffdffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 53},                        /* shli r3, r2, 53 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-9007199254740999ll /* 0xffdffffffffffff9 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-9007199254740996ll /* 0xffdffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 53},                        /* shli r3, r2, 53 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-9007199254740995ll /* 0xffdffffffffffffd */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-9007199254740994ll /* 0xffdffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 53},                        /* shli r3, r2, 53 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-9007199254740993ll /* 0xffdfffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740992ll /* 0xffe0000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 53}}                        /* shli r3, r2, 53 */
+   },
+  {-9007199254740991ll /* 0xffe0000000000001 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-9007199254740990ll /* 0xffe0000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740989ll /* 0xffe0000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740988ll /* 0xffe0000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740987ll /* 0xffe0000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740984ll /* 0xffe0000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9007199254740983ll /* 0xffe0000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-6755399441055745ll /* 0xffe7ffffffffffff */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370504ll /* 0xffeffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 52},                        /* shli r3, r2, 52 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4503599627370503ll /* 0xffeffffffffffff9 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4503599627370500ll /* 0xffeffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 52},                        /* shli r3, r2, 52 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4503599627370499ll /* 0xffeffffffffffffd */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4503599627370498ll /* 0xffeffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 52},                        /* shli r3, r2, 52 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4503599627370497ll /* 0xffefffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370496ll /* 0xfff0000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 52}}                        /* shli r3, r2, 52 */
+   },
+  {-4503599627370495ll /* 0xfff0000000000001 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4503599627370494ll /* 0xfff0000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370493ll /* 0xfff0000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370492ll /* 0xfff0000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370491ll /* 0xfff0000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370488ll /* 0xfff0000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4503599627370487ll /* 0xfff0000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3377699720527873ll /* 0xfff3ffffffffffff */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685256ll /* 0xfff7fffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 51},                        /* shli r3, r2, 51 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2251799813685255ll /* 0xfff7fffffffffff9 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2251799813685252ll /* 0xfff7fffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 51},                        /* shli r3, r2, 51 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2251799813685251ll /* 0xfff7fffffffffffd */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2251799813685250ll /* 0xfff7fffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 51},                        /* shli r3, r2, 51 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2251799813685249ll /* 0xfff7ffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685248ll /* 0xfff8000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 51}}                        /* shli r3, r2, 51 */
+   },
+  {-2251799813685247ll /* 0xfff8000000000001 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2251799813685246ll /* 0xfff8000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685245ll /* 0xfff8000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685244ll /* 0xfff8000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685243ll /* 0xfff8000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685240ll /* 0xfff8000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2251799813685239ll /* 0xfff8000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1688849860263937ll /* 0xfff9ffffffffffff */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842632ll /* 0xfffbfffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 50},                        /* shli r3, r2, 50 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1125899906842631ll /* 0xfffbfffffffffff9 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1125899906842628ll /* 0xfffbfffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 50},                        /* shli r3, r2, 50 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1125899906842627ll /* 0xfffbfffffffffffd */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1125899906842626ll /* 0xfffbfffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 50},                        /* shli r3, r2, 50 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1125899906842625ll /* 0xfffbffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842624ll /* 0xfffc000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 50}}                        /* shli r3, r2, 50 */
+   },
+  {-1125899906842623ll /* 0xfffc000000000001 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1125899906842622ll /* 0xfffc000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842621ll /* 0xfffc000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842620ll /* 0xfffc000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842619ll /* 0xfffc000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842616ll /* 0xfffc000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1125899906842615ll /* 0xfffc000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-844424930131969ll /* 0xfffcffffffffffff */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421320ll /* 0xfffdfffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 49},                        /* shli r3, r2, 49 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-562949953421319ll /* 0xfffdfffffffffff9 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-562949953421316ll /* 0xfffdfffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 49},                        /* shli r3, r2, 49 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-562949953421315ll /* 0xfffdfffffffffffd */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-562949953421314ll /* 0xfffdfffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 49},                        /* shli r3, r2, 49 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-562949953421313ll /* 0xfffdffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421312ll /* 0xfffe000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 49}}                        /* shli r3, r2, 49 */
+   },
+  {-562949953421311ll /* 0xfffe000000000001 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-562949953421310ll /* 0xfffe000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421309ll /* 0xfffe000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421308ll /* 0xfffe000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421307ll /* 0xfffe000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421304ll /* 0xfffe000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-562949953421303ll /* 0xfffe000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-422212465065985ll /* 0xfffe7fffffffffff */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710664ll /* 0xfffefffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 48},                        /* shli r3, r2, 48 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-281474976710663ll /* 0xfffefffffffffff9 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-281474976710660ll /* 0xfffefffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 48},                        /* shli r3, r2, 48 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-281474976710659ll /* 0xfffefffffffffffd */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-281474976710658ll /* 0xfffefffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 48},                        /* shli r3, r2, 48 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-281474976710657ll /* 0xfffeffffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710656ll /* 0xffff000000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 48}}                        /* shli r3, r2, 48 */
+   },
+  {-281474976710655ll /* 0xffff000000000001 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-281474976710654ll /* 0xffff000000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710653ll /* 0xffff000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710652ll /* 0xffff000000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710651ll /* 0xffff000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710648ll /* 0xffff000000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-281474976710647ll /* 0xffff000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-211106232532993ll /* 0xffff3fffffffffff */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355336ll /* 0xffff7ffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 47},                        /* shli r3, r2, 47 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-140737488355335ll /* 0xffff7ffffffffff9 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-140737488355332ll /* 0xffff7ffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 47},                        /* shli r3, r2, 47 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-140737488355331ll /* 0xffff7ffffffffffd */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-140737488355330ll /* 0xffff7ffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 47},                        /* shli r3, r2, 47 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-140737488355329ll /* 0xffff7fffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355328ll /* 0xffff800000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 47}}                        /* shli r3, r2, 47 */
+   },
+  {-140737488355327ll /* 0xffff800000000001 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-140737488355326ll /* 0xffff800000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355325ll /* 0xffff800000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355324ll /* 0xffff800000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355323ll /* 0xffff800000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355320ll /* 0xffff800000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-140737488355319ll /* 0xffff800000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-105553116266497ll /* 0xffff9fffffffffff */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177672ll /* 0xffffbffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 46},                        /* shli r3, r2, 46 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-70368744177671ll /* 0xffffbffffffffff9 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-70368744177668ll /* 0xffffbffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 46},                        /* shli r3, r2, 46 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-70368744177667ll /* 0xffffbffffffffffd */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-70368744177666ll /* 0xffffbffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 46},                        /* shli r3, r2, 46 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-70368744177665ll /* 0xffffbfffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177664ll /* 0xffffc00000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 46}}                        /* shli r3, r2, 46 */
+   },
+  {-70368744177663ll /* 0xffffc00000000001 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-70368744177662ll /* 0xffffc00000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177661ll /* 0xffffc00000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177660ll /* 0xffffc00000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177659ll /* 0xffffc00000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177656ll /* 0xffffc00000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-70368744177655ll /* 0xffffc00000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-52776558133249ll /* 0xffffcfffffffffff */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088840ll /* 0xffffdffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 45},                        /* shli r3, r2, 45 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-35184372088839ll /* 0xffffdffffffffff9 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-35184372088836ll /* 0xffffdffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 45},                        /* shli r3, r2, 45 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-35184372088835ll /* 0xffffdffffffffffd */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-35184372088834ll /* 0xffffdffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 45},                        /* shli r3, r2, 45 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-35184372088833ll /* 0xffffdfffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088832ll /* 0xffffe00000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 45}}                        /* shli r3, r2, 45 */
+   },
+  {-35184372088831ll /* 0xffffe00000000001 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-35184372088830ll /* 0xffffe00000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088829ll /* 0xffffe00000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088828ll /* 0xffffe00000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088827ll /* 0xffffe00000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088824ll /* 0xffffe00000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-35184372088823ll /* 0xffffe00000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-26388279066625ll /* 0xffffe7ffffffffff */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044424ll /* 0xffffeffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 44},                        /* shli r3, r2, 44 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-17592186044423ll /* 0xffffeffffffffff9 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-17592186044420ll /* 0xffffeffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 44},                        /* shli r3, r2, 44 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-17592186044419ll /* 0xffffeffffffffffd */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-17592186044418ll /* 0xffffeffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 44},                        /* shli r3, r2, 44 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-17592186044417ll /* 0xffffefffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044416ll /* 0xfffff00000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 44}}                        /* shli r3, r2, 44 */
+   },
+  {-17592186044415ll /* 0xfffff00000000001 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-17592186044414ll /* 0xfffff00000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044413ll /* 0xfffff00000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044412ll /* 0xfffff00000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044411ll /* 0xfffff00000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044408ll /* 0xfffff00000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17592186044407ll /* 0xfffff00000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-13194139533313ll /* 0xfffff3ffffffffff */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022216ll /* 0xfffff7fffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 43},                        /* shli r3, r2, 43 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-8796093022215ll /* 0xfffff7fffffffff9 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8796093022212ll /* 0xfffff7fffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 43},                        /* shli r3, r2, 43 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-8796093022211ll /* 0xfffff7fffffffffd */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8796093022210ll /* 0xfffff7fffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 43},                        /* shli r3, r2, 43 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-8796093022209ll /* 0xfffff7ffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022208ll /* 0xfffff80000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 43}}                        /* shli r3, r2, 43 */
+   },
+  {-8796093022207ll /* 0xfffff80000000001 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8796093022206ll /* 0xfffff80000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022205ll /* 0xfffff80000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022204ll /* 0xfffff80000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022203ll /* 0xfffff80000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022200ll /* 0xfffff80000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8796093022199ll /* 0xfffff80000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-6597069766657ll /* 0xfffff9ffffffffff */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511112ll /* 0xfffffbfffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 42},                        /* shli r3, r2, 42 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4398046511111ll /* 0xfffffbfffffffff9 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4398046511108ll /* 0xfffffbfffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 42},                        /* shli r3, r2, 42 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4398046511107ll /* 0xfffffbfffffffffd */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4398046511106ll /* 0xfffffbfffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 42},                        /* shli r3, r2, 42 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4398046511105ll /* 0xfffffbffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511104ll /* 0xfffffc0000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 42}}                        /* shli r3, r2, 42 */
+   },
+  {-4398046511103ll /* 0xfffffc0000000001 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4398046511102ll /* 0xfffffc0000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511101ll /* 0xfffffc0000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511100ll /* 0xfffffc0000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511099ll /* 0xfffffc0000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511096ll /* 0xfffffc0000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4398046511095ll /* 0xfffffc0000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3298534883329ll /* 0xfffffcffffffffff */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255560ll /* 0xfffffdfffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 41},                        /* shli r3, r2, 41 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2199023255559ll /* 0xfffffdfffffffff9 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2199023255556ll /* 0xfffffdfffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 41},                        /* shli r3, r2, 41 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2199023255555ll /* 0xfffffdfffffffffd */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2199023255554ll /* 0xfffffdfffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 41},                        /* shli r3, r2, 41 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2199023255553ll /* 0xfffffdffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255552ll /* 0xfffffe0000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 41}}                        /* shli r3, r2, 41 */
+   },
+  {-2199023255551ll /* 0xfffffe0000000001 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2199023255550ll /* 0xfffffe0000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255549ll /* 0xfffffe0000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255548ll /* 0xfffffe0000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255547ll /* 0xfffffe0000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255544ll /* 0xfffffe0000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2199023255543ll /* 0xfffffe0000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1649267441665ll /* 0xfffffe7fffffffff */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627784ll /* 0xfffffefffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 40},                        /* shli r3, r2, 40 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1099511627783ll /* 0xfffffefffffffff9 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1099511627780ll /* 0xfffffefffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 40},                        /* shli r3, r2, 40 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1099511627779ll /* 0xfffffefffffffffd */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1099511627778ll /* 0xfffffefffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 40},                        /* shli r3, r2, 40 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1099511627777ll /* 0xfffffeffffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627776ll /* 0xffffff0000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 40}}                        /* shli r3, r2, 40 */
+   },
+  {-1099511627775ll /* 0xffffff0000000001 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1099511627774ll /* 0xffffff0000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627773ll /* 0xffffff0000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627772ll /* 0xffffff0000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627771ll /* 0xffffff0000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627768ll /* 0xffffff0000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1099511627767ll /* 0xffffff0000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-824633720833ll /* 0xffffff3fffffffff */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813896ll /* 0xffffff7ffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 39},                        /* shli r3, r2, 39 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-549755813895ll /* 0xffffff7ffffffff9 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-549755813892ll /* 0xffffff7ffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 39},                        /* shli r3, r2, 39 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-549755813891ll /* 0xffffff7ffffffffd */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-549755813890ll /* 0xffffff7ffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 39},                        /* shli r3, r2, 39 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-549755813889ll /* 0xffffff7fffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813888ll /* 0xffffff8000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 39}}                        /* shli r3, r2, 39 */
+   },
+  {-549755813887ll /* 0xffffff8000000001 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-549755813886ll /* 0xffffff8000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813885ll /* 0xffffff8000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813884ll /* 0xffffff8000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813883ll /* 0xffffff8000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813880ll /* 0xffffff8000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-549755813879ll /* 0xffffff8000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-412316860417ll /* 0xffffff9fffffffff */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906952ll /* 0xffffffbffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 38},                        /* shli r3, r2, 38 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-274877906951ll /* 0xffffffbffffffff9 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-274877906948ll /* 0xffffffbffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 38},                        /* shli r3, r2, 38 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-274877906947ll /* 0xffffffbffffffffd */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-274877906946ll /* 0xffffffbffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 38},                        /* shli r3, r2, 38 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-274877906945ll /* 0xffffffbfffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906944ll /* 0xffffffc000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 38}}                        /* shli r3, r2, 38 */
+   },
+  {-274877906943ll /* 0xffffffc000000001 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-274877906942ll /* 0xffffffc000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906941ll /* 0xffffffc000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906940ll /* 0xffffffc000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906939ll /* 0xffffffc000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906936ll /* 0xffffffc000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-274877906935ll /* 0xffffffc000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-206158430209ll /* 0xffffffcfffffffff */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953480ll /* 0xffffffdffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 37},                        /* shli r3, r2, 37 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-137438953479ll /* 0xffffffdffffffff9 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-137438953476ll /* 0xffffffdffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 37},                        /* shli r3, r2, 37 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-137438953475ll /* 0xffffffdffffffffd */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-137438953474ll /* 0xffffffdffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 37},                        /* shli r3, r2, 37 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-137438953473ll /* 0xffffffdfffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953472ll /* 0xffffffe000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 37}}                        /* shli r3, r2, 37 */
+   },
+  {-137438953471ll /* 0xffffffe000000001 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-137438953470ll /* 0xffffffe000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953469ll /* 0xffffffe000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953468ll /* 0xffffffe000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953467ll /* 0xffffffe000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953464ll /* 0xffffffe000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-137438953463ll /* 0xffffffe000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-103079215105ll /* 0xffffffe7ffffffff */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476744ll /* 0xffffffeffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 36},                        /* shli r3, r2, 36 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-68719476743ll /* 0xffffffeffffffff9 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-68719476740ll /* 0xffffffeffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 36},                        /* shli r3, r2, 36 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-68719476739ll /* 0xffffffeffffffffd */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-68719476738ll /* 0xffffffeffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 36},                        /* shli r3, r2, 36 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-68719476737ll /* 0xffffffefffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476736ll /* 0xfffffff000000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 36}}                        /* shli r3, r2, 36 */
+   },
+  {-68719476735ll /* 0xfffffff000000001 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-68719476734ll /* 0xfffffff000000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476733ll /* 0xfffffff000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476732ll /* 0xfffffff000000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476731ll /* 0xfffffff000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476728ll /* 0xfffffff000000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-68719476727ll /* 0xfffffff000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-51539607553ll /* 0xfffffff3ffffffff */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738376ll /* 0xfffffff7fffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 35},                        /* shli r3, r2, 35 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-34359738375ll /* 0xfffffff7fffffff9 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-34359738372ll /* 0xfffffff7fffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 35},                        /* shli r3, r2, 35 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-34359738371ll /* 0xfffffff7fffffffd */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-34359738370ll /* 0xfffffff7fffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 35},                        /* shli r3, r2, 35 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-34359738369ll /* 0xfffffff7ffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738368ll /* 0xfffffff800000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 35}}                        /* shli r3, r2, 35 */
+   },
+  {-34359738367ll /* 0xfffffff800000001 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-34359738366ll /* 0xfffffff800000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738365ll /* 0xfffffff800000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738364ll /* 0xfffffff800000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738363ll /* 0xfffffff800000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738360ll /* 0xfffffff800000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34359738359ll /* 0xfffffff800000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-25769803777ll /* 0xfffffff9ffffffff */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869192ll /* 0xfffffffbfffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 34},                        /* shli r3, r2, 34 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-17179869191ll /* 0xfffffffbfffffff9 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-17179869188ll /* 0xfffffffbfffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 34},                        /* shli r3, r2, 34 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-17179869187ll /* 0xfffffffbfffffffd */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-17179869186ll /* 0xfffffffbfffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 34},                        /* shli r3, r2, 34 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-17179869185ll /* 0xfffffffbffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869184ll /* 0xfffffffc00000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 34}}                        /* shli r3, r2, 34 */
+   },
+  {-17179869183ll /* 0xfffffffc00000001 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-17179869182ll /* 0xfffffffc00000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869181ll /* 0xfffffffc00000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869180ll /* 0xfffffffc00000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869179ll /* 0xfffffffc00000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869176ll /* 0xfffffffc00000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-17179869175ll /* 0xfffffffc00000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-12884901889ll /* 0xfffffffcffffffff */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934600ll /* 0xfffffffdfffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 33},                        /* shli r3, r2, 33 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-8589934599ll /* 0xfffffffdfffffff9 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8589934596ll /* 0xfffffffdfffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 33},                        /* shli r3, r2, 33 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-8589934595ll /* 0xfffffffdfffffffd */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8589934594ll /* 0xfffffffdfffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 33},                        /* shli r3, r2, 33 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-8589934593ll /* 0xfffffffdffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934592ll /* 0xfffffffe00000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 33}}                        /* shli r3, r2, 33 */
+   },
+  {-8589934591ll /* 0xfffffffe00000001 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8589934590ll /* 0xfffffffe00000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934589ll /* 0xfffffffe00000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934588ll /* 0xfffffffe00000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934587ll /* 0xfffffffe00000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934584ll /* 0xfffffffe00000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8589934583ll /* 0xfffffffe00000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-6442450945ll /* 0xfffffffe7fffffff */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967304ll /* 0xfffffffefffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 32},                        /* shli r3, r2, 32 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4294967303ll /* 0xfffffffefffffff9 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4294967300ll /* 0xfffffffefffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 32},                        /* shli r3, r2, 32 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4294967299ll /* 0xfffffffefffffffd */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4294967298ll /* 0xfffffffefffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 32},                        /* shli r3, r2, 32 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4294967297ll /* 0xfffffffeffffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967296ll /* 0xffffffff00000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 32}}                        /* shli r3, r2, 32 */
+   },
+  {-4294967295ll /* 0xffffffff00000001 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4294967294ll /* 0xffffffff00000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967293ll /* 0xffffffff00000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967292ll /* 0xffffffff00000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967291ll /* 0xffffffff00000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967288ll /* 0xffffffff00000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4294967287ll /* 0xffffffff00000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3221225473ll /* 0xffffffff3fffffff */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483656ll /* 0xffffffff7ffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 31},                        /* shli r3, r2, 31 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2147483655ll /* 0xffffffff7ffffff9 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2147483652ll /* 0xffffffff7ffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 31},                        /* shli r3, r2, 31 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2147483651ll /* 0xffffffff7ffffffd */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2147483650ll /* 0xffffffff7ffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 31},                        /* shli r3, r2, 31 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2147483649ll /* 0xffffffff7fffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483648ll /* 0xffffffff80000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 31}}                        /* shli r3, r2, 31 */
+   },
+  {-2147483647ll /* 0xffffffff80000001 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2147483646ll /* 0xffffffff80000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483645ll /* 0xffffffff80000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483644ll /* 0xffffffff80000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483643ll /* 0xffffffff80000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483640ll /* 0xffffffff80000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2147483639ll /* 0xffffffff80000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1610612737ll /* 0xffffffff9fffffff */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741832ll /* 0xffffffffbffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1073741831ll /* 0xffffffffbffffff9 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1073741828ll /* 0xffffffffbffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1073741827ll /* 0xffffffffbffffffd */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1073741826ll /* 0xffffffffbffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1073741825ll /* 0xffffffffbfffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741824ll /* 0xffffffffc0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30}}                        /* shli r3, r2, 30 */
+   },
+  {-1073741823ll /* 0xffffffffc0000001 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1073741822ll /* 0xffffffffc0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741821ll /* 0xffffffffc0000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741820ll /* 0xffffffffc0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741819ll /* 0xffffffffc0000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741816ll /* 0xffffffffc0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741815ll /* 0xffffffffc0000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-805306369ll /* 0xffffffffcfffffff */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870920ll /* 0xffffffffdffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-536870919ll /* 0xffffffffdffffff9 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-536870916ll /* 0xffffffffdffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-536870915ll /* 0xffffffffdffffffd */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-536870914ll /* 0xffffffffdffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-536870913ll /* 0xffffffffdfffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870912ll /* 0xffffffffe0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {-536870911ll /* 0xffffffffe0000001 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-536870910ll /* 0xffffffffe0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870909ll /* 0xffffffffe0000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870908ll /* 0xffffffffe0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870907ll /* 0xffffffffe0000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870904ll /* 0xffffffffe0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870903ll /* 0xffffffffe0000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-402653185ll /* 0xffffffffe7ffffff */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435464ll /* 0xffffffffeffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-268435463ll /* 0xffffffffeffffff9 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-268435460ll /* 0xffffffffeffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-268435459ll /* 0xffffffffeffffffd */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-268435458ll /* 0xffffffffeffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-268435457ll /* 0xffffffffefffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435456ll /* 0xfffffffff0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {-268435455ll /* 0xfffffffff0000001 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-268435454ll /* 0xfffffffff0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435453ll /* 0xfffffffff0000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435452ll /* 0xfffffffff0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435451ll /* 0xfffffffff0000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435448ll /* 0xfffffffff0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435447ll /* 0xfffffffff0000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-201326593ll /* 0xfffffffff3ffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217736ll /* 0xfffffffff7fffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-134217735ll /* 0xfffffffff7fffff9 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-134217732ll /* 0xfffffffff7fffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-134217731ll /* 0xfffffffff7fffffd */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-134217730ll /* 0xfffffffff7fffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-134217729ll /* 0xfffffffff7ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217728ll /* 0xfffffffff8000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {-134217727ll /* 0xfffffffff8000001 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-134217726ll /* 0xfffffffff8000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217725ll /* 0xfffffffff8000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217724ll /* 0xfffffffff8000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217723ll /* 0xfffffffff8000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217720ll /* 0xfffffffff8000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217719ll /* 0xfffffffff8000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-100663297ll /* 0xfffffffff9ffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108872ll /* 0xfffffffffbfffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-67108871ll /* 0xfffffffffbfffff9 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-67108868ll /* 0xfffffffffbfffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-67108867ll /* 0xfffffffffbfffffd */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-67108866ll /* 0xfffffffffbfffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-67108865ll /* 0xfffffffffbffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108864ll /* 0xfffffffffc000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {-67108863ll /* 0xfffffffffc000001 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-67108862ll /* 0xfffffffffc000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108861ll /* 0xfffffffffc000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108860ll /* 0xfffffffffc000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108859ll /* 0xfffffffffc000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108856ll /* 0xfffffffffc000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108855ll /* 0xfffffffffc000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-50331649ll /* 0xfffffffffcffffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554440ll /* 0xfffffffffdfffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-33554439ll /* 0xfffffffffdfffff9 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-33554436ll /* 0xfffffffffdfffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-33554435ll /* 0xfffffffffdfffffd */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-33554434ll /* 0xfffffffffdfffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-33554433ll /* 0xfffffffffdffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554432ll /* 0xfffffffffe000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {-33554431ll /* 0xfffffffffe000001 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-33554430ll /* 0xfffffffffe000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554429ll /* 0xfffffffffe000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554428ll /* 0xfffffffffe000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554427ll /* 0xfffffffffe000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554424ll /* 0xfffffffffe000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554423ll /* 0xfffffffffe000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-25165825ll /* 0xfffffffffe7fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777224ll /* 0xfffffffffefffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-16777223ll /* 0xfffffffffefffff9 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16777220ll /* 0xfffffffffefffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-16777219ll /* 0xfffffffffefffffd */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16777218ll /* 0xfffffffffefffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-16777217ll /* 0xfffffffffeffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777216ll /* 0xffffffffff000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {-16777215ll /* 0xffffffffff000001 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-16777214ll /* 0xffffffffff000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777213ll /* 0xffffffffff000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777212ll /* 0xffffffffff000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777211ll /* 0xffffffffff000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777208ll /* 0xffffffffff000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777207ll /* 0xffffffffff000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-12582913ll /* 0xffffffffff3fffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388616ll /* 0xffffffffff7ffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-8388615ll /* 0xffffffffff7ffff9 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8388612ll /* 0xffffffffff7ffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-8388611ll /* 0xffffffffff7ffffd */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8388610ll /* 0xffffffffff7ffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-8388609ll /* 0xffffffffff7fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388608ll /* 0xffffffffff800000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {-8388607ll /* 0xffffffffff800001 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8388606ll /* 0xffffffffff800002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388605ll /* 0xffffffffff800003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388604ll /* 0xffffffffff800004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388603ll /* 0xffffffffff800005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388600ll /* 0xffffffffff800008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388599ll /* 0xffffffffff800009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-6291457ll /* 0xffffffffff9fffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194312ll /* 0xffffffffffbffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4194311ll /* 0xffffffffffbffff9 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4194308ll /* 0xffffffffffbffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4194307ll /* 0xffffffffffbffffd */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4194306ll /* 0xffffffffffbffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4194305ll /* 0xffffffffffbfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194304ll /* 0xffffffffffc00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {-4194303ll /* 0xffffffffffc00001 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4194302ll /* 0xffffffffffc00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194301ll /* 0xffffffffffc00003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194300ll /* 0xffffffffffc00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194299ll /* 0xffffffffffc00005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194296ll /* 0xffffffffffc00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194295ll /* 0xffffffffffc00009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3145729ll /* 0xffffffffffcfffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097160ll /* 0xffffffffffdffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2097159ll /* 0xffffffffffdffff9 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2097156ll /* 0xffffffffffdffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2097155ll /* 0xffffffffffdffffd */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2097154ll /* 0xffffffffffdffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2097153ll /* 0xffffffffffdfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097152ll /* 0xffffffffffe00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {-2097151ll /* 0xffffffffffe00001 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2097150ll /* 0xffffffffffe00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097149ll /* 0xffffffffffe00003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097148ll /* 0xffffffffffe00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097147ll /* 0xffffffffffe00005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097144ll /* 0xffffffffffe00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097143ll /* 0xffffffffffe00009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1572865ll /* 0xffffffffffe7ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048584ll /* 0xffffffffffeffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1048583ll /* 0xffffffffffeffff9 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1048580ll /* 0xffffffffffeffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1048579ll /* 0xffffffffffeffffd */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1048578ll /* 0xffffffffffeffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1048577ll /* 0xffffffffffefffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048576ll /* 0xfffffffffff00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {-1048575ll /* 0xfffffffffff00001 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1048574ll /* 0xfffffffffff00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048573ll /* 0xfffffffffff00003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048572ll /* 0xfffffffffff00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048571ll /* 0xfffffffffff00005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048568ll /* 0xfffffffffff00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048567ll /* 0xfffffffffff00009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-786433ll /* 0xfffffffffff3ffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524296ll /* 0xfffffffffff7fff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-524295ll /* 0xfffffffffff7fff9 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-524292ll /* 0xfffffffffff7fffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-524291ll /* 0xfffffffffff7fffd */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-524290ll /* 0xfffffffffff7fffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-524289ll /* 0xfffffffffff7ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524288ll /* 0xfffffffffff80000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {-524287ll /* 0xfffffffffff80001 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-524286ll /* 0xfffffffffff80002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524285ll /* 0xfffffffffff80003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524284ll /* 0xfffffffffff80004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524283ll /* 0xfffffffffff80005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524280ll /* 0xfffffffffff80008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524279ll /* 0xfffffffffff80009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-393217ll /* 0xfffffffffff9ffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262152ll /* 0xfffffffffffbfff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-262151ll /* 0xfffffffffffbfff9 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262148ll /* 0xfffffffffffbfffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-262147ll /* 0xfffffffffffbfffd */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262146ll /* 0xfffffffffffbfffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-262145ll /* 0xfffffffffffbffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262144ll /* 0xfffffffffffc0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {-262143ll /* 0xfffffffffffc0001 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-262142ll /* 0xfffffffffffc0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262141ll /* 0xfffffffffffc0003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262140ll /* 0xfffffffffffc0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262139ll /* 0xfffffffffffc0005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262136ll /* 0xfffffffffffc0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262135ll /* 0xfffffffffffc0009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-196609ll /* 0xfffffffffffcffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131080ll /* 0xfffffffffffdfff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-131079ll /* 0xfffffffffffdfff9 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-131076ll /* 0xfffffffffffdfffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-131075ll /* 0xfffffffffffdfffd */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-131074ll /* 0xfffffffffffdfffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-131073ll /* 0xfffffffffffdffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131072ll /* 0xfffffffffffe0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {-131071ll /* 0xfffffffffffe0001 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-131070ll /* 0xfffffffffffe0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131069ll /* 0xfffffffffffe0003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131068ll /* 0xfffffffffffe0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131067ll /* 0xfffffffffffe0005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131064ll /* 0xfffffffffffe0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131063ll /* 0xfffffffffffe0009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-98305ll /* 0xfffffffffffe7fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65544ll /* 0xfffffffffffefff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-65543ll /* 0xfffffffffffefff9 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-65540ll /* 0xfffffffffffefffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-65539ll /* 0xfffffffffffefffd */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-65538ll /* 0xfffffffffffefffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-65537ll /* 0xfffffffffffeffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65536ll /* 0xffffffffffff0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {-65535ll /* 0xffffffffffff0001 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-65534ll /* 0xffffffffffff0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65533ll /* 0xffffffffffff0003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65532ll /* 0xffffffffffff0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65531ll /* 0xffffffffffff0005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65528ll /* 0xffffffffffff0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65527ll /* 0xffffffffffff0009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-49153ll /* 0xffffffffffff3fff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32776ll /* 0xffffffffffff7ff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-32775ll /* 0xffffffffffff7ff9 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-32772ll /* 0xffffffffffff7ffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-32771ll /* 0xffffffffffff7ffd */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-32770ll /* 0xffffffffffff7ffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-32769ll /* 0xffffffffffff7fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32768ll /* 0xffffffffffff8000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {-32767ll /* 0xffffffffffff8001 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-32766ll /* 0xffffffffffff8002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32765ll /* 0xffffffffffff8003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32764ll /* 0xffffffffffff8004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32763ll /* 0xffffffffffff8005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32760ll /* 0xffffffffffff8008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32759ll /* 0xffffffffffff8009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-24577ll /* 0xffffffffffff9fff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16392ll /* 0xffffffffffffbff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-16391ll /* 0xffffffffffffbff9 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16388ll /* 0xffffffffffffbffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-16387ll /* 0xffffffffffffbffd */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16386ll /* 0xffffffffffffbffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-16385ll /* 0xffffffffffffbfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16384ll /* 0xffffffffffffc000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {-16383ll /* 0xffffffffffffc001 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-16382ll /* 0xffffffffffffc002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16381ll /* 0xffffffffffffc003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16380ll /* 0xffffffffffffc004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16379ll /* 0xffffffffffffc005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16376ll /* 0xffffffffffffc008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16375ll /* 0xffffffffffffc009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-12289ll /* 0xffffffffffffcfff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8200ll /* 0xffffffffffffdff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-8199ll /* 0xffffffffffffdff9 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8196ll /* 0xffffffffffffdffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-8195ll /* 0xffffffffffffdffd */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8194ll /* 0xffffffffffffdffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-8193ll /* 0xffffffffffffdfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8192ll /* 0xffffffffffffe000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {-8191ll /* 0xffffffffffffe001 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8190ll /* 0xffffffffffffe002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8189ll /* 0xffffffffffffe003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8188ll /* 0xffffffffffffe004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8187ll /* 0xffffffffffffe005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8184ll /* 0xffffffffffffe008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8183ll /* 0xffffffffffffe009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-6145ll /* 0xffffffffffffe7ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4104ll /* 0xffffffffffffeff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-4103ll /* 0xffffffffffffeff9 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4100ll /* 0xffffffffffffeffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-4099ll /* 0xffffffffffffeffd */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4098ll /* 0xffffffffffffeffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-4097ll /* 0xffffffffffffefff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4096ll /* 0xfffffffffffff000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {-4095ll /* 0xfffffffffffff001 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4094ll /* 0xfffffffffffff002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4093ll /* 0xfffffffffffff003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4092ll /* 0xfffffffffffff004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4091ll /* 0xfffffffffffff005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4088ll /* 0xfffffffffffff008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4087ll /* 0xfffffffffffff009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3073ll /* 0xfffffffffffff3ff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3072ll /* 0xfffffffffffff400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2056ll /* 0xfffffffffffff7f8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-2055ll /* 0xfffffffffffff7f9 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2052ll /* 0xfffffffffffff7fc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-2051ll /* 0xfffffffffffff7fd */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2050ll /* 0xfffffffffffff7fe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-2049ll /* 0xfffffffffffff7ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2048ll /* 0xfffffffffffff800 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {-2047ll /* 0xfffffffffffff801 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2046ll /* 0xfffffffffffff802 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2045ll /* 0xfffffffffffff803 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2044ll /* 0xfffffffffffff804 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2043ll /* 0xfffffffffffff805 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2040ll /* 0xfffffffffffff808 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2039ll /* 0xfffffffffffff809 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1537ll /* 0xfffffffffffff9ff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1032ll /* 0xfffffffffffffbf8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-1031ll /* 0xfffffffffffffbf9 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1028ll /* 0xfffffffffffffbfc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-1027ll /* 0xfffffffffffffbfd */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1026ll /* 0xfffffffffffffbfe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-1025ll /* 0xfffffffffffffbff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1024ll /* 0xfffffffffffffc00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {-1023ll /* 0xfffffffffffffc01 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1022ll /* 0xfffffffffffffc02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1021ll /* 0xfffffffffffffc03 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1020ll /* 0xfffffffffffffc04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1019ll /* 0xfffffffffffffc05 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1018ll /* 0xfffffffffffffc06 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-1017ll /* 0xfffffffffffffc07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1016ll /* 0xfffffffffffffc08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1015ll /* 0xfffffffffffffc09 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1014ll /* 0xfffffffffffffc0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-1013ll /* 0xfffffffffffffc0b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-1012ll /* 0xfffffffffffffc0c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-1011ll /* 0xfffffffffffffc0d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-1010ll /* 0xfffffffffffffc0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1009ll /* 0xfffffffffffffc0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1008ll /* 0xfffffffffffffc10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1007ll /* 0xfffffffffffffc11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1006ll /* 0xfffffffffffffc12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-1005ll /* 0xfffffffffffffc13 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* shl1add r5, r4, r1 */
+   },
+  {-1004ll /* 0xfffffffffffffc14 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-1003ll /* 0xfffffffffffffc15 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-1001ll /* 0xfffffffffffffc17 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1000ll /* 0xfffffffffffffc18 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-999ll /* 0xfffffffffffffc19 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-997ll /* 0xfffffffffffffc1b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-996ll /* 0xfffffffffffffc1c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 1, 3},                 /* shl2add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-994ll /* 0xfffffffffffffc1e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-993ll /* 0xfffffffffffffc1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-992ll /* 0xfffffffffffffc20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-991ll /* 0xfffffffffffffc21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-990ll /* 0xfffffffffffffc22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-988ll /* 0xfffffffffffffc24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-987ll /* 0xfffffffffffffc25 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-984ll /* 0xfffffffffffffc28 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-983ll /* 0xfffffffffffffc29 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-979ll /* 0xfffffffffffffc2d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-976ll /* 0xfffffffffffffc30 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-975ll /* 0xfffffffffffffc31 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-969ll /* 0xfffffffffffffc37 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-968ll /* 0xfffffffffffffc38 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 1, 3},                 /* shl3add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-967ll /* 0xfffffffffffffc39 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-965ll /* 0xfffffffffffffc3b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-964ll /* 0xfffffffffffffc3c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 1, 3},                 /* shl2add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-963ll /* 0xfffffffffffffc3d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 1},                 /* shl1add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-962ll /* 0xfffffffffffffc3e */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-961ll /* 0xfffffffffffffc3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-960ll /* 0xfffffffffffffc40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-959ll /* 0xfffffffffffffc41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-958ll /* 0xfffffffffffffc42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-957ll /* 0xfffffffffffffc43 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-956ll /* 0xfffffffffffffc44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-955ll /* 0xfffffffffffffc45 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-953ll /* 0xfffffffffffffc47 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-952ll /* 0xfffffffffffffc48 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-951ll /* 0xfffffffffffffc49 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-945ll /* 0xfffffffffffffc4f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {-944ll /* 0xfffffffffffffc50 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-943ll /* 0xfffffffffffffc51 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-942ll /* 0xfffffffffffffc52 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {-940ll /* 0xfffffffffffffc54 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-936ll /* 0xfffffffffffffc58 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-935ll /* 0xfffffffffffffc59 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-929ll /* 0xfffffffffffffc5f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-928ll /* 0xfffffffffffffc60 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-925ll /* 0xfffffffffffffc63 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-924ll /* 0xfffffffffffffc64 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-920ll /* 0xfffffffffffffc68 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-919ll /* 0xfffffffffffffc69 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-916ll /* 0xfffffffffffffc6c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-913ll /* 0xfffffffffffffc6f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-912ll /* 0xfffffffffffffc70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-911ll /* 0xfffffffffffffc71 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-910ll /* 0xfffffffffffffc72 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-905ll /* 0xfffffffffffffc77 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-904ll /* 0xfffffffffffffc78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-903ll /* 0xfffffffffffffc79 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-902ll /* 0xfffffffffffffc7a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-901ll /* 0xfffffffffffffc7b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-900ll /* 0xfffffffffffffc7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-899ll /* 0xfffffffffffffc7d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-898ll /* 0xfffffffffffffc7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-897ll /* 0xfffffffffffffc7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-896ll /* 0xfffffffffffffc80 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-895ll /* 0xfffffffffffffc81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-894ll /* 0xfffffffffffffc82 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-893ll /* 0xfffffffffffffc83 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-892ll /* 0xfffffffffffffc84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-891ll /* 0xfffffffffffffc85 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-890ll /* 0xfffffffffffffc86 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-889ll /* 0xfffffffffffffc87 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-888ll /* 0xfffffffffffffc88 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-887ll /* 0xfffffffffffffc89 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-886ll /* 0xfffffffffffffc8a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-884ll /* 0xfffffffffffffc8c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-881ll /* 0xfffffffffffffc8f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-880ll /* 0xfffffffffffffc90 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-879ll /* 0xfffffffffffffc91 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 1}}                 /* shl1add r5, r4, r1 */
+   },
+  {-873ll /* 0xfffffffffffffc97 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-872ll /* 0xfffffffffffffc98 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-868ll /* 0xfffffffffffffc9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-865ll /* 0xfffffffffffffc9f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-864ll /* 0xfffffffffffffca0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-863ll /* 0xfffffffffffffca1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-861ll /* 0xfffffffffffffca3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-860ll /* 0xfffffffffffffca4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-856ll /* 0xfffffffffffffca8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-855ll /* 0xfffffffffffffca9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-847ll /* 0xfffffffffffffcb1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-837ll /* 0xfffffffffffffcbb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-835ll /* 0xfffffffffffffcbd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-834ll /* 0xfffffffffffffcbe */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {-832ll /* 0xfffffffffffffcc0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {-831ll /* 0xfffffffffffffcc1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-829ll /* 0xfffffffffffffcc3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-828ll /* 0xfffffffffffffcc4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-827ll /* 0xfffffffffffffcc5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-824ll /* 0xfffffffffffffcc8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-823ll /* 0xfffffffffffffcc9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-819ll /* 0xfffffffffffffccd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-816ll /* 0xfffffffffffffcd0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-815ll /* 0xfffffffffffffcd1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-803ll /* 0xfffffffffffffcdd */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-801ll /* 0xfffffffffffffcdf */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-800ll /* 0xfffffffffffffce0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-799ll /* 0xfffffffffffffce1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-797ll /* 0xfffffffffffffce3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-796ll /* 0xfffffffffffffce4 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-795ll /* 0xfffffffffffffce5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-793ll /* 0xfffffffffffffce7 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-792ll /* 0xfffffffffffffce8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-791ll /* 0xfffffffffffffce9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-789ll /* 0xfffffffffffffceb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-788ll /* 0xfffffffffffffcec */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-785ll /* 0xfffffffffffffcef */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-784ll /* 0xfffffffffffffcf0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-783ll /* 0xfffffffffffffcf1 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-781ll /* 0xfffffffffffffcf3 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-780ll /* 0xfffffffffffffcf4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-779ll /* 0xfffffffffffffcf5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-777ll /* 0xfffffffffffffcf7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-776ll /* 0xfffffffffffffcf8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-775ll /* 0xfffffffffffffcf9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-774ll /* 0xfffffffffffffcfa */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-773ll /* 0xfffffffffffffcfb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-772ll /* 0xfffffffffffffcfc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-771ll /* 0xfffffffffffffcfd */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* shl1add r5, r4, r4 */
+   },
+  {-770ll /* 0xfffffffffffffcfe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-769ll /* 0xfffffffffffffcff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-768ll /* 0xfffffffffffffd00 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-767ll /* 0xfffffffffffffd01 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-766ll /* 0xfffffffffffffd02 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-765ll /* 0xfffffffffffffd03 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-764ll /* 0xfffffffffffffd04 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-763ll /* 0xfffffffffffffd05 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-762ll /* 0xfffffffffffffd06 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-761ll /* 0xfffffffffffffd07 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-760ll /* 0xfffffffffffffd08 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-759ll /* 0xfffffffffffffd09 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-757ll /* 0xfffffffffffffd0b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-756ll /* 0xfffffffffffffd0c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-755ll /* 0xfffffffffffffd0d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-753ll /* 0xfffffffffffffd0f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-752ll /* 0xfffffffffffffd10 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-751ll /* 0xfffffffffffffd11 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-749ll /* 0xfffffffffffffd13 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 1, 3},                 /* shl3add r4, r1, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-748ll /* 0xfffffffffffffd14 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-744ll /* 0xfffffffffffffd18 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-743ll /* 0xfffffffffffffd19 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-741ll /* 0xfffffffffffffd1b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-739ll /* 0xfffffffffffffd1d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-737ll /* 0xfffffffffffffd1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-736ll /* 0xfffffffffffffd20 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-735ll /* 0xfffffffffffffd21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-732ll /* 0xfffffffffffffd24 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-729ll /* 0xfffffffffffffd27 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-728ll /* 0xfffffffffffffd28 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-720ll /* 0xfffffffffffffd30 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-719ll /* 0xfffffffffffffd31 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-715ll /* 0xfffffffffffffd35 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-712ll /* 0xfffffffffffffd38 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-711ll /* 0xfffffffffffffd39 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-708ll /* 0xfffffffffffffd3c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-707ll /* 0xfffffffffffffd3d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-705ll /* 0xfffffffffffffd3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-704ll /* 0xfffffffffffffd40 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {-703ll /* 0xfffffffffffffd41 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-701ll /* 0xfffffffffffffd43 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-700ll /* 0xfffffffffffffd44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-699ll /* 0xfffffffffffffd45 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-695ll /* 0xfffffffffffffd49 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-693ll /* 0xfffffffffffffd4b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-692ll /* 0xfffffffffffffd4c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-688ll /* 0xfffffffffffffd50 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-680ll /* 0xfffffffffffffd58 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-679ll /* 0xfffffffffffffd59 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-675ll /* 0xfffffffffffffd5d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-673ll /* 0xfffffffffffffd5f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-672ll /* 0xfffffffffffffd60 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-671ll /* 0xfffffffffffffd61 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-667ll /* 0xfffffffffffffd65 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-664ll /* 0xfffffffffffffd68 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-660ll /* 0xfffffffffffffd6c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-659ll /* 0xfffffffffffffd6d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-657ll /* 0xfffffffffffffd6f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-656ll /* 0xfffffffffffffd70 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-655ll /* 0xfffffffffffffd71 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-651ll /* 0xfffffffffffffd75 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-650ll /* 0xfffffffffffffd76 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-649ll /* 0xfffffffffffffd77 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-648ll /* 0xfffffffffffffd78 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-647ll /* 0xfffffffffffffd79 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-645ll /* 0xfffffffffffffd7b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-644ll /* 0xfffffffffffffd7c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-643ll /* 0xfffffffffffffd7d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-642ll /* 0xfffffffffffffd7e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-641ll /* 0xfffffffffffffd7f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-640ll /* 0xfffffffffffffd80 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {-639ll /* 0xfffffffffffffd81 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-638ll /* 0xfffffffffffffd82 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-637ll /* 0xfffffffffffffd83 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-636ll /* 0xfffffffffffffd84 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-635ll /* 0xfffffffffffffd85 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-634ll /* 0xfffffffffffffd86 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-633ll /* 0xfffffffffffffd87 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-632ll /* 0xfffffffffffffd88 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-631ll /* 0xfffffffffffffd89 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-630ll /* 0xfffffffffffffd8a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-629ll /* 0xfffffffffffffd8b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-627ll /* 0xfffffffffffffd8d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-625ll /* 0xfffffffffffffd8f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-624ll /* 0xfffffffffffffd90 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-620ll /* 0xfffffffffffffd94 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-619ll /* 0xfffffffffffffd95 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-616ll /* 0xfffffffffffffd98 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-615ll /* 0xfffffffffffffd99 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-613ll /* 0xfffffffffffffd9b */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 3},                 /* shl2add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-612ll /* 0xfffffffffffffd9c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-611ll /* 0xfffffffffffffd9d */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-609ll /* 0xfffffffffffffd9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-608ll /* 0xfffffffffffffda0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-607ll /* 0xfffffffffffffda1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-604ll /* 0xfffffffffffffda4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-603ll /* 0xfffffffffffffda5 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-600ll /* 0xfffffffffffffda8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-599ll /* 0xfffffffffffffda9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-595ll /* 0xfffffffffffffdad */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-594ll /* 0xfffffffffffffdae */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-593ll /* 0xfffffffffffffdaf */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-592ll /* 0xfffffffffffffdb0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-591ll /* 0xfffffffffffffdb1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-589ll /* 0xfffffffffffffdb3 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-588ll /* 0xfffffffffffffdb4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 3},                 /* shl2add r4, r3, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-585ll /* 0xfffffffffffffdb7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-584ll /* 0xfffffffffffffdb8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-583ll /* 0xfffffffffffffdb9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-581ll /* 0xfffffffffffffdbb */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {4, 3, 3},                 /* shl2add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-580ll /* 0xfffffffffffffdbc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-579ll /* 0xfffffffffffffdbd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-578ll /* 0xfffffffffffffdbe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-577ll /* 0xfffffffffffffdbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-576ll /* 0xfffffffffffffdc0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {-575ll /* 0xfffffffffffffdc1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-574ll /* 0xfffffffffffffdc2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-573ll /* 0xfffffffffffffdc3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-572ll /* 0xfffffffffffffdc4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-571ll /* 0xfffffffffffffdc5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-569ll /* 0xfffffffffffffdc7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-568ll /* 0xfffffffffffffdc8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-567ll /* 0xfffffffffffffdc9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-566ll /* 0xfffffffffffffdca */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-565ll /* 0xfffffffffffffdcb */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-564ll /* 0xfffffffffffffdcc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-563ll /* 0xfffffffffffffdcd */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-561ll /* 0xfffffffffffffdcf */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-560ll /* 0xfffffffffffffdd0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-559ll /* 0xfffffffffffffdd1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-558ll /* 0xfffffffffffffdd2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-557ll /* 0xfffffffffffffdd3 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-556ll /* 0xfffffffffffffdd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-555ll /* 0xfffffffffffffdd5 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-553ll /* 0xfffffffffffffdd7 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-552ll /* 0xfffffffffffffdd8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-551ll /* 0xfffffffffffffdd9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-549ll /* 0xfffffffffffffddb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-548ll /* 0xfffffffffffffddc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-547ll /* 0xfffffffffffffddd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-546ll /* 0xfffffffffffffdde */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-545ll /* 0xfffffffffffffddf */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-544ll /* 0xfffffffffffffde0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-543ll /* 0xfffffffffffffde1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-542ll /* 0xfffffffffffffde2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-540ll /* 0xfffffffffffffde4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-539ll /* 0xfffffffffffffde5 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-536ll /* 0xfffffffffffffde8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-535ll /* 0xfffffffffffffde9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-533ll /* 0xfffffffffffffdeb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-532ll /* 0xfffffffffffffdec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-531ll /* 0xfffffffffffffded */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-530ll /* 0xfffffffffffffdee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-529ll /* 0xfffffffffffffdef */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-528ll /* 0xfffffffffffffdf0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-527ll /* 0xfffffffffffffdf1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-526ll /* 0xfffffffffffffdf2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-525ll /* 0xfffffffffffffdf3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-524ll /* 0xfffffffffffffdf4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-523ll /* 0xfffffffffffffdf5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-522ll /* 0xfffffffffffffdf6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-521ll /* 0xfffffffffffffdf7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-520ll /* 0xfffffffffffffdf8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-519ll /* 0xfffffffffffffdf9 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-518ll /* 0xfffffffffffffdfa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-517ll /* 0xfffffffffffffdfb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-516ll /* 0xfffffffffffffdfc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-515ll /* 0xfffffffffffffdfd */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-514ll /* 0xfffffffffffffdfe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-513ll /* 0xfffffffffffffdff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-512ll /* 0xfffffffffffffe00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {-511ll /* 0xfffffffffffffe01 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-510ll /* 0xfffffffffffffe02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-509ll /* 0xfffffffffffffe03 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-508ll /* 0xfffffffffffffe04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-507ll /* 0xfffffffffffffe05 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-506ll /* 0xfffffffffffffe06 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-505ll /* 0xfffffffffffffe07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-504ll /* 0xfffffffffffffe08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-503ll /* 0xfffffffffffffe09 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-502ll /* 0xfffffffffffffe0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-501ll /* 0xfffffffffffffe0b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-500ll /* 0xfffffffffffffe0c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-499ll /* 0xfffffffffffffe0d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-498ll /* 0xfffffffffffffe0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-497ll /* 0xfffffffffffffe0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-496ll /* 0xfffffffffffffe10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-495ll /* 0xfffffffffffffe11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-494ll /* 0xfffffffffffffe12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-493ll /* 0xfffffffffffffe13 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* shl1add r5, r4, r1 */
+   },
+  {-492ll /* 0xfffffffffffffe14 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-491ll /* 0xfffffffffffffe15 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-489ll /* 0xfffffffffffffe17 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-488ll /* 0xfffffffffffffe18 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-487ll /* 0xfffffffffffffe19 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-485ll /* 0xfffffffffffffe1b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-484ll /* 0xfffffffffffffe1c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 1, 3},                 /* shl2add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-483ll /* 0xfffffffffffffe1d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 1},                 /* shl1add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-482ll /* 0xfffffffffffffe1e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-481ll /* 0xfffffffffffffe1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-480ll /* 0xfffffffffffffe20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-479ll /* 0xfffffffffffffe21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-478ll /* 0xfffffffffffffe22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-477ll /* 0xfffffffffffffe23 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-476ll /* 0xfffffffffffffe24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-475ll /* 0xfffffffffffffe25 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-472ll /* 0xfffffffffffffe28 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-471ll /* 0xfffffffffffffe29 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-468ll /* 0xfffffffffffffe2c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-467ll /* 0xfffffffffffffe2d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-465ll /* 0xfffffffffffffe2f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {-464ll /* 0xfffffffffffffe30 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-463ll /* 0xfffffffffffffe31 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-462ll /* 0xfffffffffffffe32 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-460ll /* 0xfffffffffffffe34 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-457ll /* 0xfffffffffffffe37 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-456ll /* 0xfffffffffffffe38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-455ll /* 0xfffffffffffffe39 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-454ll /* 0xfffffffffffffe3a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-453ll /* 0xfffffffffffffe3b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-452ll /* 0xfffffffffffffe3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-451ll /* 0xfffffffffffffe3d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-450ll /* 0xfffffffffffffe3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-449ll /* 0xfffffffffffffe3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-448ll /* 0xfffffffffffffe40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-447ll /* 0xfffffffffffffe41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-446ll /* 0xfffffffffffffe42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-445ll /* 0xfffffffffffffe43 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-444ll /* 0xfffffffffffffe44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-443ll /* 0xfffffffffffffe45 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-442ll /* 0xfffffffffffffe46 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-441ll /* 0xfffffffffffffe47 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-440ll /* 0xfffffffffffffe48 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-439ll /* 0xfffffffffffffe49 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-438ll /* 0xfffffffffffffe4a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-436ll /* 0xfffffffffffffe4c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-433ll /* 0xfffffffffffffe4f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-432ll /* 0xfffffffffffffe50 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-431ll /* 0xfffffffffffffe51 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-429ll /* 0xfffffffffffffe53 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-428ll /* 0xfffffffffffffe54 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-424ll /* 0xfffffffffffffe58 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-423ll /* 0xfffffffffffffe59 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-419ll /* 0xfffffffffffffe5d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-418ll /* 0xfffffffffffffe5e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {-417ll /* 0xfffffffffffffe5f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-416ll /* 0xfffffffffffffe60 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-415ll /* 0xfffffffffffffe61 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-413ll /* 0xfffffffffffffe63 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-412ll /* 0xfffffffffffffe64 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-411ll /* 0xfffffffffffffe65 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-409ll /* 0xfffffffffffffe67 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-408ll /* 0xfffffffffffffe68 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-407ll /* 0xfffffffffffffe69 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-405ll /* 0xfffffffffffffe6b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-404ll /* 0xfffffffffffffe6c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-403ll /* 0xfffffffffffffe6d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-401ll /* 0xfffffffffffffe6f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-400ll /* 0xfffffffffffffe70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-399ll /* 0xfffffffffffffe71 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-397ll /* 0xfffffffffffffe73 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-396ll /* 0xfffffffffffffe74 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-395ll /* 0xfffffffffffffe75 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-393ll /* 0xfffffffffffffe77 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-392ll /* 0xfffffffffffffe78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-391ll /* 0xfffffffffffffe79 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-390ll /* 0xfffffffffffffe7a */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-389ll /* 0xfffffffffffffe7b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-388ll /* 0xfffffffffffffe7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-387ll /* 0xfffffffffffffe7d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* shl1add r5, r4, r4 */
+   },
+  {-386ll /* 0xfffffffffffffe7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-385ll /* 0xfffffffffffffe7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-384ll /* 0xfffffffffffffe80 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-383ll /* 0xfffffffffffffe81 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-382ll /* 0xfffffffffffffe82 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-381ll /* 0xfffffffffffffe83 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-380ll /* 0xfffffffffffffe84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-379ll /* 0xfffffffffffffe85 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-378ll /* 0xfffffffffffffe86 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-377ll /* 0xfffffffffffffe87 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-376ll /* 0xfffffffffffffe88 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-375ll /* 0xfffffffffffffe89 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-373ll /* 0xfffffffffffffe8b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-372ll /* 0xfffffffffffffe8c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-371ll /* 0xfffffffffffffe8d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-369ll /* 0xfffffffffffffe8f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-368ll /* 0xfffffffffffffe90 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-367ll /* 0xfffffffffffffe91 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-365ll /* 0xfffffffffffffe93 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 1, 3},                 /* shl3add r4, r1, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-364ll /* 0xfffffffffffffe94 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-361ll /* 0xfffffffffffffe97 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-360ll /* 0xfffffffffffffe98 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-359ll /* 0xfffffffffffffe99 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-357ll /* 0xfffffffffffffe9b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-356ll /* 0xfffffffffffffe9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-355ll /* 0xfffffffffffffe9d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-353ll /* 0xfffffffffffffe9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-352ll /* 0xfffffffffffffea0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-351ll /* 0xfffffffffffffea1 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-349ll /* 0xfffffffffffffea3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-348ll /* 0xfffffffffffffea4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-347ll /* 0xfffffffffffffea5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-344ll /* 0xfffffffffffffea8 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-343ll /* 0xfffffffffffffea9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-341ll /* 0xfffffffffffffeab */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-340ll /* 0xfffffffffffffeac */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-339ll /* 0xfffffffffffffead */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-337ll /* 0xfffffffffffffeaf */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-336ll /* 0xfffffffffffffeb0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-335ll /* 0xfffffffffffffeb1 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-333ll /* 0xfffffffffffffeb3 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-332ll /* 0xfffffffffffffeb4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-331ll /* 0xfffffffffffffeb5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-330ll /* 0xfffffffffffffeb6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-329ll /* 0xfffffffffffffeb7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-328ll /* 0xfffffffffffffeb8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-327ll /* 0xfffffffffffffeb9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-325ll /* 0xfffffffffffffebb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-324ll /* 0xfffffffffffffebc */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-323ll /* 0xfffffffffffffebd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-322ll /* 0xfffffffffffffebe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-321ll /* 0xfffffffffffffebf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-320ll /* 0xfffffffffffffec0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {-319ll /* 0xfffffffffffffec1 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-318ll /* 0xfffffffffffffec2 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-317ll /* 0xfffffffffffffec3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-316ll /* 0xfffffffffffffec4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-315ll /* 0xfffffffffffffec5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-314ll /* 0xfffffffffffffec6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-313ll /* 0xfffffffffffffec7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-312ll /* 0xfffffffffffffec8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-311ll /* 0xfffffffffffffec9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-310ll /* 0xfffffffffffffeca */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-309ll /* 0xfffffffffffffecb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-307ll /* 0xfffffffffffffecd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-306ll /* 0xfffffffffffffece */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-305ll /* 0xfffffffffffffecf */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-304ll /* 0xfffffffffffffed0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-303ll /* 0xfffffffffffffed1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-301ll /* 0xfffffffffffffed3 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-300ll /* 0xfffffffffffffed4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-299ll /* 0xfffffffffffffed5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-297ll /* 0xfffffffffffffed7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-296ll /* 0xfffffffffffffed8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-295ll /* 0xfffffffffffffed9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-293ll /* 0xfffffffffffffedb */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-292ll /* 0xfffffffffffffedc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-291ll /* 0xfffffffffffffedd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-290ll /* 0xfffffffffffffede */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {-289ll /* 0xfffffffffffffedf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-288ll /* 0xfffffffffffffee0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {-287ll /* 0xfffffffffffffee1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-286ll /* 0xfffffffffffffee2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-285ll /* 0xfffffffffffffee3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-284ll /* 0xfffffffffffffee4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-283ll /* 0xfffffffffffffee5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-281ll /* 0xfffffffffffffee7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-280ll /* 0xfffffffffffffee8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-279ll /* 0xfffffffffffffee9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-278ll /* 0xfffffffffffffeea */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-277ll /* 0xfffffffffffffeeb */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-276ll /* 0xfffffffffffffeec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-275ll /* 0xfffffffffffffeed */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-274ll /* 0xfffffffffffffeee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-273ll /* 0xfffffffffffffeef */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-272ll /* 0xfffffffffffffef0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-271ll /* 0xfffffffffffffef1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-270ll /* 0xfffffffffffffef2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-269ll /* 0xfffffffffffffef3 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-268ll /* 0xfffffffffffffef4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-267ll /* 0xfffffffffffffef5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-266ll /* 0xfffffffffffffef6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-265ll /* 0xfffffffffffffef7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-264ll /* 0xfffffffffffffef8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-263ll /* 0xfffffffffffffef9 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262ll /* 0xfffffffffffffefa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-261ll /* 0xfffffffffffffefb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-260ll /* 0xfffffffffffffefc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-259ll /* 0xfffffffffffffefd */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-258ll /* 0xfffffffffffffefe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-257ll /* 0xfffffffffffffeff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-256ll /* 0xffffffffffffff00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {-255ll /* 0xffffffffffffff01 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-254ll /* 0xffffffffffffff02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-253ll /* 0xffffffffffffff03 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-252ll /* 0xffffffffffffff04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-251ll /* 0xffffffffffffff05 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-250ll /* 0xffffffffffffff06 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-249ll /* 0xffffffffffffff07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-248ll /* 0xffffffffffffff08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-247ll /* 0xffffffffffffff09 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-246ll /* 0xffffffffffffff0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-245ll /* 0xffffffffffffff0b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-244ll /* 0xffffffffffffff0c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-243ll /* 0xffffffffffffff0d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-242ll /* 0xffffffffffffff0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-241ll /* 0xffffffffffffff0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-240ll /* 0xffffffffffffff10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-239ll /* 0xffffffffffffff11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-238ll /* 0xffffffffffffff12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-237ll /* 0xffffffffffffff13 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* shl1add r5, r4, r1 */
+   },
+  {-236ll /* 0xffffffffffffff14 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-235ll /* 0xffffffffffffff15 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-234ll /* 0xffffffffffffff16 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-233ll /* 0xffffffffffffff17 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-232ll /* 0xffffffffffffff18 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-231ll /* 0xffffffffffffff19 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {-230ll /* 0xffffffffffffff1a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-229ll /* 0xffffffffffffff1b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-228ll /* 0xffffffffffffff1c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-227ll /* 0xffffffffffffff1d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-226ll /* 0xffffffffffffff1e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-225ll /* 0xffffffffffffff1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-224ll /* 0xffffffffffffff20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-223ll /* 0xffffffffffffff21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-222ll /* 0xffffffffffffff22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-221ll /* 0xffffffffffffff23 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-220ll /* 0xffffffffffffff24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-219ll /* 0xffffffffffffff25 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-218ll /* 0xffffffffffffff26 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-217ll /* 0xffffffffffffff27 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-216ll /* 0xffffffffffffff28 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-215ll /* 0xffffffffffffff29 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-214ll /* 0xffffffffffffff2a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-213ll /* 0xffffffffffffff2b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-212ll /* 0xffffffffffffff2c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-211ll /* 0xffffffffffffff2d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-210ll /* 0xffffffffffffff2e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {-209ll /* 0xffffffffffffff2f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-208ll /* 0xffffffffffffff30 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-207ll /* 0xffffffffffffff31 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-205ll /* 0xffffffffffffff33 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-204ll /* 0xffffffffffffff34 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-203ll /* 0xffffffffffffff35 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-202ll /* 0xffffffffffffff36 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-201ll /* 0xffffffffffffff37 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-200ll /* 0xffffffffffffff38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-199ll /* 0xffffffffffffff39 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-198ll /* 0xffffffffffffff3a */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-197ll /* 0xffffffffffffff3b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-196ll /* 0xffffffffffffff3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-195ll /* 0xffffffffffffff3d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* shl1add r5, r4, r4 */
+   },
+  {-194ll /* 0xffffffffffffff3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-193ll /* 0xffffffffffffff3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-192ll /* 0xffffffffffffff40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-191ll /* 0xffffffffffffff41 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-190ll /* 0xffffffffffffff42 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-189ll /* 0xffffffffffffff43 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-188ll /* 0xffffffffffffff44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-187ll /* 0xffffffffffffff45 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-186ll /* 0xffffffffffffff46 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-185ll /* 0xffffffffffffff47 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-184ll /* 0xffffffffffffff48 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-183ll /* 0xffffffffffffff49 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-181ll /* 0xffffffffffffff4b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-180ll /* 0xffffffffffffff4c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-179ll /* 0xffffffffffffff4d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-178ll /* 0xffffffffffffff4e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-177ll /* 0xffffffffffffff4f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-176ll /* 0xffffffffffffff50 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-175ll /* 0xffffffffffffff51 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-173ll /* 0xffffffffffffff53 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-172ll /* 0xffffffffffffff54 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-171ll /* 0xffffffffffffff55 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-170ll /* 0xffffffffffffff56 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-169ll /* 0xffffffffffffff57 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-168ll /* 0xffffffffffffff58 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-167ll /* 0xffffffffffffff59 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-165ll /* 0xffffffffffffff5b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-164ll /* 0xffffffffffffff5c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-163ll /* 0xffffffffffffff5d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-162ll /* 0xffffffffffffff5e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-161ll /* 0xffffffffffffff5f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-160ll /* 0xffffffffffffff60 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {-159ll /* 0xffffffffffffff61 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-158ll /* 0xffffffffffffff62 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-157ll /* 0xffffffffffffff63 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-156ll /* 0xffffffffffffff64 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-155ll /* 0xffffffffffffff65 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-154ll /* 0xffffffffffffff66 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-153ll /* 0xffffffffffffff67 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {-152ll /* 0xffffffffffffff68 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-151ll /* 0xffffffffffffff69 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-150ll /* 0xffffffffffffff6a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-149ll /* 0xffffffffffffff6b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-148ll /* 0xffffffffffffff6c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {-147ll /* 0xffffffffffffff6d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-146ll /* 0xffffffffffffff6e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-145ll /* 0xffffffffffffff6f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-144ll /* 0xffffffffffffff70 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {-143ll /* 0xffffffffffffff71 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-142ll /* 0xffffffffffffff72 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-141ll /* 0xffffffffffffff73 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-140ll /* 0xffffffffffffff74 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-139ll /* 0xffffffffffffff75 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-138ll /* 0xffffffffffffff76 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-137ll /* 0xffffffffffffff77 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-136ll /* 0xffffffffffffff78 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {-135ll /* 0xffffffffffffff79 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134ll /* 0xffffffffffffff7a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-133ll /* 0xffffffffffffff7b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-132ll /* 0xffffffffffffff7c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-131ll /* 0xffffffffffffff7d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-130ll /* 0xffffffffffffff7e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-129ll /* 0xffffffffffffff7f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-128ll /* 0xffffffffffffff80 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {-127ll /* 0xffffffffffffff81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-126ll /* 0xffffffffffffff82 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-125ll /* 0xffffffffffffff83 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-124ll /* 0xffffffffffffff84 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-123ll /* 0xffffffffffffff85 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-122ll /* 0xffffffffffffff86 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-121ll /* 0xffffffffffffff87 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-120ll /* 0xffffffffffffff88 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-119ll /* 0xffffffffffffff89 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-118ll /* 0xffffffffffffff8a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-117ll /* 0xffffffffffffff8b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-116ll /* 0xffffffffffffff8c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-115ll /* 0xffffffffffffff8d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-114ll /* 0xffffffffffffff8e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-113ll /* 0xffffffffffffff8f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-112ll /* 0xffffffffffffff90 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-111ll /* 0xffffffffffffff91 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-110ll /* 0xffffffffffffff92 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-109ll /* 0xffffffffffffff93 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-108ll /* 0xffffffffffffff94 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-107ll /* 0xffffffffffffff95 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {-106ll /* 0xffffffffffffff96 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {-105ll /* 0xffffffffffffff97 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-104ll /* 0xffffffffffffff98 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-103ll /* 0xffffffffffffff99 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {-102ll /* 0xffffffffffffff9a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {-101ll /* 0xffffffffffffff9b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-100ll /* 0xffffffffffffff9c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-99ll /* 0xffffffffffffff9d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* shl1add r5, r4, r4 */
+   },
+  {-98ll /* 0xffffffffffffff9e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-97ll /* 0xffffffffffffff9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-96ll /* 0xffffffffffffffa0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-95ll /* 0xffffffffffffffa1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-94ll /* 0xffffffffffffffa2 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-93ll /* 0xffffffffffffffa3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-92ll /* 0xffffffffffffffa4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-91ll /* 0xffffffffffffffa5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-90ll /* 0xffffffffffffffa6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-89ll /* 0xffffffffffffffa7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-88ll /* 0xffffffffffffffa8 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-87ll /* 0xffffffffffffffa9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-86ll /* 0xffffffffffffffaa */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-85ll /* 0xffffffffffffffab */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {-84ll /* 0xffffffffffffffac */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-83ll /* 0xffffffffffffffad */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-82ll /* 0xffffffffffffffae */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {-81ll /* 0xffffffffffffffaf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {-80ll /* 0xffffffffffffffb0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {-79ll /* 0xffffffffffffffb1 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-78ll /* 0xffffffffffffffb2 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-77ll /* 0xffffffffffffffb3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-76ll /* 0xffffffffffffffb4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-75ll /* 0xffffffffffffffb5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-74ll /* 0xffffffffffffffb6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-73ll /* 0xffffffffffffffb7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-72ll /* 0xffffffffffffffb8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {-71ll /* 0xffffffffffffffb9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-70ll /* 0xffffffffffffffba */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-69ll /* 0xffffffffffffffbb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {-68ll /* 0xffffffffffffffbc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {-67ll /* 0xffffffffffffffbd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-66ll /* 0xffffffffffffffbe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-65ll /* 0xffffffffffffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-64ll /* 0xffffffffffffffc0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {-63ll /* 0xffffffffffffffc1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-62ll /* 0xffffffffffffffc2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-61ll /* 0xffffffffffffffc3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-60ll /* 0xffffffffffffffc4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-59ll /* 0xffffffffffffffc5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-58ll /* 0xffffffffffffffc6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-57ll /* 0xffffffffffffffc7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-56ll /* 0xffffffffffffffc8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-55ll /* 0xffffffffffffffc9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-54ll /* 0xffffffffffffffca */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-53ll /* 0xffffffffffffffcb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {-52ll /* 0xffffffffffffffcc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-51ll /* 0xffffffffffffffcd */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* shl1add r5, r4, r4 */
+   },
+  {-50ll /* 0xffffffffffffffce */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-49ll /* 0xffffffffffffffcf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-48ll /* 0xffffffffffffffd0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-47ll /* 0xffffffffffffffd1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-46ll /* 0xffffffffffffffd2 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-45ll /* 0xffffffffffffffd3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-44ll /* 0xffffffffffffffd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-43ll /* 0xffffffffffffffd5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {-42ll /* 0xffffffffffffffd6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-41ll /* 0xffffffffffffffd7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {-40ll /* 0xffffffffffffffd8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {-39ll /* 0xffffffffffffffd9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-38ll /* 0xffffffffffffffda */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-37ll /* 0xffffffffffffffdb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {-36ll /* 0xffffffffffffffdc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {-35ll /* 0xffffffffffffffdd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34ll /* 0xffffffffffffffde */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {-33ll /* 0xffffffffffffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32ll /* 0xffffffffffffffe0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {-31ll /* 0xffffffffffffffe1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-30ll /* 0xffffffffffffffe2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-29ll /* 0xffffffffffffffe3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-28ll /* 0xffffffffffffffe4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-27ll /* 0xffffffffffffffe5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-26ll /* 0xffffffffffffffe6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-25ll /* 0xffffffffffffffe7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-24ll /* 0xffffffffffffffe8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-23ll /* 0xffffffffffffffe9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-22ll /* 0xffffffffffffffea */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-21ll /* 0xffffffffffffffeb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-20ll /* 0xffffffffffffffec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {-19ll /* 0xffffffffffffffed */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-18ll /* 0xffffffffffffffee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {-17ll /* 0xffffffffffffffef */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16ll /* 0xfffffffffffffff0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {-15ll /* 0xfffffffffffffff1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-14ll /* 0xfffffffffffffff2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-13ll /* 0xfffffffffffffff3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-12ll /* 0xfffffffffffffff4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-11ll /* 0xfffffffffffffff5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-10ll /* 0xfffffffffffffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9ll /* 0xfffffffffffffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2}}                 /* shl3add r3, r2, r2 */
+   },
+  {-8ll /* 0xfffffffffffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {-7ll /* 0xfffffffffffffff9 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-6ll /* 0xfffffffffffffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-5ll /* 0xfffffffffffffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2}}                 /* shl2add r3, r2, r2 */
+   },
+  {-4ll /* 0xfffffffffffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {-3ll /* 0xfffffffffffffffd */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2ll /* 0xfffffffffffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {-1ll /* 0xffffffffffffffff */ ,
+   {{2, 0, 1}}                 /* sub r2, zero, r1 */
+   },
+  {2ll /* 0x2 */ ,
+   {{6, 1, 1}}                 /* shli r2, r1, 1 */
+   },
+  {3ll /* 0x3 */ ,
+   {{3, 1, 1}}                 /* shl1add r2, r1, r1 */
+   },
+  {4ll /* 0x4 */ ,
+   {{6, 1, 2}}                 /* shli r2, r1, 2 */
+   },
+  {5ll /* 0x5 */ ,
+   {{4, 1, 1}}                 /* shl2add r2, r1, r1 */
+   },
+  {6ll /* 0x6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {7ll /* 0x7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8ll /* 0x8 */ ,
+   {{6, 1, 3}}                 /* shli r2, r1, 3 */
+   },
+  {9ll /* 0x9 */ ,
+   {{5, 1, 1}}                 /* shl3add r2, r1, r1 */
+   },
+  {10ll /* 0xa */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {11ll /* 0xb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1}}                 /* shl1add r3, r2, r1 */
+   },
+  {12ll /* 0xc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {13ll /* 0xd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1}}                 /* shl2add r3, r2, r1 */
+   },
+  {14ll /* 0xe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {15ll /* 0xf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16ll /* 0x10 */ ,
+   {{6, 1, 4}}                 /* shli r2, r1, 4 */
+   },
+  {17ll /* 0x11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {18ll /* 0x12 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {19ll /* 0x13 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1}}                 /* shl1add r3, r2, r1 */
+   },
+  {20ll /* 0x14 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {21ll /* 0x15 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1}}                 /* shl2add r3, r2, r1 */
+   },
+  {22ll /* 0x16 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {23ll /* 0x17 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {24ll /* 0x18 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {25ll /* 0x19 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1}}                 /* shl3add r3, r2, r1 */
+   },
+  {26ll /* 0x1a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {27ll /* 0x1b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2}}                 /* shl3add r3, r2, r2 */
+   },
+  {28ll /* 0x1c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {29ll /* 0x1d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {30ll /* 0x1e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {31ll /* 0x1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {32ll /* 0x20 */ ,
+   {{6, 1, 5}}                 /* shli r2, r1, 5 */
+   },
+  {33ll /* 0x21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {34ll /* 0x22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {35ll /* 0x23 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36ll /* 0x24 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {37ll /* 0x25 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1}}                 /* shl2add r3, r2, r1 */
+   },
+  {38ll /* 0x26 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {39ll /* 0x27 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {40ll /* 0x28 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {41ll /* 0x29 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1}}                 /* shl3add r3, r2, r1 */
+   },
+  {42ll /* 0x2a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {43ll /* 0x2b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {44ll /* 0x2c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {45ll /* 0x2d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2}}                 /* shl3add r3, r2, r2 */
+   },
+  {46ll /* 0x2e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {47ll /* 0x2f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {48ll /* 0x30 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {49ll /* 0x31 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {50ll /* 0x32 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {51ll /* 0x33 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {52ll /* 0x34 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {53ll /* 0x35 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {54ll /* 0x36 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {55ll /* 0x37 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {56ll /* 0x38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {57ll /* 0x39 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {58ll /* 0x3a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {59ll /* 0x3b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {60ll /* 0x3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {61ll /* 0x3d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {62ll /* 0x3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {63ll /* 0x3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {64ll /* 0x40 */ ,
+   {{6, 1, 6}}                 /* shli r2, r1, 6 */
+   },
+  {65ll /* 0x41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {66ll /* 0x42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {67ll /* 0x43 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68ll /* 0x44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {69ll /* 0x45 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70ll /* 0x46 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {71ll /* 0x47 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {72ll /* 0x48 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {73ll /* 0x49 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1}}                 /* shl3add r3, r2, r1 */
+   },
+  {74ll /* 0x4a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {75ll /* 0x4b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {76ll /* 0x4c */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {77ll /* 0x4d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {78ll /* 0x4e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {79ll /* 0x4f */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {80ll /* 0x50 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {81ll /* 0x51 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2}}                 /* shl3add r3, r2, r2 */
+   },
+  {82ll /* 0x52 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {83ll /* 0x53 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 1}}                 /* shl1add r4, r3, r1 */
+   },
+  {84ll /* 0x54 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {85ll /* 0x55 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {86ll /* 0x56 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {87ll /* 0x57 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {88ll /* 0x58 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {89ll /* 0x59 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {90ll /* 0x5a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {91ll /* 0x5b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {3, 3, 1}}                 /* shl1add r4, r3, r1 */
+   },
+  {92ll /* 0x5c */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {93ll /* 0x5d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {94ll /* 0x5e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {95ll /* 0x5f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {96ll /* 0x60 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {97ll /* 0x61 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {98ll /* 0x62 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {99ll /* 0x63 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {100ll /* 0x64 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {101ll /* 0x65 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 1}}                 /* shl2add r4, r3, r1 */
+   },
+  {102ll /* 0x66 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {103ll /* 0x67 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {104ll /* 0x68 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {105ll /* 0x69 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {106ll /* 0x6a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {107ll /* 0x6b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {108ll /* 0x6c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {109ll /* 0x6d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 1}}                 /* shl2add r4, r3, r1 */
+   },
+  {110ll /* 0x6e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {111ll /* 0x6f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {112ll /* 0x70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {113ll /* 0x71 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {114ll /* 0x72 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {115ll /* 0x73 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {116ll /* 0x74 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {117ll /* 0x75 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {118ll /* 0x76 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {119ll /* 0x77 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {120ll /* 0x78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {121ll /* 0x79 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {122ll /* 0x7a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {123ll /* 0x7b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {124ll /* 0x7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {125ll /* 0x7d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {126ll /* 0x7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {127ll /* 0x7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {128ll /* 0x80 */ ,
+   {{6, 1, 7}}                 /* shli r2, r1, 7 */
+   },
+  {129ll /* 0x81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {130ll /* 0x82 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {131ll /* 0x83 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {132ll /* 0x84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {133ll /* 0x85 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134ll /* 0x86 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {135ll /* 0x87 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {136ll /* 0x88 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {137ll /* 0x89 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {138ll /* 0x8a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {139ll /* 0x8b */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {140ll /* 0x8c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {141ll /* 0x8d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {142ll /* 0x8e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {143ll /* 0x8f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {144ll /* 0x90 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {145ll /* 0x91 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {146ll /* 0x92 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {147ll /* 0x93 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 1}}                 /* shl1add r4, r3, r1 */
+   },
+  {148ll /* 0x94 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {149ll /* 0x95 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 1}}                 /* shl2add r4, r3, r1 */
+   },
+  {150ll /* 0x96 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {151ll /* 0x97 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {152ll /* 0x98 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {153ll /* 0x99 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {154ll /* 0x9a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {155ll /* 0x9b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {156ll /* 0x9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {157ll /* 0x9d */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {158ll /* 0x9e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {159ll /* 0x9f */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {160ll /* 0xa0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {161ll /* 0xa1 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {162ll /* 0xa2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {163ll /* 0xa3 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {3, 3, 1}}                 /* shl1add r4, r3, r1 */
+   },
+  {164ll /* 0xa4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {165ll /* 0xa5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {166ll /* 0xa6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {167ll /* 0xa7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {168ll /* 0xa8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {169ll /* 0xa9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {170ll /* 0xaa */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {171ll /* 0xab */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {172ll /* 0xac */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {173ll /* 0xad */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {174ll /* 0xae */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {175ll /* 0xaf */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {176ll /* 0xb0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {177ll /* 0xb1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {178ll /* 0xb2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {179ll /* 0xb3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {180ll /* 0xb4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {181ll /* 0xb5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 1}}                 /* shl2add r4, r3, r1 */
+   },
+  {182ll /* 0xb6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {183ll /* 0xb7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {184ll /* 0xb8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {185ll /* 0xb9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {186ll /* 0xba */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {187ll /* 0xbb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {188ll /* 0xbc */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {189ll /* 0xbd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {190ll /* 0xbe */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {191ll /* 0xbf */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {192ll /* 0xc0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {193ll /* 0xc1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {194ll /* 0xc2 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {195ll /* 0xc3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {196ll /* 0xc4 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {197ll /* 0xc5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {198ll /* 0xc6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {199ll /* 0xc7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {200ll /* 0xc8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {201ll /* 0xc9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {202ll /* 0xca */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {203ll /* 0xcb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {204ll /* 0xcc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {205ll /* 0xcd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {206ll /* 0xce */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {207ll /* 0xcf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {208ll /* 0xd0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {209ll /* 0xd1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {210ll /* 0xd2 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {211ll /* 0xd3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {212ll /* 0xd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {213ll /* 0xd5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {214ll /* 0xd6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {215ll /* 0xd7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {216ll /* 0xd8 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {217ll /* 0xd9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {218ll /* 0xda */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {219ll /* 0xdb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {220ll /* 0xdc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {221ll /* 0xdd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {222ll /* 0xde */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {223ll /* 0xdf */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {224ll /* 0xe0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {225ll /* 0xe1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {226ll /* 0xe2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {227ll /* 0xe3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {228ll /* 0xe4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {229ll /* 0xe5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {230ll /* 0xe6 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {231ll /* 0xe7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 8},                 /* shli r4, r1, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {232ll /* 0xe8 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {233ll /* 0xe9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {234ll /* 0xea */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {235ll /* 0xeb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {236ll /* 0xec */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {237ll /* 0xed */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {238ll /* 0xee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {239ll /* 0xef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {240ll /* 0xf0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {241ll /* 0xf1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {242ll /* 0xf2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {243ll /* 0xf3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {244ll /* 0xf4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {245ll /* 0xf5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {246ll /* 0xf6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {247ll /* 0xf7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {248ll /* 0xf8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {249ll /* 0xf9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {250ll /* 0xfa */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {251ll /* 0xfb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {252ll /* 0xfc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {253ll /* 0xfd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {254ll /* 0xfe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {255ll /* 0xff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {256ll /* 0x100 */ ,
+   {{6, 1, 8}}                 /* shli r2, r1, 8 */
+   },
+  {257ll /* 0x101 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {258ll /* 0x102 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {259ll /* 0x103 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {260ll /* 0x104 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {261ll /* 0x105 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262ll /* 0x106 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {263ll /* 0x107 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {264ll /* 0x108 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {265ll /* 0x109 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {266ll /* 0x10a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {267ll /* 0x10b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {268ll /* 0x10c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {269ll /* 0x10d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {270ll /* 0x10e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {271ll /* 0x10f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {272ll /* 0x110 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {273ll /* 0x111 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {274ll /* 0x112 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {275ll /* 0x113 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {276ll /* 0x114 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {277ll /* 0x115 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {278ll /* 0x116 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {279ll /* 0x117 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {280ll /* 0x118 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {281ll /* 0x119 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {282ll /* 0x11a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {283ll /* 0x11b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {284ll /* 0x11c */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {285ll /* 0x11d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {286ll /* 0x11e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {287ll /* 0x11f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {288ll /* 0x120 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {289ll /* 0x121 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {290ll /* 0x122 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {291ll /* 0x123 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {292ll /* 0x124 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {293ll /* 0x125 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 1}}                 /* shl2add r4, r3, r1 */
+   },
+  {294ll /* 0x126 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {295ll /* 0x127 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {296ll /* 0x128 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {297ll /* 0x129 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {298ll /* 0x12a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {299ll /* 0x12b */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {300ll /* 0x12c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {301ll /* 0x12d */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {302ll /* 0x12e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {303ll /* 0x12f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {304ll /* 0x130 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {305ll /* 0x131 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {306ll /* 0x132 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {307ll /* 0x133 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {308ll /* 0x134 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {309ll /* 0x135 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {310ll /* 0x136 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {311ll /* 0x137 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {312ll /* 0x138 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {313ll /* 0x139 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {314ll /* 0x13a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {315ll /* 0x13b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {316ll /* 0x13c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {317ll /* 0x13d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {318ll /* 0x13e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {319ll /* 0x13f */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {320ll /* 0x140 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {321ll /* 0x141 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {322ll /* 0x142 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {323ll /* 0x143 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {324ll /* 0x144 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {325ll /* 0x145 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {326ll /* 0x146 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {327ll /* 0x147 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {328ll /* 0x148 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {329ll /* 0x149 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {330ll /* 0x14a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {331ll /* 0x14b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {332ll /* 0x14c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {333ll /* 0x14d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {334ll /* 0x14e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {335ll /* 0x14f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {336ll /* 0x150 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {337ll /* 0x151 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {338ll /* 0x152 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {339ll /* 0x153 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {340ll /* 0x154 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {341ll /* 0x155 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {342ll /* 0x156 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {343ll /* 0x157 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {344ll /* 0x158 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {345ll /* 0x159 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {346ll /* 0x15a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {347ll /* 0x15b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {348ll /* 0x15c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 2},                 /* shli r4, r2, 2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {349ll /* 0x15d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {350ll /* 0x15e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {351ll /* 0x15f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {352ll /* 0x160 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {353ll /* 0x161 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {354ll /* 0x162 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {355ll /* 0x163 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {356ll /* 0x164 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {357ll /* 0x165 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {358ll /* 0x166 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {359ll /* 0x167 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {360ll /* 0x168 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {361ll /* 0x169 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {362ll /* 0x16a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {363ll /* 0x16b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {364ll /* 0x16c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 2},                 /* shli r4, r1, 2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {365ll /* 0x16d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {366ll /* 0x16e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {367ll /* 0x16f */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {368ll /* 0x170 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {369ll /* 0x171 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {370ll /* 0x172 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {371ll /* 0x173 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {372ll /* 0x174 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {373ll /* 0x175 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {374ll /* 0x176 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {375ll /* 0x177 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {376ll /* 0x178 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {377ll /* 0x179 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {378ll /* 0x17a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {379ll /* 0x17b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {380ll /* 0x17c */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {381ll /* 0x17d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {382ll /* 0x17e */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {383ll /* 0x17f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {384ll /* 0x180 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {385ll /* 0x181 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {386ll /* 0x182 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {387ll /* 0x183 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {388ll /* 0x184 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {389ll /* 0x185 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {390ll /* 0x186 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {391ll /* 0x187 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {392ll /* 0x188 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {393ll /* 0x189 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {394ll /* 0x18a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {395ll /* 0x18b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {396ll /* 0x18c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {397ll /* 0x18d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {398ll /* 0x18e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {399ll /* 0x18f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {400ll /* 0x190 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {401ll /* 0x191 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {402ll /* 0x192 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {403ll /* 0x193 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {404ll /* 0x194 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {405ll /* 0x195 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {406ll /* 0x196 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {407ll /* 0x197 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {408ll /* 0x198 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {409ll /* 0x199 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {410ll /* 0x19a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {411ll /* 0x19b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {412ll /* 0x19c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {413ll /* 0x19d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {414ll /* 0x19e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {415ll /* 0x19f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {416ll /* 0x1a0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {417ll /* 0x1a1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {418ll /* 0x1a2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {419ll /* 0x1a3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {420ll /* 0x1a4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {421ll /* 0x1a5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {422ll /* 0x1a6 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {423ll /* 0x1a7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {424ll /* 0x1a8 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {425ll /* 0x1a9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {426ll /* 0x1aa */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {427ll /* 0x1ab */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {428ll /* 0x1ac */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {429ll /* 0x1ad */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {430ll /* 0x1ae */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {431ll /* 0x1af */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {432ll /* 0x1b0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {433ll /* 0x1b1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {434ll /* 0x1b2 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {435ll /* 0x1b3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {436ll /* 0x1b4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {437ll /* 0x1b5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {438ll /* 0x1b6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {439ll /* 0x1b7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {440ll /* 0x1b8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {441ll /* 0x1b9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {442ll /* 0x1ba */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {443ll /* 0x1bb */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {444ll /* 0x1bc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {445ll /* 0x1bd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {446ll /* 0x1be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {447ll /* 0x1bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {448ll /* 0x1c0 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {449ll /* 0x1c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {450ll /* 0x1c2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {451ll /* 0x1c3 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {452ll /* 0x1c4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {453ll /* 0x1c5 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {454ll /* 0x1c6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {455ll /* 0x1c7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {456ll /* 0x1c8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {457ll /* 0x1c9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {458ll /* 0x1ca */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {459ll /* 0x1cb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {460ll /* 0x1cc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {461ll /* 0x1cd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {462ll /* 0x1ce */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {463ll /* 0x1cf */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {464ll /* 0x1d0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {465ll /* 0x1d1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {467ll /* 0x1d3 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {468ll /* 0x1d4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {469ll /* 0x1d5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {470ll /* 0x1d6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {471ll /* 0x1d7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {472ll /* 0x1d8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {473ll /* 0x1d9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {475ll /* 0x1db */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {476ll /* 0x1dc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {477ll /* 0x1dd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {478ll /* 0x1de */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {479ll /* 0x1df */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {480ll /* 0x1e0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {481ll /* 0x1e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {482ll /* 0x1e2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {483ll /* 0x1e3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {484ll /* 0x1e4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {485ll /* 0x1e5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {486ll /* 0x1e6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {487ll /* 0x1e7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {488ll /* 0x1e8 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {489ll /* 0x1e9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {490ll /* 0x1ea */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {491ll /* 0x1eb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {492ll /* 0x1ec */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {493ll /* 0x1ed */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {494ll /* 0x1ee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {495ll /* 0x1ef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {496ll /* 0x1f0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {497ll /* 0x1f1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {498ll /* 0x1f2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {499ll /* 0x1f3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {500ll /* 0x1f4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {501ll /* 0x1f5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {502ll /* 0x1f6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {503ll /* 0x1f7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {504ll /* 0x1f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {505ll /* 0x1f9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {506ll /* 0x1fa */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {507ll /* 0x1fb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {508ll /* 0x1fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {509ll /* 0x1fd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {510ll /* 0x1fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {511ll /* 0x1ff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {512ll /* 0x200 */ ,
+   {{6, 1, 9}}                 /* shli r2, r1, 9 */
+   },
+  {513ll /* 0x201 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {514ll /* 0x202 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {515ll /* 0x203 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {516ll /* 0x204 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {517ll /* 0x205 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {518ll /* 0x206 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {519ll /* 0x207 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {520ll /* 0x208 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {521ll /* 0x209 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {522ll /* 0x20a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {523ll /* 0x20b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {524ll /* 0x20c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {525ll /* 0x20d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {526ll /* 0x20e */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {527ll /* 0x20f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {528ll /* 0x210 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {529ll /* 0x211 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {530ll /* 0x212 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {531ll /* 0x213 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {532ll /* 0x214 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {533ll /* 0x215 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {534ll /* 0x216 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {535ll /* 0x217 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {536ll /* 0x218 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {537ll /* 0x219 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {538ll /* 0x21a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {539ll /* 0x21b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {540ll /* 0x21c */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {541ll /* 0x21d */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {542ll /* 0x21e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {543ll /* 0x21f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {544ll /* 0x220 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {545ll /* 0x221 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {546ll /* 0x222 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {547ll /* 0x223 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {548ll /* 0x224 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {549ll /* 0x225 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {550ll /* 0x226 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {551ll /* 0x227 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {552ll /* 0x228 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {553ll /* 0x229 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {554ll /* 0x22a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {555ll /* 0x22b */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {556ll /* 0x22c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {557ll /* 0x22d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {558ll /* 0x22e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {559ll /* 0x22f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {560ll /* 0x230 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {561ll /* 0x231 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {562ll /* 0x232 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {563ll /* 0x233 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {564ll /* 0x234 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {565ll /* 0x235 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {566ll /* 0x236 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {567ll /* 0x237 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {568ll /* 0x238 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {569ll /* 0x239 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {570ll /* 0x23a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {571ll /* 0x23b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {572ll /* 0x23c */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {573ll /* 0x23d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {574ll /* 0x23e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {575ll /* 0x23f */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {576ll /* 0x240 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {577ll /* 0x241 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {578ll /* 0x242 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {579ll /* 0x243 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {580ll /* 0x244 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {581ll /* 0x245 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {582ll /* 0x246 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {583ll /* 0x247 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {584ll /* 0x248 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {585ll /* 0x249 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {586ll /* 0x24a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {587ll /* 0x24b */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {588ll /* 0x24c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {589ll /* 0x24d */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {590ll /* 0x24e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {591ll /* 0x24f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {592ll /* 0x250 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {593ll /* 0x251 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {594ll /* 0x252 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {595ll /* 0x253 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {596ll /* 0x254 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {597ll /* 0x255 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {598ll /* 0x256 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {599ll /* 0x257 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {600ll /* 0x258 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {601ll /* 0x259 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {602ll /* 0x25a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {603ll /* 0x25b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {604ll /* 0x25c */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {605ll /* 0x25d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {606ll /* 0x25e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {607ll /* 0x25f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {608ll /* 0x260 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {609ll /* 0x261 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {610ll /* 0x262 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {611ll /* 0x263 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {612ll /* 0x264 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {613ll /* 0x265 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {614ll /* 0x266 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {615ll /* 0x267 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {616ll /* 0x268 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {617ll /* 0x269 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {619ll /* 0x26b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {620ll /* 0x26c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {621ll /* 0x26d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {623ll /* 0x26f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {624ll /* 0x270 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {625ll /* 0x271 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {626ll /* 0x272 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {627ll /* 0x273 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {628ll /* 0x274 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {629ll /* 0x275 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {630ll /* 0x276 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {631ll /* 0x277 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {632ll /* 0x278 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {633ll /* 0x279 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {634ll /* 0x27a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {635ll /* 0x27b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {636ll /* 0x27c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {637ll /* 0x27d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {638ll /* 0x27e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {639ll /* 0x27f */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {640ll /* 0x280 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {641ll /* 0x281 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {642ll /* 0x282 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {643ll /* 0x283 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {644ll /* 0x284 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {645ll /* 0x285 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {646ll /* 0x286 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {647ll /* 0x287 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {648ll /* 0x288 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {649ll /* 0x289 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {650ll /* 0x28a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {651ll /* 0x28b */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {652ll /* 0x28c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {653ll /* 0x28d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {654ll /* 0x28e */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {655ll /* 0x28f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {656ll /* 0x290 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {657ll /* 0x291 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {658ll /* 0x292 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {659ll /* 0x293 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {660ll /* 0x294 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {661ll /* 0x295 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {662ll /* 0x296 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {663ll /* 0x297 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {664ll /* 0x298 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {665ll /* 0x299 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {666ll /* 0x29a */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {667ll /* 0x29b */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {668ll /* 0x29c */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {669ll /* 0x29d */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 1},                 /* shl1add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {670ll /* 0x29e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {671ll /* 0x29f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {672ll /* 0x2a0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {673ll /* 0x2a1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {674ll /* 0x2a2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {675ll /* 0x2a3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {676ll /* 0x2a4 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {677ll /* 0x2a5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {679ll /* 0x2a7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 2, 4}}                 /* shl3add r5, r2, r4 */
+   },
+  {680ll /* 0x2a8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {681ll /* 0x2a9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {682ll /* 0x2aa */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {684ll /* 0x2ac */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 2},                 /* shli r4, r2, 2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {685ll /* 0x2ad */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {688ll /* 0x2b0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 1, 1},                 /* shl2add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {689ll /* 0x2b1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {690ll /* 0x2b2 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {692ll /* 0x2b4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {693ll /* 0x2b5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 1},                 /* shl3add r3, r1, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {694ll /* 0x2b6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 3},                 /* shl2add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {695ll /* 0x2b7 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {696ll /* 0x2b8 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {697ll /* 0x2b9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {699ll /* 0x2bb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {700ll /* 0x2bc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {701ll /* 0x2bd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {702ll /* 0x2be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {703ll /* 0x2bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {704ll /* 0x2c0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {705ll /* 0x2c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {706ll /* 0x2c2 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {707ll /* 0x2c3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {708ll /* 0x2c4 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {709ll /* 0x2c5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {710ll /* 0x2c6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {711ll /* 0x2c7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {712ll /* 0x2c8 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {713ll /* 0x2c9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {714ll /* 0x2ca */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 3},                 /* shl2add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {715ll /* 0x2cb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {716ll /* 0x2cc */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {717ll /* 0x2cd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {719ll /* 0x2cf */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 4, 1}}                 /* sub r5, r4, r1 */
+   },
+  {720ll /* 0x2d0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {721ll /* 0x2d1 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {722ll /* 0x2d2 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {723ll /* 0x2d3 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {724ll /* 0x2d4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {725ll /* 0x2d5 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {726ll /* 0x2d6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {727ll /* 0x2d7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {728ll /* 0x2d8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {729ll /* 0x2d9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3}}                 /* shl3add r4, r3, r3 */
+   },
+  {730ll /* 0x2da */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {731ll /* 0x2db */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 1}}                 /* shl1add r5, r4, r1 */
+   },
+  {733ll /* 0x2dd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {735ll /* 0x2df */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {736ll /* 0x2e0 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {737ll /* 0x2e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {738ll /* 0x2e2 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {739ll /* 0x2e3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {740ll /* 0x2e4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {741ll /* 0x2e5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {743ll /* 0x2e7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {744ll /* 0x2e8 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {745ll /* 0x2e9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {747ll /* 0x2eb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {748ll /* 0x2ec */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {749ll /* 0x2ed */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {750ll /* 0x2ee */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {752ll /* 0x2f0 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {753ll /* 0x2f1 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {755ll /* 0x2f3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {756ll /* 0x2f4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {757ll /* 0x2f5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {758ll /* 0x2f6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {759ll /* 0x2f7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {760ll /* 0x2f8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {761ll /* 0x2f9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {762ll /* 0x2fa */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {763ll /* 0x2fb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {764ll /* 0x2fc */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {765ll /* 0x2fd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {766ll /* 0x2fe */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {767ll /* 0x2ff */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {768ll /* 0x300 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {769ll /* 0x301 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {770ll /* 0x302 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {771ll /* 0x303 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {772ll /* 0x304 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {773ll /* 0x305 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {774ll /* 0x306 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {775ll /* 0x307 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {776ll /* 0x308 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {777ll /* 0x309 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {778ll /* 0x30a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {779ll /* 0x30b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {780ll /* 0x30c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {781ll /* 0x30d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {782ll /* 0x30e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {783ll /* 0x30f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {784ll /* 0x310 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {785ll /* 0x311 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 1, 2},                 /* shl3add r4, r1, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {786ll /* 0x312 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {787ll /* 0x313 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 1, 3},                 /* shl1add r4, r1, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {788ll /* 0x314 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {789ll /* 0x315 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 2, 4}}                 /* shl3add r5, r2, r4 */
+   },
+  {790ll /* 0x316 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {791ll /* 0x317 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {792ll /* 0x318 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {793ll /* 0x319 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {794ll /* 0x31a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {795ll /* 0x31b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {796ll /* 0x31c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {797ll /* 0x31d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {798ll /* 0x31e */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {799ll /* 0x31f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {800ll /* 0x320 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {801ll /* 0x321 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {802ll /* 0x322 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {803ll /* 0x323 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {804ll /* 0x324 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {805ll /* 0x325 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {806ll /* 0x326 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {807ll /* 0x327 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {808ll /* 0x328 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {809ll /* 0x329 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* shl2add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {810ll /* 0x32a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {811ll /* 0x32b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {812ll /* 0x32c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {813ll /* 0x32d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {815ll /* 0x32f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {816ll /* 0x330 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {817ll /* 0x331 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {818ll /* 0x332 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {819ll /* 0x333 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {820ll /* 0x334 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {821ll /* 0x335 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {822ll /* 0x336 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {823ll /* 0x337 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {824ll /* 0x338 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {825ll /* 0x339 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {827ll /* 0x33b */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {828ll /* 0x33c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {829ll /* 0x33d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {831ll /* 0x33f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {832ll /* 0x340 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {833ll /* 0x341 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {834ll /* 0x342 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 2},                 /* shl1add r4, r2, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {835ll /* 0x343 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {836ll /* 0x344 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* shl3add r4, r2, r2 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {837ll /* 0x345 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {838ll /* 0x346 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {840ll /* 0x348 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {841ll /* 0x349 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {842ll /* 0x34a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {843ll /* 0x34b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {844ll /* 0x34c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {845ll /* 0x34d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {846ll /* 0x34e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {848ll /* 0x350 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 2, 2},                 /* shl2add r4, r2, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {849ll /* 0x351 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {850ll /* 0x352 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {852ll /* 0x354 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {853ll /* 0x355 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {855ll /* 0x357 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {856ll /* 0x358 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {857ll /* 0x359 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {858ll /* 0x35a */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {859ll /* 0x35b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {861ll /* 0x35d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {862ll /* 0x35e */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {863ll /* 0x35f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 1}}                 /* sub r5, r4, r1 */
+   },
+  {864ll /* 0x360 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {865ll /* 0x361 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 1, 4}}                 /* add r5, r1, r4 */
+   },
+  {866ll /* 0x362 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {867ll /* 0x363 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {868ll /* 0x364 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {869ll /* 0x365 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {870ll /* 0x366 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {871ll /* 0x367 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {872ll /* 0x368 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {873ll /* 0x369 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {875ll /* 0x36b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {876ll /* 0x36c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {877ll /* 0x36d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {879ll /* 0x36f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {880ll /* 0x370 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {881ll /* 0x371 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 2},                 /* shl1add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {882ll /* 0x372 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {884ll /* 0x374 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {885ll /* 0x375 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {888ll /* 0x378 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {889ll /* 0x379 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {890ll /* 0x37a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {891ll /* 0x37b */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {892ll /* 0x37c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {893ll /* 0x37d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {894ll /* 0x37e */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {895ll /* 0x37f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {896ll /* 0x380 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {897ll /* 0x381 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {898ll /* 0x382 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {899ll /* 0x383 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {900ll /* 0x384 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {901ll /* 0x385 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {902ll /* 0x386 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {903ll /* 0x387 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {904ll /* 0x388 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {905ll /* 0x389 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {906ll /* 0x38a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {908ll /* 0x38c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {3, 3, 3},                 /* shl1add r4, r3, r3 */
+    {3, 4, 2}}                 /* shl1add r5, r4, r2 */
+   },
+  {909ll /* 0x38d */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {910ll /* 0x38e */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {911ll /* 0x38f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {912ll /* 0x390 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {913ll /* 0x391 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* shl1add r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {915ll /* 0x393 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {916ll /* 0x394 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {917ll /* 0x395 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 3, 2},                 /* shl3add r4, r3, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {918ll /* 0x396 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {919ll /* 0x397 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {920ll /* 0x398 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {924ll /* 0x39c */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {925ll /* 0x39d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {927ll /* 0x39f */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {4, 3, 2},                 /* shl2add r4, r3, r2 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {928ll /* 0x3a0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {929ll /* 0x3a1 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* shl2add r4, r1, r2 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {932ll /* 0x3a4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {4, 4, 2}}                 /* shl2add r5, r4, r2 */
+   },
+  {935ll /* 0x3a7 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {936ll /* 0x3a8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* shl3add r4, r2, r3 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {937ll /* 0x3a9 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {939ll /* 0x3ab */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {941ll /* 0x3ad */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {943ll /* 0x3af */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {944ll /* 0x3b0 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {945ll /* 0x3b1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {948ll /* 0x3b4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {949ll /* 0x3b5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {950ll /* 0x3b6 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {951ll /* 0x3b7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {952ll /* 0x3b8 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {953ll /* 0x3b9 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {955ll /* 0x3bb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {4, 4, 4}}                 /* shl2add r5, r4, r4 */
+   },
+  {956ll /* 0x3bc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {957ll /* 0x3bd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {958ll /* 0x3be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {959ll /* 0x3bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {960ll /* 0x3c0 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {961ll /* 0x3c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {962ll /* 0x3c2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {963ll /* 0x3c3 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {964ll /* 0x3c4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {4, 3, 4}}                 /* shl2add r5, r3, r4 */
+   },
+  {965ll /* 0x3c5 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {966ll /* 0x3c6 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* shl1add r4, r3, r2 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {967ll /* 0x3c7 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {968ll /* 0x3c8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {5, 3, 4}}                 /* shl3add r5, r3, r4 */
+   },
+  {969ll /* 0x3c9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* shl1add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {970ll /* 0x3ca */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {971ll /* 0x3cb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 2},                 /* shl2add r3, r2, r2 */
+    {5, 3, 1},                 /* shl3add r4, r3, r1 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {972ll /* 0x3cc */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {973ll /* 0x3cd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {5, 3, 3},                 /* shl3add r4, r3, r3 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {975ll /* 0x3cf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {976ll /* 0x3d0 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {979ll /* 0x3d3 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {980ll /* 0x3d4 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* shl1add r4, r2, r3 */
+    {3, 4, 3}}                 /* shl1add r5, r4, r3 */
+   },
+  {981ll /* 0x3d5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {4, 3, 1},                 /* shl2add r4, r3, r1 */
+    {5, 4, 4}}                 /* shl3add r5, r4, r4 */
+   },
+  {983ll /* 0x3d7 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {984ll /* 0x3d8 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {985ll /* 0x3d9 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* shl3add r5, r4, r1 */
+   },
+  {987ll /* 0x3db */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {988ll /* 0x3dc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {989ll /* 0x3dd */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {990ll /* 0x3de */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {991ll /* 0x3df */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {992ll /* 0x3e0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {993ll /* 0x3e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {994ll /* 0x3e2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* shl1add r5, r3, r4 */
+   },
+  {996ll /* 0x3e4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {997ll /* 0x3e5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* shl3add r4, r2, r1 */
+    {4, 4, 3}}                 /* shl2add r5, r4, r3 */
+   },
+  {999ll /* 0x3e7 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1000ll /* 0x3e8 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {1001ll /* 0x3e9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* shl2add r4, r2, r1 */
+    {5, 4, 3}}                 /* shl3add r5, r4, r3 */
+   },
+  {1003ll /* 0x3eb */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {1004ll /* 0x3ec */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {1005ll /* 0x3ed */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {1006ll /* 0x3ee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1007ll /* 0x3ef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1008ll /* 0x3f0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1009ll /* 0x3f1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {1010ll /* 0x3f2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* shl3add r5, r4, r2 */
+   },
+  {1011ll /* 0x3f3 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1012ll /* 0x3f4 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {1013ll /* 0x3f5 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* shl2add r5, r4, r1 */
+   },
+  {1014ll /* 0x3f6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1015ll /* 0x3f7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1016ll /* 0x3f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1017ll /* 0x3f9 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1018ll /* 0x3fa */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {1019ll /* 0x3fb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1020ll /* 0x3fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1021ll /* 0x3fd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1022ll /* 0x3fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1023ll /* 0x3ff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1024ll /* 0x400 */ ,
+   {{6, 1, 10}}                        /* shli r2, r1, 10 */
+   },
+  {1025ll /* 0x401 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1026ll /* 0x402 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1027ll /* 0x403 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1028ll /* 0x404 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1029ll /* 0x405 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1030ll /* 0x406 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1031ll /* 0x407 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1032ll /* 0x408 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1033ll /* 0x409 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1034ll /* 0x40a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1036ll /* 0x40c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {1040ll /* 0x410 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1041ll /* 0x411 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1042ll /* 0x412 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1044ll /* 0x414 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {1048ll /* 0x418 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {1056ll /* 0x420 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1057ll /* 0x421 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* shl2add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1060ll /* 0x424 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {1064ll /* 0x428 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {1088ll /* 0x440 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1089ll /* 0x441 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* shl3add r3, r1, r2 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1090ll /* 0x442 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {3, 3, 2}}                 /* shl1add r4, r3, r2 */
+   },
+  {1092ll /* 0x444 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {1096ll /* 0x448 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {1152ll /* 0x480 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {1280ll /* 0x500 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {1312ll /* 0x520 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {1320ll /* 0x528 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {1344ll /* 0x540 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {1536ll /* 0x600 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {1664ll /* 0x680 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {2039ll /* 0x7f7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2040ll /* 0x7f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2041ll /* 0x7f9 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2043ll /* 0x7fb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2044ll /* 0x7fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2045ll /* 0x7fd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2046ll /* 0x7fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2047ll /* 0x7ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2048ll /* 0x800 */ ,
+   {{6, 1, 11}}                        /* shli r2, r1, 11 */
+   },
+  {2049ll /* 0x801 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2050ll /* 0x802 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2051ll /* 0x803 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2052ll /* 0x804 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2053ll /* 0x805 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2054ll /* 0x806 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2055ll /* 0x807 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2056ll /* 0x808 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2057ll /* 0x809 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2058ll /* 0x80a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2064ll /* 0x810 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2080ll /* 0x820 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2112ll /* 0x840 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2176ll /* 0x880 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2184ll /* 0x888 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {2304ll /* 0x900 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {2320ll /* 0x910 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {5, 3, 2}}                 /* shl3add r4, r3, r2 */
+   },
+  {2560ll /* 0xa00 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {2592ll /* 0xa20 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {2880ll /* 0xb40 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {3072ll /* 0xc00 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {3328ll /* 0xd00 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {4087ll /* 0xff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4088ll /* 0xff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4089ll /* 0xff9 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4091ll /* 0xffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4092ll /* 0xffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4093ll /* 0xffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4094ll /* 0xffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4095ll /* 0xfff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4096ll /* 0x1000 */ ,
+   {{6, 1, 12}}                        /* shli r2, r1, 12 */
+   },
+  {4097ll /* 0x1001 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4098ll /* 0x1002 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4099ll /* 0x1003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4100ll /* 0x1004 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4101ll /* 0x1005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4102ll /* 0x1006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4103ll /* 0x1007 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4104ll /* 0x1008 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4105ll /* 0x1009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4106ll /* 0x100a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4108ll /* 0x100c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {4112ll /* 0x1010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4128ll /* 0x1020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4160ll /* 0x1040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4224ll /* 0x1080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4352ll /* 0x1100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4608ll /* 0x1200 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {4864ll /* 0x1300 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {3, 2, 1},                 /* shl1add r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {5120ll /* 0x1400 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {6144ll /* 0x1800 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {6400ll /* 0x1900 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {6656ll /* 0x1a00 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {4, 2, 1},                 /* shl2add r3, r2, r1 */
+    {6, 3, 9}}                 /* shli r4, r3, 9 */
+   },
+  {7169ll /* 0x1c01 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* shl3add r4, r2, r3 */
+   },
+  {8183ll /* 0x1ff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8184ll /* 0x1ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8185ll /* 0x1ff9 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {8187ll /* 0x1ffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8188ll /* 0x1ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8189ll /* 0x1ffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8190ll /* 0x1ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8191ll /* 0x1fff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8192ll /* 0x2000 */ ,
+   {{6, 1, 13}}                        /* shli r2, r1, 13 */
+   },
+  {8193ll /* 0x2001 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8194ll /* 0x2002 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {8195ll /* 0x2003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8196ll /* 0x2004 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {8197ll /* 0x2005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8198ll /* 0x2006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8199ll /* 0x2007 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {8200ll /* 0x2008 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {8201ll /* 0x2009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8202ll /* 0x200a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8204ll /* 0x200c */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {4, 2, 3}}                 /* shl2add r4, r2, r3 */
+   },
+  {8208ll /* 0x2010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8224ll /* 0x2020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8256ll /* 0x2040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8320ll /* 0x2080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8448ll /* 0x2100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8704ll /* 0x2200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9216ll /* 0x2400 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {9217ll /* 0x2401 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {10240ll /* 0x2800 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {10248ll /* 0x2808 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {3, 1, 2},                 /* shl1add r3, r1, r2 */
+    {4, 3, 2}}                 /* shl2add r4, r3, r2 */
+   },
+  {10368ll /* 0x2880 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {12288ll /* 0x3000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {16375ll /* 0x3ff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16376ll /* 0x3ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16377ll /* 0x3ff9 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {16379ll /* 0x3ffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16380ll /* 0x3ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16381ll /* 0x3ffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16382ll /* 0x3ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16383ll /* 0x3fff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16384ll /* 0x4000 */ ,
+   {{6, 1, 14}}                        /* shli r2, r1, 14 */
+   },
+  {16385ll /* 0x4001 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {16386ll /* 0x4002 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {16387ll /* 0x4003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16388ll /* 0x4004 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {16389ll /* 0x4005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16390ll /* 0x4006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {16391ll /* 0x4007 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {16392ll /* 0x4008 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {16393ll /* 0x4009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16394ll /* 0x400a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {16400ll /* 0x4010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16416ll /* 0x4020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16448ll /* 0x4040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16512ll /* 0x4080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16640ll /* 0x4100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16896ll /* 0x4200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17408ll /* 0x4400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18432ll /* 0x4800 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {20480ll /* 0x5000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {24576ll /* 0x6000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {25600ll /* 0x6400 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {5, 2, 1},                 /* shl3add r3, r2, r1 */
+    {6, 3, 10}}                        /* shli r4, r3, 10 */
+   },
+  {32759ll /* 0x7ff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32760ll /* 0x7ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32761ll /* 0x7ff9 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {32763ll /* 0x7ffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32764ll /* 0x7ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32765ll /* 0x7ffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32766ll /* 0x7ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32767ll /* 0x7fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {32768ll /* 0x8000 */ ,
+   {{6, 1, 15}}                        /* shli r2, r1, 15 */
+   },
+  {32769ll /* 0x8001 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {32770ll /* 0x8002 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {32771ll /* 0x8003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32772ll /* 0x8004 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {32773ll /* 0x8005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32774ll /* 0x8006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {32775ll /* 0x8007 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {32776ll /* 0x8008 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {32777ll /* 0x8009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32778ll /* 0x800a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {32784ll /* 0x8010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32800ll /* 0x8020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32832ll /* 0x8040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32896ll /* 0x8080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33024ll /* 0x8100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33280ll /* 0x8200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33792ll /* 0x8400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34816ll /* 0x8800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36864ll /* 0x9000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {40960ll /* 0xa000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {49152ll /* 0xc000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {65527ll /* 0xfff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65528ll /* 0xfff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65529ll /* 0xfff9 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {65531ll /* 0xfffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65532ll /* 0xfffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65533ll /* 0xfffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65534ll /* 0xfffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65535ll /* 0xffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {65536ll /* 0x10000 */ ,
+   {{6, 1, 16}}                        /* shli r2, r1, 16 */
+   },
+  {65537ll /* 0x10001 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {65538ll /* 0x10002 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {65539ll /* 0x10003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65540ll /* 0x10004 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {65541ll /* 0x10005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65542ll /* 0x10006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {65543ll /* 0x10007 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {65544ll /* 0x10008 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {65545ll /* 0x10009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65546ll /* 0x1000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {65552ll /* 0x10010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65568ll /* 0x10020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65600ll /* 0x10040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65664ll /* 0x10080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65792ll /* 0x10100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {66048ll /* 0x10200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {66560ll /* 0x10400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67584ll /* 0x10800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69632ll /* 0x11000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {73728ll /* 0x12000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {81920ll /* 0x14000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {98304ll /* 0x18000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {131063ll /* 0x1fff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131064ll /* 0x1fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131065ll /* 0x1fff9 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {131067ll /* 0x1fffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131068ll /* 0x1fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131069ll /* 0x1fffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131070ll /* 0x1fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131071ll /* 0x1ffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {131072ll /* 0x20000 */ ,
+   {{6, 1, 17}}                        /* shli r2, r1, 17 */
+   },
+  {131073ll /* 0x20001 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {131074ll /* 0x20002 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {131075ll /* 0x20003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131076ll /* 0x20004 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {131077ll /* 0x20005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131078ll /* 0x20006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {131079ll /* 0x20007 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {131080ll /* 0x20008 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {131081ll /* 0x20009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131082ll /* 0x2000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {131088ll /* 0x20010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131104ll /* 0x20020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131136ll /* 0x20040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131200ll /* 0x20080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131328ll /* 0x20100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131584ll /* 0x20200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {132096ll /* 0x20400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {133120ll /* 0x20800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {135168ll /* 0x21000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {139264ll /* 0x22000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {147456ll /* 0x24000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {163840ll /* 0x28000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {196608ll /* 0x30000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {262135ll /* 0x3fff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262136ll /* 0x3fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262137ll /* 0x3fff9 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {262139ll /* 0x3fffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262140ll /* 0x3fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262141ll /* 0x3fffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262142ll /* 0x3fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262143ll /* 0x3ffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {262144ll /* 0x40000 */ ,
+   {{6, 1, 18}}                        /* shli r2, r1, 18 */
+   },
+  {262145ll /* 0x40001 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {262146ll /* 0x40002 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {262147ll /* 0x40003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262148ll /* 0x40004 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {262149ll /* 0x40005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262150ll /* 0x40006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {262151ll /* 0x40007 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {262152ll /* 0x40008 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {262153ll /* 0x40009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262154ll /* 0x4000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {262160ll /* 0x40010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262176ll /* 0x40020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262208ll /* 0x40040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262272ll /* 0x40080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262400ll /* 0x40100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262656ll /* 0x40200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {263168ll /* 0x40400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {264192ll /* 0x40800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {266240ll /* 0x41000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {270336ll /* 0x42000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {278528ll /* 0x44000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {294912ll /* 0x48000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {327680ll /* 0x50000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {393216ll /* 0x60000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {524279ll /* 0x7fff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524280ll /* 0x7fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524281ll /* 0x7fff9 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {524283ll /* 0x7fffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524284ll /* 0x7fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524285ll /* 0x7fffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524286ll /* 0x7fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524287ll /* 0x7ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {524288ll /* 0x80000 */ ,
+   {{6, 1, 19}}                        /* shli r2, r1, 19 */
+   },
+  {524289ll /* 0x80001 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {524290ll /* 0x80002 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {524291ll /* 0x80003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524292ll /* 0x80004 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {524293ll /* 0x80005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524294ll /* 0x80006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {524295ll /* 0x80007 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {524296ll /* 0x80008 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {524297ll /* 0x80009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524298ll /* 0x8000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {524304ll /* 0x80010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524320ll /* 0x80020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524352ll /* 0x80040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524416ll /* 0x80080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524544ll /* 0x80100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524800ll /* 0x80200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {525312ll /* 0x80400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {526336ll /* 0x80800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {528384ll /* 0x81000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {532480ll /* 0x82000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {540672ll /* 0x84000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {557056ll /* 0x88000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {589824ll /* 0x90000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {655360ll /* 0xa0000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {786432ll /* 0xc0000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {1048567ll /* 0xffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048568ll /* 0xffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048569ll /* 0xffff9 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1048571ll /* 0xffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048572ll /* 0xffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048573ll /* 0xffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048574ll /* 0xffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048575ll /* 0xfffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1048576ll /* 0x100000 */ ,
+   {{6, 1, 20}}                        /* shli r2, r1, 20 */
+   },
+  {1048577ll /* 0x100001 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1048578ll /* 0x100002 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1048579ll /* 0x100003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048580ll /* 0x100004 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1048581ll /* 0x100005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048582ll /* 0x100006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1048583ll /* 0x100007 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1048584ll /* 0x100008 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1048585ll /* 0x100009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048586ll /* 0x10000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1048592ll /* 0x100010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048608ll /* 0x100020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048640ll /* 0x100040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048704ll /* 0x100080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048832ll /* 0x100100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1049088ll /* 0x100200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1049600ll /* 0x100400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1050624ll /* 0x100800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1052672ll /* 0x101000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1056768ll /* 0x102000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1064960ll /* 0x104000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1081344ll /* 0x108000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1114112ll /* 0x110000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1179648ll /* 0x120000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {1310720ll /* 0x140000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {1572864ll /* 0x180000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {2097143ll /* 0x1ffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097144ll /* 0x1ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097145ll /* 0x1ffff9 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2097147ll /* 0x1ffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097148ll /* 0x1ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097149ll /* 0x1ffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097150ll /* 0x1ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097151ll /* 0x1fffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2097152ll /* 0x200000 */ ,
+   {{6, 1, 21}}                        /* shli r2, r1, 21 */
+   },
+  {2097153ll /* 0x200001 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2097154ll /* 0x200002 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2097155ll /* 0x200003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097156ll /* 0x200004 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2097157ll /* 0x200005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097158ll /* 0x200006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2097159ll /* 0x200007 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2097160ll /* 0x200008 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2097161ll /* 0x200009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097162ll /* 0x20000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2097168ll /* 0x200010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097184ll /* 0x200020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097216ll /* 0x200040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097280ll /* 0x200080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097408ll /* 0x200100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097664ll /* 0x200200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2098176ll /* 0x200400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2099200ll /* 0x200800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2101248ll /* 0x201000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2105344ll /* 0x202000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2113536ll /* 0x204000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2129920ll /* 0x208000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2162688ll /* 0x210000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2228224ll /* 0x220000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2359296ll /* 0x240000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {2621440ll /* 0x280000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {3145728ll /* 0x300000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {4194295ll /* 0x3ffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194296ll /* 0x3ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194297ll /* 0x3ffff9 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4194299ll /* 0x3ffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194300ll /* 0x3ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194301ll /* 0x3ffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194302ll /* 0x3ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194303ll /* 0x3fffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4194304ll /* 0x400000 */ ,
+   {{6, 1, 22}}                        /* shli r2, r1, 22 */
+   },
+  {4194305ll /* 0x400001 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4194306ll /* 0x400002 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4194307ll /* 0x400003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194308ll /* 0x400004 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4194309ll /* 0x400005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194310ll /* 0x400006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4194311ll /* 0x400007 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4194312ll /* 0x400008 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4194313ll /* 0x400009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194314ll /* 0x40000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4194320ll /* 0x400010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194336ll /* 0x400020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194368ll /* 0x400040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194432ll /* 0x400080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194560ll /* 0x400100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194816ll /* 0x400200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4195328ll /* 0x400400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4196352ll /* 0x400800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4198400ll /* 0x401000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4202496ll /* 0x402000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4210688ll /* 0x404000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4227072ll /* 0x408000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4259840ll /* 0x410000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4325376ll /* 0x420000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4456448ll /* 0x440000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4718592ll /* 0x480000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {5242880ll /* 0x500000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {6291456ll /* 0x600000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {8388599ll /* 0x7ffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388600ll /* 0x7ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388601ll /* 0x7ffff9 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {8388603ll /* 0x7ffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388604ll /* 0x7ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388605ll /* 0x7ffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388606ll /* 0x7ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388607ll /* 0x7fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8388608ll /* 0x800000 */ ,
+   {{6, 1, 23}}                        /* shli r2, r1, 23 */
+   },
+  {8388609ll /* 0x800001 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8388610ll /* 0x800002 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {8388611ll /* 0x800003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388612ll /* 0x800004 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {8388613ll /* 0x800005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388614ll /* 0x800006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8388615ll /* 0x800007 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {8388616ll /* 0x800008 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {8388617ll /* 0x800009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388618ll /* 0x80000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8388624ll /* 0x800010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388640ll /* 0x800020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388672ll /* 0x800040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388736ll /* 0x800080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388864ll /* 0x800100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8389120ll /* 0x800200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8389632ll /* 0x800400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8390656ll /* 0x800800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8392704ll /* 0x801000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8396800ll /* 0x802000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8404992ll /* 0x804000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8421376ll /* 0x808000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8454144ll /* 0x810000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8519680ll /* 0x820000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8650752ll /* 0x840000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8912896ll /* 0x880000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9437184ll /* 0x900000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {10485760ll /* 0xa00000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {11796480ll /* 0xb40000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 18}}                        /* shli r4, r3, 18 */
+   },
+  {12582912ll /* 0xc00000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {16777207ll /* 0xfffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777208ll /* 0xfffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777209ll /* 0xfffff9 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {16777211ll /* 0xfffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777212ll /* 0xfffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777213ll /* 0xfffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777214ll /* 0xfffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777215ll /* 0xffffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16777216ll /* 0x1000000 */ ,
+   {{6, 1, 24}}                        /* shli r2, r1, 24 */
+   },
+  {16777217ll /* 0x1000001 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {16777218ll /* 0x1000002 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {16777219ll /* 0x1000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777220ll /* 0x1000004 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {16777221ll /* 0x1000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777222ll /* 0x1000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {16777223ll /* 0x1000007 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {16777224ll /* 0x1000008 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {16777225ll /* 0x1000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777226ll /* 0x100000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {16777232ll /* 0x1000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777248ll /* 0x1000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777280ll /* 0x1000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777344ll /* 0x1000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777472ll /* 0x1000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777728ll /* 0x1000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16778240ll /* 0x1000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16779264ll /* 0x1000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16781312ll /* 0x1001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16785408ll /* 0x1002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16793600ll /* 0x1004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16809984ll /* 0x1008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16842752ll /* 0x1010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16908288ll /* 0x1020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17039360ll /* 0x1040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17301504ll /* 0x1080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17825792ll /* 0x1100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18874368ll /* 0x1200000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {20971520ll /* 0x1400000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {23592960ll /* 0x1680000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {5, 2, 2},                 /* shl3add r3, r2, r2 */
+    {6, 3, 19}}                        /* shli r4, r3, 19 */
+   },
+  {25165824ll /* 0x1800000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {33554423ll /* 0x1fffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554424ll /* 0x1fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554425ll /* 0x1fffff9 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {33554427ll /* 0x1fffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554428ll /* 0x1fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554429ll /* 0x1fffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554430ll /* 0x1fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554431ll /* 0x1ffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {33554432ll /* 0x2000000 */ ,
+   {{6, 1, 25}}                        /* shli r2, r1, 25 */
+   },
+  {33554433ll /* 0x2000001 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {33554434ll /* 0x2000002 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {33554435ll /* 0x2000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554436ll /* 0x2000004 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {33554437ll /* 0x2000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554438ll /* 0x2000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {33554439ll /* 0x2000007 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {33554440ll /* 0x2000008 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {33554441ll /* 0x2000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554442ll /* 0x200000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {33554448ll /* 0x2000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554464ll /* 0x2000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554496ll /* 0x2000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554560ll /* 0x2000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554688ll /* 0x2000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554944ll /* 0x2000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33555456ll /* 0x2000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33556480ll /* 0x2000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33558528ll /* 0x2001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33562624ll /* 0x2002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33570816ll /* 0x2004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33587200ll /* 0x2008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33619968ll /* 0x2010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33685504ll /* 0x2020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33816576ll /* 0x2040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34078720ll /* 0x2080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34603008ll /* 0x2100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35651584ll /* 0x2200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {37748736ll /* 0x2400000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {41943040ll /* 0x2800000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {50331648ll /* 0x3000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {67108855ll /* 0x3fffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108856ll /* 0x3fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108857ll /* 0x3fffff9 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {67108859ll /* 0x3fffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108860ll /* 0x3fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108861ll /* 0x3fffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108862ll /* 0x3fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108863ll /* 0x3ffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {67108864ll /* 0x4000000 */ ,
+   {{6, 1, 26}}                        /* shli r2, r1, 26 */
+   },
+  {67108865ll /* 0x4000001 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {67108866ll /* 0x4000002 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {67108867ll /* 0x4000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108868ll /* 0x4000004 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {67108869ll /* 0x4000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108870ll /* 0x4000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {67108871ll /* 0x4000007 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {67108872ll /* 0x4000008 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {67108873ll /* 0x4000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108874ll /* 0x400000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {67108880ll /* 0x4000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108896ll /* 0x4000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108928ll /* 0x4000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108992ll /* 0x4000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109120ll /* 0x4000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109376ll /* 0x4000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109888ll /* 0x4000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67110912ll /* 0x4000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67112960ll /* 0x4001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67117056ll /* 0x4002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67125248ll /* 0x4004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67141632ll /* 0x4008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67174400ll /* 0x4010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67239936ll /* 0x4020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67371008ll /* 0x4040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67633152ll /* 0x4080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68157440ll /* 0x4100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69206016ll /* 0x4200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {71303168ll /* 0x4400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {75497472ll /* 0x4800000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {83886080ll /* 0x5000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {100663296ll /* 0x6000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {134217719ll /* 0x7fffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217720ll /* 0x7fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217721ll /* 0x7fffff9 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {134217723ll /* 0x7fffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217724ll /* 0x7fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217725ll /* 0x7fffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217726ll /* 0x7fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217727ll /* 0x7ffffff */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {134217728ll /* 0x8000000 */ ,
+   {{6, 1, 27}}                        /* shli r2, r1, 27 */
+   },
+  {134217729ll /* 0x8000001 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {134217730ll /* 0x8000002 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {134217731ll /* 0x8000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217732ll /* 0x8000004 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {134217733ll /* 0x8000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217734ll /* 0x8000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {134217735ll /* 0x8000007 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {134217736ll /* 0x8000008 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {134217737ll /* 0x8000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217738ll /* 0x800000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {134217744ll /* 0x8000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217760ll /* 0x8000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217792ll /* 0x8000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217856ll /* 0x8000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217984ll /* 0x8000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134218240ll /* 0x8000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134218752ll /* 0x8000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134219776ll /* 0x8000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134221824ll /* 0x8001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134225920ll /* 0x8002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134234112ll /* 0x8004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134250496ll /* 0x8008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134283264ll /* 0x8010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134348800ll /* 0x8020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134479872ll /* 0x8040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134742016ll /* 0x8080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {135266304ll /* 0x8100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {136314880ll /* 0x8200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {138412032ll /* 0x8400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {142606336ll /* 0x8800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {150994944ll /* 0x9000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {167772160ll /* 0xa000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {201326592ll /* 0xc000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {268435447ll /* 0xffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435448ll /* 0xffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435449ll /* 0xffffff9 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {268435451ll /* 0xffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435452ll /* 0xffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435453ll /* 0xffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435454ll /* 0xffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435455ll /* 0xfffffff */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {268435456ll /* 0x10000000 */ ,
+   {{6, 1, 28}}                        /* shli r2, r1, 28 */
+   },
+  {268435457ll /* 0x10000001 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {268435458ll /* 0x10000002 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {268435459ll /* 0x10000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435460ll /* 0x10000004 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {268435461ll /* 0x10000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435462ll /* 0x10000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {268435463ll /* 0x10000007 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {268435464ll /* 0x10000008 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {268435465ll /* 0x10000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435466ll /* 0x1000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {268435472ll /* 0x10000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435488ll /* 0x10000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435520ll /* 0x10000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435584ll /* 0x10000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435712ll /* 0x10000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435968ll /* 0x10000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268436480ll /* 0x10000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268437504ll /* 0x10000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268439552ll /* 0x10001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268443648ll /* 0x10002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268451840ll /* 0x10004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268468224ll /* 0x10008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268500992ll /* 0x10010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268566528ll /* 0x10020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268697600ll /* 0x10040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268959744ll /* 0x10080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {269484032ll /* 0x10100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {270532608ll /* 0x10200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {272629760ll /* 0x10400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {276824064ll /* 0x10800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {285212672ll /* 0x11000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {301989888ll /* 0x12000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {335544320ll /* 0x14000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {402653184ll /* 0x18000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {536870903ll /* 0x1ffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870904ll /* 0x1ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870905ll /* 0x1ffffff9 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {536870907ll /* 0x1ffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870908ll /* 0x1ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870909ll /* 0x1ffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870910ll /* 0x1ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870911ll /* 0x1fffffff */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {536870912ll /* 0x20000000 */ ,
+   {{6, 1, 29}}                        /* shli r2, r1, 29 */
+   },
+  {536870913ll /* 0x20000001 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {536870914ll /* 0x20000002 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {536870915ll /* 0x20000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870916ll /* 0x20000004 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {536870917ll /* 0x20000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870918ll /* 0x20000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {536870919ll /* 0x20000007 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {536870920ll /* 0x20000008 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {536870921ll /* 0x20000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870922ll /* 0x2000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {536870928ll /* 0x20000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870944ll /* 0x20000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870976ll /* 0x20000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871040ll /* 0x20000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871168ll /* 0x20000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871424ll /* 0x20000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871936ll /* 0x20000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536872960ll /* 0x20000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536875008ll /* 0x20001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536879104ll /* 0x20002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536887296ll /* 0x20004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536903680ll /* 0x20008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536936448ll /* 0x20010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537001984ll /* 0x20020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537133056ll /* 0x20040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537395200ll /* 0x20080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537919488ll /* 0x20100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {538968064ll /* 0x20200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {541065216ll /* 0x20400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {545259520ll /* 0x20800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {553648128ll /* 0x21000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {570425344ll /* 0x22000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {603979776ll /* 0x24000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {671088640ll /* 0x28000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {805306368ll /* 0x30000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {1073741815ll /* 0x3ffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741816ll /* 0x3ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741817ll /* 0x3ffffff9 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1073741819ll /* 0x3ffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741820ll /* 0x3ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741821ll /* 0x3ffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741822ll /* 0x3ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741823ll /* 0x3fffffff */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1073741824ll /* 0x40000000 */ ,
+   {{6, 1, 30}}                        /* shli r2, r1, 30 */
+   },
+  {1073741825ll /* 0x40000001 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1073741826ll /* 0x40000002 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1073741827ll /* 0x40000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741828ll /* 0x40000004 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1073741829ll /* 0x40000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741830ll /* 0x40000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1073741831ll /* 0x40000007 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1073741832ll /* 0x40000008 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1073741833ll /* 0x40000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741834ll /* 0x4000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1073741840ll /* 0x40000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741856ll /* 0x40000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741888ll /* 0x40000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741952ll /* 0x40000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742080ll /* 0x40000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742336ll /* 0x40000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742848ll /* 0x40000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073743872ll /* 0x40000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073745920ll /* 0x40001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073750016ll /* 0x40002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073758208ll /* 0x40004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073774592ll /* 0x40008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073807360ll /* 0x40010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073872896ll /* 0x40020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074003968ll /* 0x40040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074266112ll /* 0x40080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074790400ll /* 0x40100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1075838976ll /* 0x40200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1077936128ll /* 0x40400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1082130432ll /* 0x40800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1090519040ll /* 0x41000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1107296256ll /* 0x42000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1140850688ll /* 0x44000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1207959552ll /* 0x48000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {1342177280ll /* 0x50000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {1610612736ll /* 0x60000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {2147483639ll /* 0x7ffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483640ll /* 0x7ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483641ll /* 0x7ffffff9 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2147483643ll /* 0x7ffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483644ll /* 0x7ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483645ll /* 0x7ffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483646ll /* 0x7ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483647ll /* 0x7fffffff */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2147483648ll /* 0x80000000 */ ,
+   {{6, 1, 31}}                        /* shli r2, r1, 31 */
+   },
+  {2147483649ll /* 0x80000001 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2147483650ll /* 0x80000002 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2147483651ll /* 0x80000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483652ll /* 0x80000004 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2147483653ll /* 0x80000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483654ll /* 0x80000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2147483655ll /* 0x80000007 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2147483656ll /* 0x80000008 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2147483657ll /* 0x80000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483658ll /* 0x8000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2147483664ll /* 0x80000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483680ll /* 0x80000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483712ll /* 0x80000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483776ll /* 0x80000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147483904ll /* 0x80000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147484160ll /* 0x80000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147484672ll /* 0x80000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147485696ll /* 0x80000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147487744ll /* 0x80001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147491840ll /* 0x80002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147500032ll /* 0x80004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147516416ll /* 0x80008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147549184ll /* 0x80010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147614720ll /* 0x80020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2147745792ll /* 0x80040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2148007936ll /* 0x80080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2148532224ll /* 0x80100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2149580800ll /* 0x80200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2151677952ll /* 0x80400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2155872256ll /* 0x80800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2164260864ll /* 0x81000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2181038080ll /* 0x82000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2214592512ll /* 0x84000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2281701376ll /* 0x88000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2415919104ll /* 0x90000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {2684354560ll /* 0xa0000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {3221225472ll /* 0xc0000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 30}}                        /* shli r3, r2, 30 */
+   },
+  {4294967287ll /* 0xfffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967288ll /* 0xfffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967289ll /* 0xfffffff9 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4294967291ll /* 0xfffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967292ll /* 0xfffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967293ll /* 0xfffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967294ll /* 0xfffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4294967295ll /* 0xffffffff */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4294967296ll /* 0x100000000 */ ,
+   {{6, 1, 32}}                        /* shli r2, r1, 32 */
+   },
+  {4294967297ll /* 0x100000001 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4294967298ll /* 0x100000002 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4294967299ll /* 0x100000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967300ll /* 0x100000004 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4294967301ll /* 0x100000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967302ll /* 0x100000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4294967303ll /* 0x100000007 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4294967304ll /* 0x100000008 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4294967305ll /* 0x100000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967306ll /* 0x10000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4294967312ll /* 0x100000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967328ll /* 0x100000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967360ll /* 0x100000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967424ll /* 0x100000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967552ll /* 0x100000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294967808ll /* 0x100000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294968320ll /* 0x100000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294969344ll /* 0x100000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294971392ll /* 0x100001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294975488ll /* 0x100002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4294983680ll /* 0x100004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4295000064ll /* 0x100008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4295032832ll /* 0x100010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4295098368ll /* 0x100020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4295229440ll /* 0x100040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4295491584ll /* 0x100080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4296015872ll /* 0x100100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4297064448ll /* 0x100200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4299161600ll /* 0x100400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4303355904ll /* 0x100800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4311744512ll /* 0x101000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4328521728ll /* 0x102000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4362076160ll /* 0x104000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4429185024ll /* 0x108000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4563402752ll /* 0x110000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 32},                        /* shli r3, r1, 32 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4831838208ll /* 0x120000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {5368709120ll /* 0x140000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 30}}                        /* shli r3, r2, 30 */
+   },
+  {6442450944ll /* 0x180000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 31}}                        /* shli r3, r2, 31 */
+   },
+  {8589934583ll /* 0x1fffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934584ll /* 0x1fffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934585ll /* 0x1fffffff9 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {8589934587ll /* 0x1fffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934588ll /* 0x1fffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934589ll /* 0x1fffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934590ll /* 0x1fffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8589934591ll /* 0x1ffffffff */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8589934592ll /* 0x200000000 */ ,
+   {{6, 1, 33}}                        /* shli r2, r1, 33 */
+   },
+  {8589934593ll /* 0x200000001 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8589934594ll /* 0x200000002 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {8589934595ll /* 0x200000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934596ll /* 0x200000004 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {8589934597ll /* 0x200000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934598ll /* 0x200000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8589934599ll /* 0x200000007 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {8589934600ll /* 0x200000008 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {8589934601ll /* 0x200000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934602ll /* 0x20000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8589934608ll /* 0x200000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934624ll /* 0x200000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934656ll /* 0x200000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934720ll /* 0x200000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589934848ll /* 0x200000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589935104ll /* 0x200000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589935616ll /* 0x200000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589936640ll /* 0x200000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589938688ll /* 0x200001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589942784ll /* 0x200002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589950976ll /* 0x200004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8589967360ll /* 0x200008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8590000128ll /* 0x200010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8590065664ll /* 0x200020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8590196736ll /* 0x200040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8590458880ll /* 0x200080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8590983168ll /* 0x200100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8592031744ll /* 0x200200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8594128896ll /* 0x200400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8598323200ll /* 0x200800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8606711808ll /* 0x201000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8623489024ll /* 0x202000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8657043456ll /* 0x204000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8724152320ll /* 0x208000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8858370048ll /* 0x210000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9126805504ll /* 0x220000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 33},                        /* shli r3, r1, 33 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9663676416ll /* 0x240000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 30}}                        /* shli r3, r2, 30 */
+   },
+  {10737418240ll /* 0x280000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 31}}                        /* shli r3, r2, 31 */
+   },
+  {12884901888ll /* 0x300000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 32}}                        /* shli r3, r2, 32 */
+   },
+  {17179869175ll /* 0x3fffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869176ll /* 0x3fffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869177ll /* 0x3fffffff9 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {17179869179ll /* 0x3fffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869180ll /* 0x3fffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869181ll /* 0x3fffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869182ll /* 0x3fffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17179869183ll /* 0x3ffffffff */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {17179869184ll /* 0x400000000 */ ,
+   {{6, 1, 34}}                        /* shli r2, r1, 34 */
+   },
+  {17179869185ll /* 0x400000001 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {17179869186ll /* 0x400000002 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {17179869187ll /* 0x400000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869188ll /* 0x400000004 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {17179869189ll /* 0x400000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869190ll /* 0x400000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {17179869191ll /* 0x400000007 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {17179869192ll /* 0x400000008 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {17179869193ll /* 0x400000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869194ll /* 0x40000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {17179869200ll /* 0x400000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869216ll /* 0x400000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869248ll /* 0x400000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869312ll /* 0x400000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869440ll /* 0x400000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179869696ll /* 0x400000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179870208ll /* 0x400000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179871232ll /* 0x400000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179873280ll /* 0x400001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179877376ll /* 0x400002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179885568ll /* 0x400004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179901952ll /* 0x400008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17179934720ll /* 0x400010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17180000256ll /* 0x400020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17180131328ll /* 0x400040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17180393472ll /* 0x400080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17180917760ll /* 0x400100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17181966336ll /* 0x400200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17184063488ll /* 0x400400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17188257792ll /* 0x400800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17196646400ll /* 0x401000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17213423616ll /* 0x402000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17246978048ll /* 0x404000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17314086912ll /* 0x408000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17448304640ll /* 0x410000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17716740096ll /* 0x420000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18253611008ll /* 0x440000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 34},                        /* shli r3, r1, 34 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {19327352832ll /* 0x480000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 31}}                        /* shli r3, r2, 31 */
+   },
+  {21474836480ll /* 0x500000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 32}}                        /* shli r3, r2, 32 */
+   },
+  {25769803776ll /* 0x600000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 33}}                        /* shli r3, r2, 33 */
+   },
+  {34359738359ll /* 0x7fffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738360ll /* 0x7fffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738361ll /* 0x7fffffff9 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {34359738363ll /* 0x7fffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738364ll /* 0x7fffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738365ll /* 0x7fffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738366ll /* 0x7fffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {34359738367ll /* 0x7ffffffff */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {34359738368ll /* 0x800000000 */ ,
+   {{6, 1, 35}}                        /* shli r2, r1, 35 */
+   },
+  {34359738369ll /* 0x800000001 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {34359738370ll /* 0x800000002 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {34359738371ll /* 0x800000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738372ll /* 0x800000004 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {34359738373ll /* 0x800000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738374ll /* 0x800000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {34359738375ll /* 0x800000007 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {34359738376ll /* 0x800000008 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {34359738377ll /* 0x800000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738378ll /* 0x80000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {34359738384ll /* 0x800000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738400ll /* 0x800000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738432ll /* 0x800000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738496ll /* 0x800000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738624ll /* 0x800000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359738880ll /* 0x800000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359739392ll /* 0x800000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359740416ll /* 0x800000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359742464ll /* 0x800001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359746560ll /* 0x800002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359754752ll /* 0x800004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359771136ll /* 0x800008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359803904ll /* 0x800010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34359869440ll /* 0x800020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34360000512ll /* 0x800040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34360262656ll /* 0x800080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34360786944ll /* 0x800100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34361835520ll /* 0x800200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34363932672ll /* 0x800400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34368126976ll /* 0x800800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34376515584ll /* 0x801000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34393292800ll /* 0x802000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34426847232ll /* 0x804000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34493956096ll /* 0x808000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34628173824ll /* 0x810000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34896609280ll /* 0x820000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35433480192ll /* 0x840000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36507222016ll /* 0x880000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 35},                        /* shli r3, r1, 35 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {38654705664ll /* 0x900000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 32}}                        /* shli r3, r2, 32 */
+   },
+  {42949672960ll /* 0xa00000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 33}}                        /* shli r3, r2, 33 */
+   },
+  {51539607552ll /* 0xc00000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 34}}                        /* shli r3, r2, 34 */
+   },
+  {68719476727ll /* 0xffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476728ll /* 0xffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476729ll /* 0xffffffff9 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {68719476731ll /* 0xffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476732ll /* 0xffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476733ll /* 0xffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476734ll /* 0xffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {68719476735ll /* 0xfffffffff */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {68719476736ll /* 0x1000000000 */ ,
+   {{6, 1, 36}}                        /* shli r2, r1, 36 */
+   },
+  {68719476737ll /* 0x1000000001 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {68719476738ll /* 0x1000000002 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {68719476739ll /* 0x1000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476740ll /* 0x1000000004 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {68719476741ll /* 0x1000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476742ll /* 0x1000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {68719476743ll /* 0x1000000007 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {68719476744ll /* 0x1000000008 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {68719476745ll /* 0x1000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476746ll /* 0x100000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {68719476752ll /* 0x1000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476768ll /* 0x1000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476800ll /* 0x1000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476864ll /* 0x1000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719476992ll /* 0x1000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719477248ll /* 0x1000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719477760ll /* 0x1000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719478784ll /* 0x1000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719480832ll /* 0x1000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719484928ll /* 0x1000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719493120ll /* 0x1000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719509504ll /* 0x1000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719542272ll /* 0x1000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719607808ll /* 0x1000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68719738880ll /* 0x1000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68720001024ll /* 0x1000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68720525312ll /* 0x1000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68721573888ll /* 0x1000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68723671040ll /* 0x1000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68727865344ll /* 0x1000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68736253952ll /* 0x1001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68753031168ll /* 0x1002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68786585600ll /* 0x1004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68853694464ll /* 0x1008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68987912192ll /* 0x1010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69256347648ll /* 0x1020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69793218560ll /* 0x1040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70866960384ll /* 0x1080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {73014444032ll /* 0x1100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 36},                        /* shli r3, r1, 36 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {77309411328ll /* 0x1200000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 33}}                        /* shli r3, r2, 33 */
+   },
+  {85899345920ll /* 0x1400000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 34}}                        /* shli r3, r2, 34 */
+   },
+  {103079215104ll /* 0x1800000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 35}}                        /* shli r3, r2, 35 */
+   },
+  {137438953463ll /* 0x1ffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953464ll /* 0x1ffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953465ll /* 0x1ffffffff9 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {137438953467ll /* 0x1ffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953468ll /* 0x1ffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953469ll /* 0x1ffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953470ll /* 0x1ffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {137438953471ll /* 0x1fffffffff */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {137438953472ll /* 0x2000000000 */ ,
+   {{6, 1, 37}}                        /* shli r2, r1, 37 */
+   },
+  {137438953473ll /* 0x2000000001 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {137438953474ll /* 0x2000000002 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {137438953475ll /* 0x2000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953476ll /* 0x2000000004 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {137438953477ll /* 0x2000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953478ll /* 0x2000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {137438953479ll /* 0x2000000007 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {137438953480ll /* 0x2000000008 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {137438953481ll /* 0x2000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953482ll /* 0x200000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {137438953488ll /* 0x2000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953504ll /* 0x2000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953536ll /* 0x2000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953600ll /* 0x2000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953728ll /* 0x2000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438953984ll /* 0x2000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438954496ll /* 0x2000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438955520ll /* 0x2000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438957568ll /* 0x2000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438961664ll /* 0x2000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438969856ll /* 0x2000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137438986240ll /* 0x2000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137439019008ll /* 0x2000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137439084544ll /* 0x2000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137439215616ll /* 0x2000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137439477760ll /* 0x2000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137440002048ll /* 0x2000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137441050624ll /* 0x2000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137443147776ll /* 0x2000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137447342080ll /* 0x2000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137455730688ll /* 0x2001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137472507904ll /* 0x2002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137506062336ll /* 0x2004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137573171200ll /* 0x2008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137707388928ll /* 0x2010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {137975824384ll /* 0x2020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {138512695296ll /* 0x2040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {139586437120ll /* 0x2080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {141733920768ll /* 0x2100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {146028888064ll /* 0x2200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 37},                        /* shli r3, r1, 37 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {154618822656ll /* 0x2400000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 34}}                        /* shli r3, r2, 34 */
+   },
+  {171798691840ll /* 0x2800000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 35}}                        /* shli r3, r2, 35 */
+   },
+  {206158430208ll /* 0x3000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 36}}                        /* shli r3, r2, 36 */
+   },
+  {274877906935ll /* 0x3ffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906936ll /* 0x3ffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906937ll /* 0x3ffffffff9 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {274877906939ll /* 0x3ffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906940ll /* 0x3ffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906941ll /* 0x3ffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906942ll /* 0x3ffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {274877906943ll /* 0x3fffffffff */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {274877906944ll /* 0x4000000000 */ ,
+   {{6, 1, 38}}                        /* shli r2, r1, 38 */
+   },
+  {274877906945ll /* 0x4000000001 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {274877906946ll /* 0x4000000002 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {274877906947ll /* 0x4000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877906948ll /* 0x4000000004 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {274877906949ll /* 0x4000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877906950ll /* 0x4000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {274877906951ll /* 0x4000000007 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {274877906952ll /* 0x4000000008 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {274877906953ll /* 0x4000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877906954ll /* 0x400000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {274877906960ll /* 0x4000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877906976ll /* 0x4000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877907008ll /* 0x4000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877907072ll /* 0x4000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877907200ll /* 0x4000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877907456ll /* 0x4000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877907968ll /* 0x4000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877908992ll /* 0x4000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877911040ll /* 0x4000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877915136ll /* 0x4000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877923328ll /* 0x4000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877939712ll /* 0x4000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274877972480ll /* 0x4000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274878038016ll /* 0x4000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274878169088ll /* 0x4000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274878431232ll /* 0x4000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274878955520ll /* 0x4000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274880004096ll /* 0x4000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274882101248ll /* 0x4000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274886295552ll /* 0x4000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274894684160ll /* 0x4001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274911461376ll /* 0x4002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {274945015808ll /* 0x4004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {275012124672ll /* 0x4008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {275146342400ll /* 0x4010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {275414777856ll /* 0x4020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {275951648768ll /* 0x4040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {277025390592ll /* 0x4080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {279172874240ll /* 0x4100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {283467841536ll /* 0x4200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {292057776128ll /* 0x4400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 38},                        /* shli r3, r1, 38 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {309237645312ll /* 0x4800000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 35}}                        /* shli r3, r2, 35 */
+   },
+  {343597383680ll /* 0x5000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 36}}                        /* shli r3, r2, 36 */
+   },
+  {412316860416ll /* 0x6000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 37}}                        /* shli r3, r2, 37 */
+   },
+  {549755813879ll /* 0x7ffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813880ll /* 0x7ffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813881ll /* 0x7ffffffff9 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {549755813883ll /* 0x7ffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813884ll /* 0x7ffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813885ll /* 0x7ffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813886ll /* 0x7ffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {549755813887ll /* 0x7fffffffff */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {549755813888ll /* 0x8000000000 */ ,
+   {{6, 1, 39}}                        /* shli r2, r1, 39 */
+   },
+  {549755813889ll /* 0x8000000001 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {549755813890ll /* 0x8000000002 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {549755813891ll /* 0x8000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755813892ll /* 0x8000000004 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {549755813893ll /* 0x8000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755813894ll /* 0x8000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {549755813895ll /* 0x8000000007 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {549755813896ll /* 0x8000000008 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {549755813897ll /* 0x8000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755813898ll /* 0x800000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {549755813904ll /* 0x8000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755813920ll /* 0x8000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755813952ll /* 0x8000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755814016ll /* 0x8000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755814144ll /* 0x8000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755814400ll /* 0x8000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755814912ll /* 0x8000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755815936ll /* 0x8000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755817984ll /* 0x8000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755822080ll /* 0x8000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755830272ll /* 0x8000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755846656ll /* 0x8000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755879424ll /* 0x8000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549755944960ll /* 0x8000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549756076032ll /* 0x8000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549756338176ll /* 0x8000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549756862464ll /* 0x8000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549757911040ll /* 0x8000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549760008192ll /* 0x8000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549764202496ll /* 0x8000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549772591104ll /* 0x8001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549789368320ll /* 0x8002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549822922752ll /* 0x8004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {549890031616ll /* 0x8008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {550024249344ll /* 0x8010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {550292684800ll /* 0x8020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {550829555712ll /* 0x8040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {551903297536ll /* 0x8080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {554050781184ll /* 0x8100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {558345748480ll /* 0x8200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {566935683072ll /* 0x8400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {584115552256ll /* 0x8800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 39},                        /* shli r3, r1, 39 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {618475290624ll /* 0x9000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 36}}                        /* shli r3, r2, 36 */
+   },
+  {687194767360ll /* 0xa000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 37}}                        /* shli r3, r2, 37 */
+   },
+  {824633720832ll /* 0xc000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 38}}                        /* shli r3, r2, 38 */
+   },
+  {1099511627767ll /* 0xfffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627768ll /* 0xfffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627769ll /* 0xfffffffff9 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1099511627771ll /* 0xfffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627772ll /* 0xfffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627773ll /* 0xfffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627774ll /* 0xfffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1099511627775ll /* 0xffffffffff */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1099511627776ll /* 0x10000000000 */ ,
+   {{6, 1, 40}}                        /* shli r2, r1, 40 */
+   },
+  {1099511627777ll /* 0x10000000001 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1099511627778ll /* 0x10000000002 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1099511627779ll /* 0x10000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627780ll /* 0x10000000004 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1099511627781ll /* 0x10000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627782ll /* 0x10000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1099511627783ll /* 0x10000000007 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1099511627784ll /* 0x10000000008 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1099511627785ll /* 0x10000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627786ll /* 0x1000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1099511627792ll /* 0x10000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627808ll /* 0x10000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627840ll /* 0x10000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511627904ll /* 0x10000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511628032ll /* 0x10000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511628288ll /* 0x10000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511628800ll /* 0x10000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511629824ll /* 0x10000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511631872ll /* 0x10000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511635968ll /* 0x10000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511644160ll /* 0x10000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511660544ll /* 0x10000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511693312ll /* 0x10000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511758848ll /* 0x10000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099511889920ll /* 0x10000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099512152064ll /* 0x10000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099512676352ll /* 0x10000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099513724928ll /* 0x10000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099515822080ll /* 0x10000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099520016384ll /* 0x10000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099528404992ll /* 0x10001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099545182208ll /* 0x10002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099578736640ll /* 0x10004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099645845504ll /* 0x10008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1099780063232ll /* 0x10010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1100048498688ll /* 0x10020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1100585369600ll /* 0x10040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1101659111424ll /* 0x10080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1103806595072ll /* 0x10100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1108101562368ll /* 0x10200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1116691496960ll /* 0x10400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1133871366144ll /* 0x10800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1168231104512ll /* 0x11000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 40},                        /* shli r3, r1, 40 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1236950581248ll /* 0x12000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 37}}                        /* shli r3, r2, 37 */
+   },
+  {1374389534720ll /* 0x14000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 38}}                        /* shli r3, r2, 38 */
+   },
+  {1649267441664ll /* 0x18000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 39}}                        /* shli r3, r2, 39 */
+   },
+  {2199023255543ll /* 0x1fffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255544ll /* 0x1fffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255545ll /* 0x1fffffffff9 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2199023255547ll /* 0x1fffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255548ll /* 0x1fffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255549ll /* 0x1fffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255550ll /* 0x1fffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2199023255551ll /* 0x1ffffffffff */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2199023255552ll /* 0x20000000000 */ ,
+   {{6, 1, 41}}                        /* shli r2, r1, 41 */
+   },
+  {2199023255553ll /* 0x20000000001 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2199023255554ll /* 0x20000000002 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2199023255555ll /* 0x20000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255556ll /* 0x20000000004 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2199023255557ll /* 0x20000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255558ll /* 0x20000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2199023255559ll /* 0x20000000007 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2199023255560ll /* 0x20000000008 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2199023255561ll /* 0x20000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255562ll /* 0x2000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2199023255568ll /* 0x20000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255584ll /* 0x20000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255616ll /* 0x20000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255680ll /* 0x20000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023255808ll /* 0x20000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023256064ll /* 0x20000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023256576ll /* 0x20000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023257600ll /* 0x20000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023259648ll /* 0x20000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023263744ll /* 0x20000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023271936ll /* 0x20000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023288320ll /* 0x20000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023321088ll /* 0x20000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023386624ll /* 0x20000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023517696ll /* 0x20000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199023779840ll /* 0x20000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199024304128ll /* 0x20000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199025352704ll /* 0x20000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199027449856ll /* 0x20000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199031644160ll /* 0x20000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199040032768ll /* 0x20001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199056809984ll /* 0x20002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199090364416ll /* 0x20004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199157473280ll /* 0x20008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199291691008ll /* 0x20010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2199560126464ll /* 0x20020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2200096997376ll /* 0x20040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2201170739200ll /* 0x20080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2203318222848ll /* 0x20100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2207613190144ll /* 0x20200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2216203124736ll /* 0x20400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2233382993920ll /* 0x20800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2267742732288ll /* 0x21000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2336462209024ll /* 0x22000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 41},                        /* shli r3, r1, 41 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2473901162496ll /* 0x24000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 38}}                        /* shli r3, r2, 38 */
+   },
+  {2748779069440ll /* 0x28000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 39}}                        /* shli r3, r2, 39 */
+   },
+  {3298534883328ll /* 0x30000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 40}}                        /* shli r3, r2, 40 */
+   },
+  {4398046511095ll /* 0x3fffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511096ll /* 0x3fffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511097ll /* 0x3fffffffff9 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4398046511099ll /* 0x3fffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511100ll /* 0x3fffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511101ll /* 0x3fffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511102ll /* 0x3fffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4398046511103ll /* 0x3ffffffffff */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4398046511104ll /* 0x40000000000 */ ,
+   {{6, 1, 42}}                        /* shli r2, r1, 42 */
+   },
+  {4398046511105ll /* 0x40000000001 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4398046511106ll /* 0x40000000002 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4398046511107ll /* 0x40000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511108ll /* 0x40000000004 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4398046511109ll /* 0x40000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511110ll /* 0x40000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4398046511111ll /* 0x40000000007 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4398046511112ll /* 0x40000000008 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4398046511113ll /* 0x40000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511114ll /* 0x4000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4398046511120ll /* 0x40000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511136ll /* 0x40000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511168ll /* 0x40000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511232ll /* 0x40000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511360ll /* 0x40000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046511616ll /* 0x40000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046512128ll /* 0x40000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046513152ll /* 0x40000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046515200ll /* 0x40000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046519296ll /* 0x40000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046527488ll /* 0x40000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046543872ll /* 0x40000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046576640ll /* 0x40000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046642176ll /* 0x40000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398046773248ll /* 0x40000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398047035392ll /* 0x40000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398047559680ll /* 0x40000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398048608256ll /* 0x40000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398050705408ll /* 0x40000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398054899712ll /* 0x40000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398063288320ll /* 0x40001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398080065536ll /* 0x40002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398113619968ll /* 0x40004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398180728832ll /* 0x40008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398314946560ll /* 0x40010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4398583382016ll /* 0x40020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4399120252928ll /* 0x40040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4400193994752ll /* 0x40080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4402341478400ll /* 0x40100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4406636445696ll /* 0x40200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4415226380288ll /* 0x40400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4432406249472ll /* 0x40800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4466765987840ll /* 0x41000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4535485464576ll /* 0x42000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4672924418048ll /* 0x44000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 42},                        /* shli r3, r1, 42 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4947802324992ll /* 0x48000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 39}}                        /* shli r3, r2, 39 */
+   },
+  {5497558138880ll /* 0x50000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 40}}                        /* shli r3, r2, 40 */
+   },
+  {6597069766656ll /* 0x60000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 41}}                        /* shli r3, r2, 41 */
+   },
+  {8796093022199ll /* 0x7fffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022200ll /* 0x7fffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022201ll /* 0x7fffffffff9 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {8796093022203ll /* 0x7fffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022204ll /* 0x7fffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022205ll /* 0x7fffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022206ll /* 0x7fffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8796093022207ll /* 0x7ffffffffff */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8796093022208ll /* 0x80000000000 */ ,
+   {{6, 1, 43}}                        /* shli r2, r1, 43 */
+   },
+  {8796093022209ll /* 0x80000000001 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8796093022210ll /* 0x80000000002 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {8796093022211ll /* 0x80000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022212ll /* 0x80000000004 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {8796093022213ll /* 0x80000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022214ll /* 0x80000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8796093022215ll /* 0x80000000007 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {8796093022216ll /* 0x80000000008 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {8796093022217ll /* 0x80000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022218ll /* 0x8000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {8796093022224ll /* 0x80000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022240ll /* 0x80000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022272ll /* 0x80000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022336ll /* 0x80000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022464ll /* 0x80000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093022720ll /* 0x80000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093023232ll /* 0x80000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093024256ll /* 0x80000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093026304ll /* 0x80000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093030400ll /* 0x80000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093038592ll /* 0x80000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093054976ll /* 0x80000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093087744ll /* 0x80000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093153280ll /* 0x80000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093284352ll /* 0x80000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796093546496ll /* 0x80000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796094070784ll /* 0x80000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796095119360ll /* 0x80000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796097216512ll /* 0x80000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796101410816ll /* 0x80000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796109799424ll /* 0x80001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796126576640ll /* 0x80002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796160131072ll /* 0x80004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796227239936ll /* 0x80008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796361457664ll /* 0x80010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8796629893120ll /* 0x80020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8797166764032ll /* 0x80040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8798240505856ll /* 0x80080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8800387989504ll /* 0x80100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8804682956800ll /* 0x80200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8813272891392ll /* 0x80400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8830452760576ll /* 0x80800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8864812498944ll /* 0x81000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8933531975680ll /* 0x82000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9070970929152ll /* 0x84000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9345848836096ll /* 0x88000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 43},                        /* shli r3, r1, 43 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9895604649984ll /* 0x90000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 40}}                        /* shli r3, r2, 40 */
+   },
+  {10995116277760ll /* 0xa0000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 41}}                        /* shli r3, r2, 41 */
+   },
+  {13194139533312ll /* 0xc0000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 42}}                        /* shli r3, r2, 42 */
+   },
+  {17592186044407ll /* 0xffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044408ll /* 0xffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044409ll /* 0xffffffffff9 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {17592186044411ll /* 0xffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044412ll /* 0xffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044413ll /* 0xffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044414ll /* 0xffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {17592186044415ll /* 0xfffffffffff */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {17592186044416ll /* 0x100000000000 */ ,
+   {{6, 1, 44}}                        /* shli r2, r1, 44 */
+   },
+  {17592186044417ll /* 0x100000000001 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {17592186044418ll /* 0x100000000002 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {17592186044419ll /* 0x100000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044420ll /* 0x100000000004 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {17592186044421ll /* 0x100000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044422ll /* 0x100000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {17592186044423ll /* 0x100000000007 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {17592186044424ll /* 0x100000000008 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {17592186044425ll /* 0x100000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044426ll /* 0x10000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {17592186044432ll /* 0x100000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044448ll /* 0x100000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044480ll /* 0x100000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044544ll /* 0x100000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044672ll /* 0x100000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186044928ll /* 0x100000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186045440ll /* 0x100000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186046464ll /* 0x100000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186048512ll /* 0x100000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186052608ll /* 0x100000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186060800ll /* 0x100000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186077184ll /* 0x100000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186109952ll /* 0x100000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186175488ll /* 0x100000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186306560ll /* 0x100000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592186568704ll /* 0x100000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592187092992ll /* 0x100000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592188141568ll /* 0x100000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592190238720ll /* 0x100000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592194433024ll /* 0x100000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592202821632ll /* 0x100001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592219598848ll /* 0x100002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592253153280ll /* 0x100004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592320262144ll /* 0x100008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592454479872ll /* 0x100010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17592722915328ll /* 0x100020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17593259786240ll /* 0x100040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17594333528064ll /* 0x100080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17596481011712ll /* 0x100100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17600775979008ll /* 0x100200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17609365913600ll /* 0x100400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17626545782784ll /* 0x100800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17660905521152ll /* 0x101000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17729624997888ll /* 0x102000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17867063951360ll /* 0x104000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18141941858304ll /* 0x108000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18691697672192ll /* 0x110000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 44},                        /* shli r3, r1, 44 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {19791209299968ll /* 0x120000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 41}}                        /* shli r3, r2, 41 */
+   },
+  {21990232555520ll /* 0x140000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 42}}                        /* shli r3, r2, 42 */
+   },
+  {26388279066624ll /* 0x180000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 43}}                        /* shli r3, r2, 43 */
+   },
+  {35184372088823ll /* 0x1ffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088824ll /* 0x1ffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088825ll /* 0x1ffffffffff9 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {35184372088827ll /* 0x1ffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088828ll /* 0x1ffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088829ll /* 0x1ffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088830ll /* 0x1ffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {35184372088831ll /* 0x1fffffffffff */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {35184372088832ll /* 0x200000000000 */ ,
+   {{6, 1, 45}}                        /* shli r2, r1, 45 */
+   },
+  {35184372088833ll /* 0x200000000001 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {35184372088834ll /* 0x200000000002 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {35184372088835ll /* 0x200000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088836ll /* 0x200000000004 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {35184372088837ll /* 0x200000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088838ll /* 0x200000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {35184372088839ll /* 0x200000000007 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {35184372088840ll /* 0x200000000008 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {35184372088841ll /* 0x200000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088842ll /* 0x20000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {35184372088848ll /* 0x200000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088864ll /* 0x200000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088896ll /* 0x200000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372088960ll /* 0x200000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372089088ll /* 0x200000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372089344ll /* 0x200000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372089856ll /* 0x200000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372090880ll /* 0x200000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372092928ll /* 0x200000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372097024ll /* 0x200000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372105216ll /* 0x200000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372121600ll /* 0x200000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372154368ll /* 0x200000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372219904ll /* 0x200000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372350976ll /* 0x200000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184372613120ll /* 0x200000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184373137408ll /* 0x200000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184374185984ll /* 0x200000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184376283136ll /* 0x200000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184380477440ll /* 0x200000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184388866048ll /* 0x200001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184405643264ll /* 0x200002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184439197696ll /* 0x200004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184506306560ll /* 0x200008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184640524288ll /* 0x200010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35184908959744ll /* 0x200020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35185445830656ll /* 0x200040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35186519572480ll /* 0x200080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35188667056128ll /* 0x200100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35192962023424ll /* 0x200200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35201551958016ll /* 0x200400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35218731827200ll /* 0x200800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35253091565568ll /* 0x201000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35321811042304ll /* 0x202000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35459249995776ll /* 0x204000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35734127902720ll /* 0x208000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36283883716608ll /* 0x210000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {37383395344384ll /* 0x220000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 45},                        /* shli r3, r1, 45 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {39582418599936ll /* 0x240000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 42}}                        /* shli r3, r2, 42 */
+   },
+  {43980465111040ll /* 0x280000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 43}}                        /* shli r3, r2, 43 */
+   },
+  {52776558133248ll /* 0x300000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 44}}                        /* shli r3, r2, 44 */
+   },
+  {70368744177655ll /* 0x3ffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177656ll /* 0x3ffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177657ll /* 0x3ffffffffff9 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {70368744177659ll /* 0x3ffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177660ll /* 0x3ffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177661ll /* 0x3ffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177662ll /* 0x3ffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {70368744177663ll /* 0x3fffffffffff */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {70368744177664ll /* 0x400000000000 */ ,
+   {{6, 1, 46}}                        /* shli r2, r1, 46 */
+   },
+  {70368744177665ll /* 0x400000000001 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {70368744177666ll /* 0x400000000002 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {70368744177667ll /* 0x400000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177668ll /* 0x400000000004 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {70368744177669ll /* 0x400000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177670ll /* 0x400000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {70368744177671ll /* 0x400000000007 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {70368744177672ll /* 0x400000000008 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {70368744177673ll /* 0x400000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177674ll /* 0x40000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {70368744177680ll /* 0x400000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177696ll /* 0x400000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177728ll /* 0x400000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177792ll /* 0x400000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744177920ll /* 0x400000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744178176ll /* 0x400000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744178688ll /* 0x400000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744179712ll /* 0x400000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744181760ll /* 0x400000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744185856ll /* 0x400000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744194048ll /* 0x400000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744210432ll /* 0x400000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744243200ll /* 0x400000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744308736ll /* 0x400000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744439808ll /* 0x400000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368744701952ll /* 0x400000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368745226240ll /* 0x400000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368746274816ll /* 0x400000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368748371968ll /* 0x400000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368752566272ll /* 0x400000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368760954880ll /* 0x400001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368777732096ll /* 0x400002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368811286528ll /* 0x400004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70368878395392ll /* 0x400008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70369012613120ll /* 0x400010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70369281048576ll /* 0x400020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70369817919488ll /* 0x400040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70370891661312ll /* 0x400080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70373039144960ll /* 0x400100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70377334112256ll /* 0x400200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70385924046848ll /* 0x400400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70403103916032ll /* 0x400800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70437463654400ll /* 0x401000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70506183131136ll /* 0x402000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70643622084608ll /* 0x404000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70918499991552ll /* 0x408000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {71468255805440ll /* 0x410000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72567767433216ll /* 0x420000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {74766790688768ll /* 0x440000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 46},                        /* shli r3, r1, 46 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {79164837199872ll /* 0x480000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 43}}                        /* shli r3, r2, 43 */
+   },
+  {87960930222080ll /* 0x500000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 44}}                        /* shli r3, r2, 44 */
+   },
+  {105553116266496ll /* 0x600000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 45}}                        /* shli r3, r2, 45 */
+   },
+  {140737488355319ll /* 0x7ffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355320ll /* 0x7ffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355321ll /* 0x7ffffffffff9 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {140737488355323ll /* 0x7ffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355324ll /* 0x7ffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355325ll /* 0x7ffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355326ll /* 0x7ffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {140737488355327ll /* 0x7fffffffffff */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {140737488355328ll /* 0x800000000000 */ ,
+   {{6, 1, 47}}                        /* shli r2, r1, 47 */
+   },
+  {140737488355329ll /* 0x800000000001 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {140737488355330ll /* 0x800000000002 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {140737488355331ll /* 0x800000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355332ll /* 0x800000000004 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {140737488355333ll /* 0x800000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355334ll /* 0x800000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {140737488355335ll /* 0x800000000007 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {140737488355336ll /* 0x800000000008 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {140737488355337ll /* 0x800000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355338ll /* 0x80000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {140737488355344ll /* 0x800000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355360ll /* 0x800000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355392ll /* 0x800000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355456ll /* 0x800000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355584ll /* 0x800000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488355840ll /* 0x800000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488356352ll /* 0x800000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488357376ll /* 0x800000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488359424ll /* 0x800000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488363520ll /* 0x800000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488371712ll /* 0x800000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488388096ll /* 0x800000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488420864ll /* 0x800000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488486400ll /* 0x800000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488617472ll /* 0x800000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737488879616ll /* 0x800000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737489403904ll /* 0x800000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737490452480ll /* 0x800000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737492549632ll /* 0x800000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737496743936ll /* 0x800000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737505132544ll /* 0x800001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737521909760ll /* 0x800002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737555464192ll /* 0x800004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737622573056ll /* 0x800008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140737756790784ll /* 0x800010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140738025226240ll /* 0x800020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140738562097152ll /* 0x800040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140739635838976ll /* 0x800080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140741783322624ll /* 0x800100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140746078289920ll /* 0x800200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140754668224512ll /* 0x800400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140771848093696ll /* 0x800800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140806207832064ll /* 0x801000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {140874927308800ll /* 0x802000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {141012366262272ll /* 0x804000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {141287244169216ll /* 0x808000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {141836999983104ll /* 0x810000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {142936511610880ll /* 0x820000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {145135534866432ll /* 0x840000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {149533581377536ll /* 0x880000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 47},                        /* shli r3, r1, 47 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {158329674399744ll /* 0x900000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 44}}                        /* shli r3, r2, 44 */
+   },
+  {175921860444160ll /* 0xa00000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 45}}                        /* shli r3, r2, 45 */
+   },
+  {211106232532992ll /* 0xc00000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 46}}                        /* shli r3, r2, 46 */
+   },
+  {281474976710647ll /* 0xfffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710648ll /* 0xfffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710649ll /* 0xfffffffffff9 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {281474976710651ll /* 0xfffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710652ll /* 0xfffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710653ll /* 0xfffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710654ll /* 0xfffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {281474976710655ll /* 0xffffffffffff */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {281474976710656ll /* 0x1000000000000 */ ,
+   {{6, 1, 48}}                        /* shli r2, r1, 48 */
+   },
+  {281474976710657ll /* 0x1000000000001 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {281474976710658ll /* 0x1000000000002 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {281474976710659ll /* 0x1000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710660ll /* 0x1000000000004 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {281474976710661ll /* 0x1000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710662ll /* 0x1000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {281474976710663ll /* 0x1000000000007 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {281474976710664ll /* 0x1000000000008 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {281474976710665ll /* 0x1000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710666ll /* 0x100000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {281474976710672ll /* 0x1000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710688ll /* 0x1000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710720ll /* 0x1000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710784ll /* 0x1000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976710912ll /* 0x1000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976711168ll /* 0x1000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976711680ll /* 0x1000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976712704ll /* 0x1000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976714752ll /* 0x1000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976718848ll /* 0x1000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976727040ll /* 0x1000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976743424ll /* 0x1000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976776192ll /* 0x1000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976841728ll /* 0x1000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474976972800ll /* 0x1000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474977234944ll /* 0x1000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474977759232ll /* 0x1000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474978807808ll /* 0x1000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474980904960ll /* 0x1000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474985099264ll /* 0x1000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281474993487872ll /* 0x1000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281475010265088ll /* 0x1000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281475043819520ll /* 0x1000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281475110928384ll /* 0x1000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281475245146112ll /* 0x1000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281475513581568ll /* 0x1000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281476050452480ll /* 0x1000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281477124194304ll /* 0x1000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281479271677952ll /* 0x1000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281483566645248ll /* 0x1000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281492156579840ll /* 0x1000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281509336449024ll /* 0x1000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281543696187392ll /* 0x1001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281612415664128ll /* 0x1002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {281749854617600ll /* 0x1004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {282024732524544ll /* 0x1008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {282574488338432ll /* 0x1010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {283673999966208ll /* 0x1020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {285873023221760ll /* 0x1040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {290271069732864ll /* 0x1080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {299067162755072ll /* 0x1100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 48},                        /* shli r3, r1, 48 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {316659348799488ll /* 0x1200000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 45}}                        /* shli r3, r2, 45 */
+   },
+  {351843720888320ll /* 0x1400000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 46}}                        /* shli r3, r2, 46 */
+   },
+  {422212465065984ll /* 0x1800000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 47}}                        /* shli r3, r2, 47 */
+   },
+  {562949953421303ll /* 0x1fffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421304ll /* 0x1fffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421305ll /* 0x1fffffffffff9 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {562949953421307ll /* 0x1fffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421308ll /* 0x1fffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421309ll /* 0x1fffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421310ll /* 0x1fffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {562949953421311ll /* 0x1ffffffffffff */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {562949953421312ll /* 0x2000000000000 */ ,
+   {{6, 1, 49}}                        /* shli r2, r1, 49 */
+   },
+  {562949953421313ll /* 0x2000000000001 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {562949953421314ll /* 0x2000000000002 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {562949953421315ll /* 0x2000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421316ll /* 0x2000000000004 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {562949953421317ll /* 0x2000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421318ll /* 0x2000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {562949953421319ll /* 0x2000000000007 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {562949953421320ll /* 0x2000000000008 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {562949953421321ll /* 0x2000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421322ll /* 0x200000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {562949953421328ll /* 0x2000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421344ll /* 0x2000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421376ll /* 0x2000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421440ll /* 0x2000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421568ll /* 0x2000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953421824ll /* 0x2000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953422336ll /* 0x2000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953423360ll /* 0x2000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953425408ll /* 0x2000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953429504ll /* 0x2000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953437696ll /* 0x2000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953454080ll /* 0x2000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953486848ll /* 0x2000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953552384ll /* 0x2000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953683456ll /* 0x2000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949953945600ll /* 0x2000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949954469888ll /* 0x2000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949955518464ll /* 0x2000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949957615616ll /* 0x2000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949961809920ll /* 0x2000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949970198528ll /* 0x2000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562949986975744ll /* 0x2000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562950020530176ll /* 0x2000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562950087639040ll /* 0x2000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562950221856768ll /* 0x2000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562950490292224ll /* 0x2000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562951027163136ll /* 0x2000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562952100904960ll /* 0x2000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562954248388608ll /* 0x2000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562958543355904ll /* 0x2000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562967133290496ll /* 0x2000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {562984313159680ll /* 0x2000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {563018672898048ll /* 0x2001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {563087392374784ll /* 0x2002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {563224831328256ll /* 0x2004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {563499709235200ll /* 0x2008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {564049465049088ll /* 0x2010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {565148976676864ll /* 0x2020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {567347999932416ll /* 0x2040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {571746046443520ll /* 0x2080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {580542139465728ll /* 0x2100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {598134325510144ll /* 0x2200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 49},                        /* shli r3, r1, 49 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {633318697598976ll /* 0x2400000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 46}}                        /* shli r3, r2, 46 */
+   },
+  {703687441776640ll /* 0x2800000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 47}}                        /* shli r3, r2, 47 */
+   },
+  {844424930131968ll /* 0x3000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 48}}                        /* shli r3, r2, 48 */
+   },
+  {1125899906842615ll /* 0x3fffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842616ll /* 0x3fffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842617ll /* 0x3fffffffffff9 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1125899906842619ll /* 0x3fffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842620ll /* 0x3fffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842621ll /* 0x3fffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842622ll /* 0x3fffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1125899906842623ll /* 0x3ffffffffffff */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1125899906842624ll /* 0x4000000000000 */ ,
+   {{6, 1, 50}}                        /* shli r2, r1, 50 */
+   },
+  {1125899906842625ll /* 0x4000000000001 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1125899906842626ll /* 0x4000000000002 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1125899906842627ll /* 0x4000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842628ll /* 0x4000000000004 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1125899906842629ll /* 0x4000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842630ll /* 0x4000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1125899906842631ll /* 0x4000000000007 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1125899906842632ll /* 0x4000000000008 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1125899906842633ll /* 0x4000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842634ll /* 0x400000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1125899906842640ll /* 0x4000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842656ll /* 0x4000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842688ll /* 0x4000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842752ll /* 0x4000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906842880ll /* 0x4000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906843136ll /* 0x4000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906843648ll /* 0x4000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906844672ll /* 0x4000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906846720ll /* 0x4000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906850816ll /* 0x4000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906859008ll /* 0x4000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906875392ll /* 0x4000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906908160ll /* 0x4000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899906973696ll /* 0x4000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899907104768ll /* 0x4000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899907366912ll /* 0x4000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899907891200ll /* 0x4000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899908939776ll /* 0x4000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899911036928ll /* 0x4000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899915231232ll /* 0x4000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899923619840ll /* 0x4000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899940397056ll /* 0x4000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125899973951488ll /* 0x4000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125900041060352ll /* 0x4000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125900175278080ll /* 0x4000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125900443713536ll /* 0x4000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125900980584448ll /* 0x4000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125902054326272ll /* 0x4000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125904201809920ll /* 0x4000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125908496777216ll /* 0x4000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125917086711808ll /* 0x4000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125934266580992ll /* 0x4000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1125968626319360ll /* 0x4001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1126037345796096ll /* 0x4002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1126174784749568ll /* 0x4004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1126449662656512ll /* 0x4008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1126999418470400ll /* 0x4010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1128098930098176ll /* 0x4020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1130297953353728ll /* 0x4040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1134695999864832ll /* 0x4080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1143492092887040ll /* 0x4100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1161084278931456ll /* 0x4200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1196268651020288ll /* 0x4400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 50},                        /* shli r3, r1, 50 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1266637395197952ll /* 0x4800000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 47}}                        /* shli r3, r2, 47 */
+   },
+  {1407374883553280ll /* 0x5000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 48}}                        /* shli r3, r2, 48 */
+   },
+  {1688849860263936ll /* 0x6000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 49}}                        /* shli r3, r2, 49 */
+   },
+  {2251799813685239ll /* 0x7fffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685240ll /* 0x7fffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685241ll /* 0x7fffffffffff9 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2251799813685243ll /* 0x7fffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685244ll /* 0x7fffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685245ll /* 0x7fffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685246ll /* 0x7fffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2251799813685247ll /* 0x7ffffffffffff */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2251799813685248ll /* 0x8000000000000 */ ,
+   {{6, 1, 51}}                        /* shli r2, r1, 51 */
+   },
+  {2251799813685249ll /* 0x8000000000001 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2251799813685250ll /* 0x8000000000002 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2251799813685251ll /* 0x8000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685252ll /* 0x8000000000004 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2251799813685253ll /* 0x8000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685254ll /* 0x8000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2251799813685255ll /* 0x8000000000007 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2251799813685256ll /* 0x8000000000008 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2251799813685257ll /* 0x8000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685258ll /* 0x800000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2251799813685264ll /* 0x8000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685280ll /* 0x8000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685312ll /* 0x8000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685376ll /* 0x8000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685504ll /* 0x8000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813685760ll /* 0x8000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813686272ll /* 0x8000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813687296ll /* 0x8000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813689344ll /* 0x8000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813693440ll /* 0x8000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813701632ll /* 0x8000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813718016ll /* 0x8000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813750784ll /* 0x8000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813816320ll /* 0x8000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799813947392ll /* 0x8000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799814209536ll /* 0x8000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799814733824ll /* 0x8000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799815782400ll /* 0x8000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799817879552ll /* 0x8000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799822073856ll /* 0x8000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799830462464ll /* 0x8000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799847239680ll /* 0x8000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799880794112ll /* 0x8000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251799947902976ll /* 0x8000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251800082120704ll /* 0x8000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251800350556160ll /* 0x8000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251800887427072ll /* 0x8000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251801961168896ll /* 0x8000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251804108652544ll /* 0x8000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251808403619840ll /* 0x8000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251816993554432ll /* 0x8000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251834173423616ll /* 0x8000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251868533161984ll /* 0x8001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2251937252638720ll /* 0x8002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2252074691592192ll /* 0x8004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2252349569499136ll /* 0x8008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2252899325313024ll /* 0x8010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2253998836940800ll /* 0x8020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2256197860196352ll /* 0x8040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2260595906707456ll /* 0x8080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2269391999729664ll /* 0x8100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2286984185774080ll /* 0x8200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2322168557862912ll /* 0x8400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2392537302040576ll /* 0x8800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 51},                        /* shli r3, r1, 51 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2533274790395904ll /* 0x9000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 48}}                        /* shli r3, r2, 48 */
+   },
+  {2814749767106560ll /* 0xa000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 49}}                        /* shli r3, r2, 49 */
+   },
+  {3377699720527872ll /* 0xc000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 50}}                        /* shli r3, r2, 50 */
+   },
+  {4503599627370487ll /* 0xffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370488ll /* 0xffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370489ll /* 0xffffffffffff9 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4503599627370491ll /* 0xffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370492ll /* 0xffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370493ll /* 0xffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370494ll /* 0xffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4503599627370495ll /* 0xfffffffffffff */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4503599627370496ll /* 0x10000000000000 */ ,
+   {{6, 1, 52}}                        /* shli r2, r1, 52 */
+   },
+  {4503599627370497ll /* 0x10000000000001 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4503599627370498ll /* 0x10000000000002 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4503599627370499ll /* 0x10000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370500ll /* 0x10000000000004 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4503599627370501ll /* 0x10000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370502ll /* 0x10000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4503599627370503ll /* 0x10000000000007 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4503599627370504ll /* 0x10000000000008 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4503599627370505ll /* 0x10000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370506ll /* 0x1000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4503599627370512ll /* 0x10000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370528ll /* 0x10000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370560ll /* 0x10000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370624ll /* 0x10000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627370752ll /* 0x10000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627371008ll /* 0x10000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627371520ll /* 0x10000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627372544ll /* 0x10000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627374592ll /* 0x10000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627378688ll /* 0x10000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627386880ll /* 0x10000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627403264ll /* 0x10000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627436032ll /* 0x10000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627501568ll /* 0x10000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627632640ll /* 0x10000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599627894784ll /* 0x10000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599628419072ll /* 0x10000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599629467648ll /* 0x10000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599631564800ll /* 0x10000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599635759104ll /* 0x10000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599644147712ll /* 0x10000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599660924928ll /* 0x10000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599694479360ll /* 0x10000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599761588224ll /* 0x10000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503599895805952ll /* 0x10000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503600164241408ll /* 0x10000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503600701112320ll /* 0x10000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503601774854144ll /* 0x10000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503603922337792ll /* 0x10000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503608217305088ll /* 0x10000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503616807239680ll /* 0x10000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503633987108864ll /* 0x10000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503668346847232ll /* 0x10001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503737066323968ll /* 0x10002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4503874505277440ll /* 0x10004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4504149383184384ll /* 0x10008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4504699138998272ll /* 0x10010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4505798650626048ll /* 0x10020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4507997673881600ll /* 0x10040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4512395720392704ll /* 0x10080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4521191813414912ll /* 0x10100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4538783999459328ll /* 0x10200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4573968371548160ll /* 0x10400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4644337115725824ll /* 0x10800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4785074604081152ll /* 0x11000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 52},                        /* shli r3, r1, 52 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {5066549580791808ll /* 0x12000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 49}}                        /* shli r3, r2, 49 */
+   },
+  {5629499534213120ll /* 0x14000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 50}}                        /* shli r3, r2, 50 */
+   },
+  {6755399441055744ll /* 0x18000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 51}}                        /* shli r3, r2, 51 */
+   },
+  {9007199254740983ll /* 0x1ffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740984ll /* 0x1ffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740985ll /* 0x1ffffffffffff9 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {9007199254740987ll /* 0x1ffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740988ll /* 0x1ffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740989ll /* 0x1ffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740990ll /* 0x1ffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9007199254740991ll /* 0x1fffffffffffff */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {9007199254740992ll /* 0x20000000000000 */ ,
+   {{6, 1, 53}}                        /* shli r2, r1, 53 */
+   },
+  {9007199254740993ll /* 0x20000000000001 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {9007199254740994ll /* 0x20000000000002 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {9007199254740995ll /* 0x20000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254740996ll /* 0x20000000000004 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {9007199254740997ll /* 0x20000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254740998ll /* 0x20000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {9007199254740999ll /* 0x20000000000007 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {9007199254741000ll /* 0x20000000000008 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {9007199254741001ll /* 0x20000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741002ll /* 0x2000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {9007199254741008ll /* 0x20000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741024ll /* 0x20000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741056ll /* 0x20000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741120ll /* 0x20000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741248ll /* 0x20000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254741504ll /* 0x20000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254742016ll /* 0x20000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254743040ll /* 0x20000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254745088ll /* 0x20000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254749184ll /* 0x20000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254757376ll /* 0x20000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254773760ll /* 0x20000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254806528ll /* 0x20000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199254872064ll /* 0x20000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199255003136ll /* 0x20000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199255265280ll /* 0x20000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199255789568ll /* 0x20000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199256838144ll /* 0x20000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199258935296ll /* 0x20000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199263129600ll /* 0x20000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199271518208ll /* 0x20000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199288295424ll /* 0x20000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199321849856ll /* 0x20000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199388958720ll /* 0x20000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199523176448ll /* 0x20000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007199791611904ll /* 0x20000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007200328482816ll /* 0x20000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007201402224640ll /* 0x20000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007203549708288ll /* 0x20000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007207844675584ll /* 0x20000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007216434610176ll /* 0x20000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007233614479360ll /* 0x20000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007267974217728ll /* 0x20001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007336693694464ll /* 0x20002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007474132647936ll /* 0x20004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9007749010554880ll /* 0x20008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9008298766368768ll /* 0x20010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9009398277996544ll /* 0x20020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9011597301252096ll /* 0x20040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9015995347763200ll /* 0x20080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9024791440785408ll /* 0x20100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9042383626829824ll /* 0x20200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9077567998918656ll /* 0x20400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9147936743096320ll /* 0x20800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9288674231451648ll /* 0x21000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9570149208162304ll /* 0x22000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 53},                        /* shli r3, r1, 53 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {10133099161583616ll /* 0x24000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 50}}                        /* shli r3, r2, 50 */
+   },
+  {11258999068426240ll /* 0x28000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 51}}                        /* shli r3, r2, 51 */
+   },
+  {13510798882111488ll /* 0x30000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 52}}                        /* shli r3, r2, 52 */
+   },
+  {18014398509481975ll /* 0x3ffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481976ll /* 0x3ffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481977ll /* 0x3ffffffffffff9 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {18014398509481979ll /* 0x3ffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481980ll /* 0x3ffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481981ll /* 0x3ffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481982ll /* 0x3ffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {18014398509481983ll /* 0x3fffffffffffff */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {18014398509481984ll /* 0x40000000000000 */ ,
+   {{6, 1, 54}}                        /* shli r2, r1, 54 */
+   },
+  {18014398509481985ll /* 0x40000000000001 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {18014398509481986ll /* 0x40000000000002 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {18014398509481987ll /* 0x40000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509481988ll /* 0x40000000000004 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {18014398509481989ll /* 0x40000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509481990ll /* 0x40000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {18014398509481991ll /* 0x40000000000007 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {18014398509481992ll /* 0x40000000000008 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {18014398509481993ll /* 0x40000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509481994ll /* 0x4000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {18014398509482000ll /* 0x40000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509482016ll /* 0x40000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509482048ll /* 0x40000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509482112ll /* 0x40000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509482240ll /* 0x40000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509482496ll /* 0x40000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509483008ll /* 0x40000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509484032ll /* 0x40000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509486080ll /* 0x40000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509490176ll /* 0x40000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509498368ll /* 0x40000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509514752ll /* 0x40000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509547520ll /* 0x40000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509613056ll /* 0x40000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398509744128ll /* 0x40000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398510006272ll /* 0x40000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398510530560ll /* 0x40000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398511579136ll /* 0x40000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398513676288ll /* 0x40000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398517870592ll /* 0x40000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398526259200ll /* 0x40000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398543036416ll /* 0x40000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398576590848ll /* 0x40000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398643699712ll /* 0x40000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014398777917440ll /* 0x40000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014399046352896ll /* 0x40000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014399583223808ll /* 0x40000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014400656965632ll /* 0x40000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014402804449280ll /* 0x40000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014407099416576ll /* 0x40000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014415689351168ll /* 0x40000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014432869220352ll /* 0x40000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014467228958720ll /* 0x40001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014535948435456ll /* 0x40002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014673387388928ll /* 0x40004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18014948265295872ll /* 0x40008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18015498021109760ll /* 0x40010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18016597532737536ll /* 0x40020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18018796555993088ll /* 0x40040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18023194602504192ll /* 0x40080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18031990695526400ll /* 0x40100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18049582881570816ll /* 0x40200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18084767253659648ll /* 0x40400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18155135997837312ll /* 0x40800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18295873486192640ll /* 0x41000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18577348462903296ll /* 0x42000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {19140298416324608ll /* 0x44000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 54},                        /* shli r3, r1, 54 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {20266198323167232ll /* 0x48000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 51}}                        /* shli r3, r2, 51 */
+   },
+  {22517998136852480ll /* 0x50000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 52}}                        /* shli r3, r2, 52 */
+   },
+  {27021597764222976ll /* 0x60000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 53}}                        /* shli r3, r2, 53 */
+   },
+  {36028797018963959ll /* 0x7ffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963960ll /* 0x7ffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963961ll /* 0x7ffffffffffff9 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {36028797018963963ll /* 0x7ffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963964ll /* 0x7ffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963965ll /* 0x7ffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963966ll /* 0x7ffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {36028797018963967ll /* 0x7fffffffffffff */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {36028797018963968ll /* 0x80000000000000 */ ,
+   {{6, 1, 55}}                        /* shli r2, r1, 55 */
+   },
+  {36028797018963969ll /* 0x80000000000001 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {36028797018963970ll /* 0x80000000000002 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {36028797018963971ll /* 0x80000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018963972ll /* 0x80000000000004 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {36028797018963973ll /* 0x80000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018963974ll /* 0x80000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {36028797018963975ll /* 0x80000000000007 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {36028797018963976ll /* 0x80000000000008 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {36028797018963977ll /* 0x80000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018963978ll /* 0x8000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {36028797018963984ll /* 0x80000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964000ll /* 0x80000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964032ll /* 0x80000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964096ll /* 0x80000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964224ll /* 0x80000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964480ll /* 0x80000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018964992ll /* 0x80000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018966016ll /* 0x80000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018968064ll /* 0x80000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018972160ll /* 0x80000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018980352ll /* 0x80000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797018996736ll /* 0x80000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797019029504ll /* 0x80000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797019095040ll /* 0x80000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797019226112ll /* 0x80000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797019488256ll /* 0x80000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797020012544ll /* 0x80000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797021061120ll /* 0x80000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797023158272ll /* 0x80000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797027352576ll /* 0x80000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797035741184ll /* 0x80000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797052518400ll /* 0x80000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797086072832ll /* 0x80000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797153181696ll /* 0x80000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797287399424ll /* 0x80000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028797555834880ll /* 0x80000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028798092705792ll /* 0x80000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028799166447616ll /* 0x80000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028801313931264ll /* 0x80000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028805608898560ll /* 0x80000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028814198833152ll /* 0x80000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028831378702336ll /* 0x80000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028865738440704ll /* 0x80001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36028934457917440ll /* 0x80002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36029071896870912ll /* 0x80004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36029346774777856ll /* 0x80008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36029896530591744ll /* 0x80010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36030996042219520ll /* 0x80020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36033195065475072ll /* 0x80040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36037593111986176ll /* 0x80080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36046389205008384ll /* 0x80100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36063981391052800ll /* 0x80200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36099165763141632ll /* 0x80400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36169534507319296ll /* 0x80800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36310271995674624ll /* 0x81000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36591746972385280ll /* 0x82000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {37154696925806592ll /* 0x84000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {38280596832649216ll /* 0x88000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 55},                        /* shli r3, r1, 55 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {40532396646334464ll /* 0x90000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 52}}                        /* shli r3, r2, 52 */
+   },
+  {45035996273704960ll /* 0xa0000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 53}}                        /* shli r3, r2, 53 */
+   },
+  {54043195528445952ll /* 0xc0000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 54}}                        /* shli r3, r2, 54 */
+   },
+  {72057594037927927ll /* 0xfffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927928ll /* 0xfffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927929ll /* 0xfffffffffffff9 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {72057594037927931ll /* 0xfffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927932ll /* 0xfffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927933ll /* 0xfffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927934ll /* 0xfffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {72057594037927935ll /* 0xffffffffffffff */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {72057594037927936ll /* 0x100000000000000 */ ,
+   {{6, 1, 56}}                        /* shli r2, r1, 56 */
+   },
+  {72057594037927937ll /* 0x100000000000001 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {72057594037927938ll /* 0x100000000000002 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {72057594037927939ll /* 0x100000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037927940ll /* 0x100000000000004 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {72057594037927941ll /* 0x100000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037927942ll /* 0x100000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {72057594037927943ll /* 0x100000000000007 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {72057594037927944ll /* 0x100000000000008 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {72057594037927945ll /* 0x100000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037927946ll /* 0x10000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {72057594037927952ll /* 0x100000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037927968ll /* 0x100000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037928000ll /* 0x100000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037928064ll /* 0x100000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037928192ll /* 0x100000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037928448ll /* 0x100000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037928960ll /* 0x100000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037929984ll /* 0x100000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037932032ll /* 0x100000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037936128ll /* 0x100000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037944320ll /* 0x100000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037960704ll /* 0x100000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594037993472ll /* 0x100000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594038059008ll /* 0x100000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594038190080ll /* 0x100000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594038452224ll /* 0x100000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594038976512ll /* 0x100000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594040025088ll /* 0x100000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594042122240ll /* 0x100000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594046316544ll /* 0x100000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594054705152ll /* 0x100000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594071482368ll /* 0x100000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594105036800ll /* 0x100000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594172145664ll /* 0x100000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594306363392ll /* 0x100000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057594574798848ll /* 0x100000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057595111669760ll /* 0x100000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057596185411584ll /* 0x100000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057598332895232ll /* 0x100000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057602627862528ll /* 0x100000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057611217797120ll /* 0x100000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057628397666304ll /* 0x100000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057662757404672ll /* 0x100001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057731476881408ll /* 0x100002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72057868915834880ll /* 0x100004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72058143793741824ll /* 0x100008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72058693549555712ll /* 0x100010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72059793061183488ll /* 0x100020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72061992084439040ll /* 0x100040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72066390130950144ll /* 0x100080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72075186223972352ll /* 0x100100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72092778410016768ll /* 0x100200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72127962782105600ll /* 0x100400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72198331526283264ll /* 0x100800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72339069014638592ll /* 0x101000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {72620543991349248ll /* 0x102000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {73183493944770560ll /* 0x104000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {74309393851613184ll /* 0x108000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {76561193665298432ll /* 0x110000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 56},                        /* shli r3, r1, 56 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {81064793292668928ll /* 0x120000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 53}}                        /* shli r3, r2, 53 */
+   },
+  {90071992547409920ll /* 0x140000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 54}}                        /* shli r3, r2, 54 */
+   },
+  {108086391056891904ll /* 0x180000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 55}}                        /* shli r3, r2, 55 */
+   },
+  {144115188075855863ll /* 0x1fffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855864ll /* 0x1fffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855865ll /* 0x1fffffffffffff9 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {144115188075855867ll /* 0x1fffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855868ll /* 0x1fffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855869ll /* 0x1fffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855870ll /* 0x1fffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {144115188075855871ll /* 0x1ffffffffffffff */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {144115188075855872ll /* 0x200000000000000 */ ,
+   {{6, 1, 57}}                        /* shli r2, r1, 57 */
+   },
+  {144115188075855873ll /* 0x200000000000001 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {144115188075855874ll /* 0x200000000000002 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {144115188075855875ll /* 0x200000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075855876ll /* 0x200000000000004 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {144115188075855877ll /* 0x200000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075855878ll /* 0x200000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {144115188075855879ll /* 0x200000000000007 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {144115188075855880ll /* 0x200000000000008 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {144115188075855881ll /* 0x200000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075855882ll /* 0x20000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {144115188075855888ll /* 0x200000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075855904ll /* 0x200000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075855936ll /* 0x200000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075856000ll /* 0x200000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075856128ll /* 0x200000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075856384ll /* 0x200000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075856896ll /* 0x200000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075857920ll /* 0x200000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075859968ll /* 0x200000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075864064ll /* 0x200000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075872256ll /* 0x200000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075888640ll /* 0x200000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075921408ll /* 0x200000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188075986944ll /* 0x200000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188076118016ll /* 0x200000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188076380160ll /* 0x200000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188076904448ll /* 0x200000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188077953024ll /* 0x200000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188080050176ll /* 0x200000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188084244480ll /* 0x200000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188092633088ll /* 0x200000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188109410304ll /* 0x200000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188142964736ll /* 0x200000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188210073600ll /* 0x200000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188344291328ll /* 0x200000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115188612726784ll /* 0x200000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115189149597696ll /* 0x200000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115190223339520ll /* 0x200000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115192370823168ll /* 0x200000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115196665790464ll /* 0x200000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115205255725056ll /* 0x200000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115222435594240ll /* 0x200000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115256795332608ll /* 0x200001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115325514809344ll /* 0x200002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115462953762816ll /* 0x200004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144115737831669760ll /* 0x200008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144116287587483648ll /* 0x200010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144117387099111424ll /* 0x200020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144119586122366976ll /* 0x200040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144123984168878080ll /* 0x200080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144132780261900288ll /* 0x200100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144150372447944704ll /* 0x200200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144185556820033536ll /* 0x200400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144255925564211200ll /* 0x200800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144396663052566528ll /* 0x201000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {144678138029277184ll /* 0x202000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {145241087982698496ll /* 0x204000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {146366987889541120ll /* 0x208000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {148618787703226368ll /* 0x210000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {153122387330596864ll /* 0x220000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 57},                        /* shli r3, r1, 57 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {162129586585337856ll /* 0x240000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 54}}                        /* shli r3, r2, 54 */
+   },
+  {180143985094819840ll /* 0x280000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 55}}                        /* shli r3, r2, 55 */
+   },
+  {216172782113783808ll /* 0x300000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 56}}                        /* shli r3, r2, 56 */
+   },
+  {288230376151711735ll /* 0x3fffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711736ll /* 0x3fffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711737ll /* 0x3fffffffffffff9 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {288230376151711739ll /* 0x3fffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711740ll /* 0x3fffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711741ll /* 0x3fffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711742ll /* 0x3fffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {288230376151711743ll /* 0x3ffffffffffffff */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {288230376151711744ll /* 0x400000000000000 */ ,
+   {{6, 1, 58}}                        /* shli r2, r1, 58 */
+   },
+  {288230376151711745ll /* 0x400000000000001 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {288230376151711746ll /* 0x400000000000002 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {288230376151711747ll /* 0x400000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711748ll /* 0x400000000000004 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {288230376151711749ll /* 0x400000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711750ll /* 0x400000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {288230376151711751ll /* 0x400000000000007 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {288230376151711752ll /* 0x400000000000008 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {288230376151711753ll /* 0x400000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711754ll /* 0x40000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {288230376151711760ll /* 0x400000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711776ll /* 0x400000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711808ll /* 0x400000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151711872ll /* 0x400000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151712000ll /* 0x400000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151712256ll /* 0x400000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151712768ll /* 0x400000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151713792ll /* 0x400000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151715840ll /* 0x400000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151719936ll /* 0x400000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151728128ll /* 0x400000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151744512ll /* 0x400000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151777280ll /* 0x400000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151842816ll /* 0x400000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376151973888ll /* 0x400000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376152236032ll /* 0x400000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376152760320ll /* 0x400000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376153808896ll /* 0x400000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376155906048ll /* 0x400000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376160100352ll /* 0x400000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376168488960ll /* 0x400000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376185266176ll /* 0x400000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376218820608ll /* 0x400000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376285929472ll /* 0x400000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376420147200ll /* 0x400000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230376688582656ll /* 0x400000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230377225453568ll /* 0x400000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230378299195392ll /* 0x400000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230380446679040ll /* 0x400000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230384741646336ll /* 0x400000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230393331580928ll /* 0x400000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230410511450112ll /* 0x400000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230444871188480ll /* 0x400001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230513590665216ll /* 0x400002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230651029618688ll /* 0x400004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288230925907525632ll /* 0x400008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288231475663339520ll /* 0x400010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288232575174967296ll /* 0x400020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288234774198222848ll /* 0x400040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288239172244733952ll /* 0x400080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288247968337756160ll /* 0x400100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288265560523800576ll /* 0x400200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288300744895889408ll /* 0x400400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288371113640067072ll /* 0x400800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288511851128422400ll /* 0x401000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {288793326105133056ll /* 0x402000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {289356276058554368ll /* 0x404000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {290482175965396992ll /* 0x408000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {292733975779082240ll /* 0x410000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {297237575406452736ll /* 0x420000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {306244774661193728ll /* 0x440000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 58},                        /* shli r3, r1, 58 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {324259173170675712ll /* 0x480000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 55}}                        /* shli r3, r2, 55 */
+   },
+  {360287970189639680ll /* 0x500000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 56}}                        /* shli r3, r2, 56 */
+   },
+  {432345564227567616ll /* 0x600000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 57}}                        /* shli r3, r2, 57 */
+   },
+  {576460752303423479ll /* 0x7fffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423480ll /* 0x7fffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423481ll /* 0x7fffffffffffff9 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {576460752303423483ll /* 0x7fffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423484ll /* 0x7fffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423485ll /* 0x7fffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423486ll /* 0x7fffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {576460752303423487ll /* 0x7ffffffffffffff */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {576460752303423488ll /* 0x800000000000000 */ ,
+   {{6, 1, 59}}                        /* shli r2, r1, 59 */
+   },
+  {576460752303423489ll /* 0x800000000000001 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {576460752303423490ll /* 0x800000000000002 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {576460752303423491ll /* 0x800000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423492ll /* 0x800000000000004 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {576460752303423493ll /* 0x800000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423494ll /* 0x800000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {576460752303423495ll /* 0x800000000000007 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {576460752303423496ll /* 0x800000000000008 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {576460752303423497ll /* 0x800000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423498ll /* 0x80000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {576460752303423504ll /* 0x800000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423520ll /* 0x800000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423552ll /* 0x800000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423616ll /* 0x800000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303423744ll /* 0x800000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303424000ll /* 0x800000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303424512ll /* 0x800000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303425536ll /* 0x800000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303427584ll /* 0x800000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303431680ll /* 0x800000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303439872ll /* 0x800000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303456256ll /* 0x800000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303489024ll /* 0x800000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303554560ll /* 0x800000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303685632ll /* 0x800000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752303947776ll /* 0x800000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752304472064ll /* 0x800000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752305520640ll /* 0x800000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752307617792ll /* 0x800000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752311812096ll /* 0x800000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752320200704ll /* 0x800000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752336977920ll /* 0x800000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752370532352ll /* 0x800000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752437641216ll /* 0x800000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752571858944ll /* 0x800000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460752840294400ll /* 0x800000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460753377165312ll /* 0x800000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460754450907136ll /* 0x800000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460756598390784ll /* 0x800000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460760893358080ll /* 0x800000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460769483292672ll /* 0x800000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460786663161856ll /* 0x800000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460821022900224ll /* 0x800001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576460889742376960ll /* 0x800002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576461027181330432ll /* 0x800004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576461302059237376ll /* 0x800008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576461851815051264ll /* 0x800010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576462951326679040ll /* 0x800020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576465150349934592ll /* 0x800040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576469548396445696ll /* 0x800080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576478344489467904ll /* 0x800100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576495936675512320ll /* 0x800200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576531121047601152ll /* 0x800400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576601489791778816ll /* 0x800800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {576742227280134144ll /* 0x801000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {577023702256844800ll /* 0x802000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {577586652210266112ll /* 0x804000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {578712552117108736ll /* 0x808000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {580964351930793984ll /* 0x810000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {585467951558164480ll /* 0x820000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {594475150812905472ll /* 0x840000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {612489549322387456ll /* 0x880000000000000 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {6, 1, 59},                        /* shli r3, r1, 59 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {648518346341351424ll /* 0x900000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 56}}                        /* shli r3, r2, 56 */
+   },
+  {720575940379279360ll /* 0xa00000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 57}}                        /* shli r3, r2, 57 */
+   },
+  {864691128455135232ll /* 0xc00000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 58}}                        /* shli r3, r2, 58 */
+   },
+  {1152921504606846967ll /* 0xffffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846968ll /* 0xffffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846969ll /* 0xffffffffffffff9 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {1152921504606846971ll /* 0xffffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846972ll /* 0xffffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846973ll /* 0xffffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846974ll /* 0xffffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1152921504606846975ll /* 0xfffffffffffffff */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1152921504606846976ll /* 0x1000000000000000 */ ,
+   {{6, 1, 60}}                        /* shli r2, r1, 60 */
+   },
+  {1152921504606846977ll /* 0x1000000000000001 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1152921504606846978ll /* 0x1000000000000002 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {1152921504606846979ll /* 0x1000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606846980ll /* 0x1000000000000004 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {1152921504606846981ll /* 0x1000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606846982ll /* 0x1000000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1152921504606846983ll /* 0x1000000000000007 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {1152921504606846984ll /* 0x1000000000000008 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {1152921504606846985ll /* 0x1000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606846986ll /* 0x100000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {1152921504606846992ll /* 0x1000000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606847008ll /* 0x1000000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606847040ll /* 0x1000000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606847104ll /* 0x1000000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606847232ll /* 0x1000000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606847488ll /* 0x1000000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606848000ll /* 0x1000000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606849024ll /* 0x1000000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606851072ll /* 0x1000000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606855168ll /* 0x1000000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606863360ll /* 0x1000000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606879744ll /* 0x1000000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606912512ll /* 0x1000000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504606978048ll /* 0x1000000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504607109120ll /* 0x1000000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504607371264ll /* 0x1000000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504607895552ll /* 0x1000000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504608944128ll /* 0x1000000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504611041280ll /* 0x1000000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504615235584ll /* 0x1000000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504623624192ll /* 0x1000000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504640401408ll /* 0x1000000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504673955840ll /* 0x1000000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504741064704ll /* 0x1000000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921504875282432ll /* 0x1000000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921505143717888ll /* 0x1000000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921505680588800ll /* 0x1000000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921506754330624ll /* 0x1000000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921508901814272ll /* 0x1000000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921513196781568ll /* 0x1000000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921521786716160ll /* 0x1000000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921538966585344ll /* 0x1000000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921573326323712ll /* 0x1000001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921642045800448ll /* 0x1000002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152921779484753920ll /* 0x1000004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152922054362660864ll /* 0x1000008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152922604118474752ll /* 0x1000010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152923703630102528ll /* 0x1000020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152925902653358080ll /* 0x1000040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152930300699869184ll /* 0x1000080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152939096792891392ll /* 0x1000100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152956688978935808ll /* 0x1000200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1152991873351024640ll /* 0x1000400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1153062242095202304ll /* 0x1000800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1153202979583557632ll /* 0x1001000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1153484454560268288ll /* 0x1002000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1154047404513689600ll /* 0x1004000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1155173304420532224ll /* 0x1008000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1157425104234217472ll /* 0x1010000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1161928703861587968ll /* 0x1020000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1170935903116328960ll /* 0x1040000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1188950301625810944ll /* 0x1080000000000000 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1224979098644774912ll /* 0x1100000000000000 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {6, 1, 60},                        /* shli r3, r1, 60 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1297036692682702848ll /* 0x1200000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 57}}                        /* shli r3, r2, 57 */
+   },
+  {1441151880758558720ll /* 0x1400000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 58}}                        /* shli r3, r2, 58 */
+   },
+  {1729382256910270464ll /* 0x1800000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 59}}                        /* shli r3, r2, 59 */
+   },
+  {2305843009213693943ll /* 0x1ffffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693944ll /* 0x1ffffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693945ll /* 0x1ffffffffffffff9 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {2305843009213693947ll /* 0x1ffffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693948ll /* 0x1ffffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693949ll /* 0x1ffffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693950ll /* 0x1ffffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2305843009213693951ll /* 0x1fffffffffffffff */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2305843009213693952ll /* 0x2000000000000000 */ ,
+   {{6, 1, 61}}                        /* shli r2, r1, 61 */
+   },
+  {2305843009213693953ll /* 0x2000000000000001 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2305843009213693954ll /* 0x2000000000000002 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {2305843009213693955ll /* 0x2000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213693956ll /* 0x2000000000000004 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {2305843009213693957ll /* 0x2000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213693958ll /* 0x2000000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2305843009213693959ll /* 0x2000000000000007 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {2305843009213693960ll /* 0x2000000000000008 */ ,
+   {{6, 1, 61},                        /* shli r2, r1, 61 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {2305843009213693961ll /* 0x2000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213693962ll /* 0x200000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {2305843009213693968ll /* 0x2000000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213693984ll /* 0x2000000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213694016ll /* 0x2000000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213694080ll /* 0x2000000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213694208ll /* 0x2000000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213694464ll /* 0x2000000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213694976ll /* 0x2000000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213696000ll /* 0x2000000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213698048ll /* 0x2000000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213702144ll /* 0x2000000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213710336ll /* 0x2000000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213726720ll /* 0x2000000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213759488ll /* 0x2000000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213825024ll /* 0x2000000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009213956096ll /* 0x2000000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009214218240ll /* 0x2000000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009214742528ll /* 0x2000000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009215791104ll /* 0x2000000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009217888256ll /* 0x2000000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009222082560ll /* 0x2000000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009230471168ll /* 0x2000000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009247248384ll /* 0x2000000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009280802816ll /* 0x2000000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009347911680ll /* 0x2000000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009482129408ll /* 0x2000000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843009750564864ll /* 0x2000000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843010287435776ll /* 0x2000000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843011361177600ll /* 0x2000000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843013508661248ll /* 0x2000000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843017803628544ll /* 0x2000000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843026393563136ll /* 0x2000000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843043573432320ll /* 0x2000000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843077933170688ll /* 0x2000001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843146652647424ll /* 0x2000002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843284091600896ll /* 0x2000004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305843558969507840ll /* 0x2000008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305844108725321728ll /* 0x2000010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305845208236949504ll /* 0x2000020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305847407260205056ll /* 0x2000040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305851805306716160ll /* 0x2000080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305860601399738368ll /* 0x2000100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305878193585782784ll /* 0x2000200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305913377957871616ll /* 0x2000400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2305983746702049280ll /* 0x2000800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2306124484190404608ll /* 0x2001000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2306405959167115264ll /* 0x2002000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2306968909120536576ll /* 0x2004000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2308094809027379200ll /* 0x2008000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2310346608841064448ll /* 0x2010000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2314850208468434944ll /* 0x2020000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2323857407723175936ll /* 0x2040000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2341871806232657920ll /* 0x2080000000000000 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2377900603251621888ll /* 0x2100000000000000 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2449958197289549824ll /* 0x2200000000000000 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {6, 1, 61},                        /* shli r3, r1, 61 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2594073385365405696ll /* 0x2400000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 58}}                        /* shli r3, r2, 58 */
+   },
+  {2882303761517117440ll /* 0x2800000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 59}}                        /* shli r3, r2, 59 */
+   },
+  {3458764513820540928ll /* 0x3000000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 60}}                        /* shli r3, r2, 60 */
+   },
+  {4611686018427387895ll /* 0x3ffffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387896ll /* 0x3ffffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387897ll /* 0x3ffffffffffffff9 */ ,
+   {{6, 1, 59},                        /* shli r2, r1, 59 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {4611686018427387899ll /* 0x3ffffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387900ll /* 0x3ffffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387901ll /* 0x3ffffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387902ll /* 0x3ffffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4611686018427387903ll /* 0x3fffffffffffffff */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4611686018427387904ll /* 0x4000000000000000 */ ,
+   {{6, 1, 62}}                        /* shli r2, r1, 62 */
+   },
+  {4611686018427387905ll /* 0x4000000000000001 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4611686018427387906ll /* 0x4000000000000002 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {3, 1, 2}}                 /* shl1add r3, r1, r2 */
+   },
+  {4611686018427387907ll /* 0x4000000000000003 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427387908ll /* 0x4000000000000004 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {4, 1, 2}}                 /* shl2add r3, r1, r2 */
+   },
+  {4611686018427387909ll /* 0x4000000000000005 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427387910ll /* 0x4000000000000006 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4611686018427387911ll /* 0x4000000000000007 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* shl3add r4, r1, r3 */
+   },
+  {4611686018427387912ll /* 0x4000000000000008 */ ,
+   {{6, 1, 62},                        /* shli r2, r1, 62 */
+    {5, 1, 2}}                 /* shl3add r3, r1, r2 */
+   },
+  {4611686018427387913ll /* 0x4000000000000009 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427387914ll /* 0x400000000000000a */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {3, 2, 3}}                 /* shl1add r4, r2, r3 */
+   },
+  {4611686018427387920ll /* 0x4000000000000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427387936ll /* 0x4000000000000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427387968ll /* 0x4000000000000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427388032ll /* 0x4000000000000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427388160ll /* 0x4000000000000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427388416ll /* 0x4000000000000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427388928ll /* 0x4000000000000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427389952ll /* 0x4000000000000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427392000ll /* 0x4000000000001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427396096ll /* 0x4000000000002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427404288ll /* 0x4000000000004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427420672ll /* 0x4000000000008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427453440ll /* 0x4000000000010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427518976ll /* 0x4000000000020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427650048ll /* 0x4000000000040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018427912192ll /* 0x4000000000080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018428436480ll /* 0x4000000000100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018429485056ll /* 0x4000000000200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018431582208ll /* 0x4000000000400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018435776512ll /* 0x4000000000800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018444165120ll /* 0x4000000001000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018460942336ll /* 0x4000000002000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018494496768ll /* 0x4000000004000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018561605632ll /* 0x4000000008000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018695823360ll /* 0x4000000010000000 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686018964258816ll /* 0x4000000020000000 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686019501129728ll /* 0x4000000040000000 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686020574871552ll /* 0x4000000080000000 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686022722355200ll /* 0x4000000100000000 */ ,
+   {{6, 1, 32},                        /* shli r2, r1, 32 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686027017322496ll /* 0x4000000200000000 */ ,
+   {{6, 1, 33},                        /* shli r2, r1, 33 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686035607257088ll /* 0x4000000400000000 */ ,
+   {{6, 1, 34},                        /* shli r2, r1, 34 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686052787126272ll /* 0x4000000800000000 */ ,
+   {{6, 1, 35},                        /* shli r2, r1, 35 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686087146864640ll /* 0x4000001000000000 */ ,
+   {{6, 1, 36},                        /* shli r2, r1, 36 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686155866341376ll /* 0x4000002000000000 */ ,
+   {{6, 1, 37},                        /* shli r2, r1, 37 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686293305294848ll /* 0x4000004000000000 */ ,
+   {{6, 1, 38},                        /* shli r2, r1, 38 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611686568183201792ll /* 0x4000008000000000 */ ,
+   {{6, 1, 39},                        /* shli r2, r1, 39 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611687117939015680ll /* 0x4000010000000000 */ ,
+   {{6, 1, 40},                        /* shli r2, r1, 40 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611688217450643456ll /* 0x4000020000000000 */ ,
+   {{6, 1, 41},                        /* shli r2, r1, 41 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611690416473899008ll /* 0x4000040000000000 */ ,
+   {{6, 1, 42},                        /* shli r2, r1, 42 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611694814520410112ll /* 0x4000080000000000 */ ,
+   {{6, 1, 43},                        /* shli r2, r1, 43 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611703610613432320ll /* 0x4000100000000000 */ ,
+   {{6, 1, 44},                        /* shli r2, r1, 44 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611721202799476736ll /* 0x4000200000000000 */ ,
+   {{6, 1, 45},                        /* shli r2, r1, 45 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611756387171565568ll /* 0x4000400000000000 */ ,
+   {{6, 1, 46},                        /* shli r2, r1, 46 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611826755915743232ll /* 0x4000800000000000 */ ,
+   {{6, 1, 47},                        /* shli r2, r1, 47 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4611967493404098560ll /* 0x4001000000000000 */ ,
+   {{6, 1, 48},                        /* shli r2, r1, 48 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4612248968380809216ll /* 0x4002000000000000 */ ,
+   {{6, 1, 49},                        /* shli r2, r1, 49 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4612811918334230528ll /* 0x4004000000000000 */ ,
+   {{6, 1, 50},                        /* shli r2, r1, 50 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4613937818241073152ll /* 0x4008000000000000 */ ,
+   {{6, 1, 51},                        /* shli r2, r1, 51 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4616189618054758400ll /* 0x4010000000000000 */ ,
+   {{6, 1, 52},                        /* shli r2, r1, 52 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4620693217682128896ll /* 0x4020000000000000 */ ,
+   {{6, 1, 53},                        /* shli r2, r1, 53 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4629700416936869888ll /* 0x4040000000000000 */ ,
+   {{6, 1, 54},                        /* shli r2, r1, 54 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4647714815446351872ll /* 0x4080000000000000 */ ,
+   {{6, 1, 55},                        /* shli r2, r1, 55 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4683743612465315840ll /* 0x4100000000000000 */ ,
+   {{6, 1, 56},                        /* shli r2, r1, 56 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4755801206503243776ll /* 0x4200000000000000 */ ,
+   {{6, 1, 57},                        /* shli r2, r1, 57 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4899916394579099648ll /* 0x4400000000000000 */ ,
+   {{6, 1, 58},                        /* shli r2, r1, 58 */
+    {6, 1, 62},                        /* shli r3, r1, 62 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {5188146770730811392ll /* 0x4800000000000000 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 2, 59}}                        /* shli r3, r2, 59 */
+   },
+  {5764607523034234880ll /* 0x5000000000000000 */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 2, 60}}                        /* shli r3, r2, 60 */
+   },
+  {6917529027641081855ll /* 0x5fffffffffffffff */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 61},                        /* shli r3, r2, 61 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {6917529027641081856ll /* 0x6000000000000000 */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 2, 61}}                        /* shli r3, r2, 61 */
+   },
+  {9223372036854775799ll /* 0x7ffffffffffffff7 */ ,
+   {{5, 1, 1},                 /* shl3add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775800ll /* 0x7ffffffffffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775801ll /* 0x7ffffffffffffff9 */ ,
+   {{6, 1, 60},                        /* shli r2, r1, 60 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* shl3add r4, r3, r1 */
+   },
+  {9223372036854775803ll /* 0x7ffffffffffffffb */ ,
+   {{4, 1, 1},                 /* shl2add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775804ll /* 0x7ffffffffffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775805ll /* 0x7ffffffffffffffd */ ,
+   {{3, 1, 1},                 /* shl1add r2, r1, r1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775806ll /* 0x7ffffffffffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 63},                        /* shli r3, r1, 63 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {9223372036854775807ll /* 0x7fffffffffffffff */ ,
+   {{6, 1, 63},                        /* shli r2, r1, 63 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   }
+};
+
+const int tilegx_multiply_insn_seq_table_size =
+  (int) (sizeof tilegx_multiply_insn_seq_table
+         / sizeof tilegx_multiply_insn_seq_table[0]);
diff --git a/gcc/config/tilegx/predicates.md b/gcc/config/tilegx/predicates.md
new file mode 100644 (file)
index 0000000..5a493ff
--- /dev/null
@@ -0,0 +1,293 @@
+;; Predicate definitions for Tilera TILE-Gx.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+;; Return true if OP is the zero constant for MODE.
+(define_predicate "const_zero_operand"
+  (and (match_code "const_int,const_double,const_vector")
+       (match_test "op == CONST0_RTX (mode)")))
+
+;; Returns true if OP is either the constant zero or a register.
+(define_predicate "reg_or_0_operand"
+  (and (ior (match_operand 0 "register_operand")
+           (match_operand 0 "const_zero_operand"))
+       (match_test "GET_MODE_SIZE (mode) <= UNITS_PER_WORD")))
+
+; Return 1 if OP is a valid Pmode pointer.
+(define_predicate "pointer_operand"
+  (and (match_operand 0 "address_operand")
+       (ior (match_operand 0 "pmode_register_operand")
+           (match_operand 0 "const_zero_operand"))))
+
+; Return 1 if OP is a network register identifier.
+(define_predicate "netreg_operand"
+  (and (match_code "const_int")
+       (match_test "IN_RANGE (INTVAL (op), 0, 5)")))
+
+; Return 1 if OP is an unsigned 6-bit constant.
+(define_predicate "u6bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "INTVAL (op) == (INTVAL (op) & 0x3F)")))
+
+;; Return 1 if OP is an unsigned 16-bit constant.
+(define_predicate "u16bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 16)")))
+
+;; Return 1 if OP is a signed 8-bit constant.
+(define_predicate "s8bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "satisfies_constraint_I (op)")))
+
+;; Return 1 if OP is a signed 16-bit constant.
+(define_predicate "s16bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "satisfies_constraint_J (op)")))
+
+;; Return 1 if OP is an unsigned 14-bit constant.
+(define_predicate "u14bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 14)")))
+
+;; Return 1 if OP is a constant or any register.
+(define_predicate "reg_or_cint_operand"
+  (ior (match_operand 0 "register_operand")
+       (match_operand 0 "const_int_operand")))
+
+;; Returns 1 if OP is a "last" unspec wrapper for a symbol, got, or
+;; tls reference.
+(define_predicate "const_last_symbolic_operand"
+  (and (match_code "const")
+       (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
+       (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_LAST")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2_LAST")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_PCREL")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_LAST_GOT")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_GOT")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_GD")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_IE")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1_LAST_TLS_LE"))))
+
+;; Returns 1 if OP is an unspec wrapper for a symbol, got, or tls
+;; reference.
+(define_predicate "const_symbolic_operand"
+  (and (match_code "const")
+       (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
+       (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW1")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW2")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW3")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_PCREL")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_GOT")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_GD")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_IE")
+           (match_test "XINT (XEXP (op,0), 1) == UNSPEC_HW0_TLS_LE"))))
+
+;; Return 1 if OP is a 8-element vector constant with identical signed
+;; 8-bit elements or any register.
+(define_predicate "reg_or_v8s8bit_operand"
+  (ior (match_operand 0 "register_operand")
+       (and (match_code "const_vector")
+           (match_test "CONST_VECTOR_NUNITS (op) == 8
+                         && satisfies_constraint_I (CONST_VECTOR_ELT (op, 0))
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 4)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 5)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 6)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 7)"))))
+
+;; Return 1 if OP is a 4-element vector constant with identical signed
+;; 8-bit elements or any register.
+(define_predicate "reg_or_v4s8bit_operand"
+  (ior (match_operand 0 "register_operand")
+       (and (match_code "const_vector")
+           (match_test "CONST_VECTOR_NUNITS (op) == 4
+                         && satisfies_constraint_I (CONST_VECTOR_ELT (op, 0))
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)"))))
+
+;; Return 1 if the operand is a valid second operand to an add insn.
+(define_predicate "add_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_J (op)")
+    (ior (match_operand 0 "register_operand")
+        (match_operand 0 "const_last_symbolic_operand"))))
+
+;; Return 1 if the operand is a register or signed 8-bit immediate operand.
+(define_predicate "reg_or_s8bit_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_I (op)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 if the operand is a register or unsigned 5-bit immediate operand.
+(define_predicate "reg_or_u5bit_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 if the operand is a register or unsigned 6-bit immediate operand.
+(define_predicate "reg_or_u6bit_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "INTVAL (op) == (INTVAL (op) & 0x3F)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 for an operand suitable for ANDing with a register.
+(define_predicate "and_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_I (op) || satisfies_constraint_M (op)")
+    (match_operand 0 "register_operand")))
+
+; Return 1 if the operand is 2, 4 or 8.
+(define_predicate "cint_248_operand"
+  (and (match_code "const_int")
+       (match_test
+        "INTVAL (op) == 2 || INTVAL (op) == 4 || INTVAL (op) == 8")))
+
+;; Return true if OP is a TLS symbolic operand.
+(define_predicate "tls_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) !=  TLS_MODEL_NONE")))
+
+;; Return true if OP is a symbolic operand for the TLS Global Dynamic model.
+(define_predicate "tls_gd_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_GLOBAL_DYNAMIC")))
+
+;; Return true if OP is a symbolic operand for the TLS Local Dynamic model.
+(define_predicate "tls_ld_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_DYNAMIC")))
+
+;; Return true if OP is a symbolic operand that can be used for the
+;; TLS Initial Exec model.
+(define_predicate "tls_ie_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (ior (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_INITIAL_EXEC")
+            (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC"))))
+
+;; Return true if OP is a symbolic operand for the TLS Local Exec model.
+(define_predicate "tls_le_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC")))
+
+;; Returns true if OP is any general operand except for an
+;; auto-incrementing address operand.
+(define_predicate "nonautoinc_operand"
+  (and (match_operand 0 "general_operand")
+       (not (ior (match_code "pre_dec") (match_code "pre_inc")
+                (match_code "post_dec") (match_code "post_inc")
+                (match_code "post_modify") (match_code "pre_modify")))))
+;; Returns true if OP is a non-auto-incrementing memory operand.
+(define_predicate "nonautoincmem_operand"
+  (match_operand 0 "memory_operand")
+{
+  return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+})
+
+;; Returns true if OP is a non-auto-incrementing memory, general
+;; operand.
+(define_predicate "nonautoincmem_general_operand"
+  (match_operand 0 "general_operand")
+{
+  if (memory_operand (op, mode))
+    return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+  else
+    return true;
+})
+;; Returns true if OP is a non-auto-incrementing memory, non-immediate
+;; operand.
+(define_predicate "nonautoincmem_nonimmediate_operand"
+  (match_operand 0 "nonimmediate_operand")
+{
+  if (memory_operand (op, mode))
+    return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+  else
+    return true;
+})
+;; Return true if OP is a valid operand for the source of a move insn.
+(define_predicate "move_operand"
+  (match_operand 0 "general_operand")
+{
+  /* If both modes are non-void they must be the same.  */
+  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
+    return false;
+
+  switch (GET_CODE (op))
+    {
+    case CONST_INT:
+      return (satisfies_constraint_J (op)
+              || satisfies_constraint_K (op)
+              || (mode == DImode &&
+                  (satisfies_constraint_N (op)
+                   || satisfies_constraint_P (op))));
+
+    case MEM:
+      return memory_address_p (mode, XEXP (op, 0));
+
+    case CONST:
+      return const_last_symbolic_operand (op, mode);
+
+    default:
+      return register_operand (op, mode);
+    }
+})
+
+;; Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref,
+;; possibly with an offset.
+(define_predicate "symbolic_operand"
+  (ior (match_code "symbol_ref,label_ref")
+       (and (match_code "const")
+           (match_test "GET_CODE (XEXP (op,0)) == PLUS
+                        && (GET_CODE (XEXP (XEXP (op,0), 0)) == SYMBOL_REF
+                            || GET_CODE (XEXP (XEXP (op,0), 0)) == LABEL_REF)
+                        && CONST_INT_P (XEXP (XEXP (op,0), 1))"))))
+
+;; Return 1 for an unsigned 16 bit or a const symbolc operand.
+(define_predicate "u16bit_or_const_symbolic_operand"
+  (ior (match_operand 0 "u16bit_cint_operand")
+       (match_operand 0 "const_symbolic_operand")))
+
+;; Return true if OP is an address suitable for a call insn.
+;; Call insn on TILE can take a PC-relative constant address
+;; or any regular memory address.
+(define_predicate "call_address_operand"
+  (ior (match_operand 0 "symbolic_operand")
+       (match_test "memory_address_p (Pmode, op)")))
+
+;; Return true if OP is an operand suitable for a call insn.
+(define_predicate "call_operand"
+  (and (match_code "mem")
+       (match_test "call_address_operand (XEXP (op, 0), mode)")))
+
+;; Return 1 if OP is a signed comparison operation.
+;; We can use these directly in compares against zero.
+(define_predicate "signed_comparison_operator"
+  (match_code "eq,ne,le,lt,ge,gt"))
+
+;; Return 1 if OP is a equal or not-equal operation.
+(define_predicate "eqne_operator"
+  (match_code "eq,ne"))
diff --git a/gcc/config/tilegx/sync.md b/gcc/config/tilegx/sync.md
new file mode 100644 (file)
index 0000000..8be762a
--- /dev/null
@@ -0,0 +1,165 @@
+;; GCC machine description for Tilera TILE-Gx synchronization
+;; instructions.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_code_iterator fetchop [plus ior and])
+(define_code_attr fetchop_name [(plus "add") (ior "or") (and "and")])
+
+(define_insn "mtspr_cmpexch<mode>"
+  [(set (reg:I48MODE TILEGX_CMPEXCH_REG)
+        (unspec_volatile:I48MODE
+         [(match_operand:I48MODE 0 "reg_or_0_operand" "rO")]
+         UNSPEC_SPR_MOVE))]
+  ""
+  "mtspr\tCMPEXCH_VALUE, %r0"
+  [(set_attr "type" "X1")])
+
+
+(define_expand "atomic_compare_and_swap<mode>"
+  [(match_operand:DI 0 "register_operand" "")          ;; bool output
+   (match_operand:I48MODE 1 "register_operand" "")     ;; val output
+   (match_operand:I48MODE 2 "nonautoincmem_operand" "") ;; memory
+   (match_operand:I48MODE 3 "reg_or_0_operand" "")     ;; expected value
+   (match_operand:I48MODE 4 "reg_or_0_operand" "")     ;; desired value
+   (match_operand:SI 5 "const_int_operand" "")         ;; is_weak
+   (match_operand:SI 6 "const_int_operand" "")         ;; mod_s
+   (match_operand:SI 7 "const_int_operand" "")]                ;; mod_f
+  ""
+{
+  enum memmodel mod_s = (enum memmodel) INTVAL (operands[6]);
+
+  if (operands[3] != const0_rtx)
+    operands[3] = force_reg (<MODE>mode, operands[3]);
+  if (operands[4] != const0_rtx)
+    operands[4] = force_reg (<MODE>mode, operands[4]);
+
+  tilegx_pre_atomic_barrier (mod_s);
+  emit_insn (gen_mtspr_cmpexch<mode> (operands[3]));
+  emit_insn (gen_atomic_compare_and_swap_bare<mode> (operands[1], operands[2],
+                                                   operands[4]));
+  tilegx_post_atomic_barrier (mod_s);
+  emit_insn (gen_insn_cmpeq_<mode>di (operands[0], operands[1], operands[3]));
+  DONE;
+})
+
+
+(define_insn "atomic_compare_and_swap_bare<mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
+   (set (match_dup 1)
+        (unspec_volatile:I48MODE
+         [(match_dup 1)
+         (reg:I48MODE TILEGX_CMPEXCH_REG)
+         (match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
+         UNSPEC_CMPXCHG))]
+  ""
+  "cmpexch<four_if_si>\t%0, %1, %r2"
+  [(set_attr "type" "X1_L2")])
+
+
+(define_expand "atomic_exchange<mode>"
+  [(match_operand:I48MODE 0 "register_operand" "")      ;; result
+   (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
+   (match_operand:I48MODE 2 "reg_or_0_operand" "")      ;; input
+   (match_operand:SI 3 "const_int_operand" "")]         ;; model
+  ""
+{
+  enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+
+  tilegx_pre_atomic_barrier (model);
+  emit_insn (gen_atomic_exchange_bare<mode> (operands[0], operands[1],
+                                             operands[2]));
+  tilegx_post_atomic_barrier (model);
+  DONE;
+})
+
+
+(define_insn "atomic_exchange_bare<mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
+   (set (match_dup 1)
+       (unspec_volatile:I48MODE
+        [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
+        UNSPEC_XCHG))]
+  ""
+  "exch<four_if_si>\t%0, %1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+
+(define_expand "atomic_fetch_<fetchop_name><mode>"
+  [(match_operand:I48MODE 0 "register_operand" "")      ;; result
+   (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
+   (unspec_volatile:I48MODE
+    [(fetchop:I48MODE
+      (match_dup 1)
+      (match_operand:I48MODE 2 "reg_or_0_operand" ""))] ;; value
+    UNSPEC_ATOMIC)
+   (match_operand:SI 3 "const_int_operand" "")]         ;; model
+  ""
+{
+  enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+
+  tilegx_pre_atomic_barrier (model);
+  emit_insn (gen_atomic_fetch_<fetchop_name>_bare<mode> (operands[0],
+                                                         operands[1],
+                                                         operands[2]));
+  tilegx_pre_atomic_barrier (model);
+  DONE;
+})
+
+
+(define_insn "atomic_fetch_<fetchop_name>_bare<mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (match_operand:I48MODE 1 "nonautoincmem_operand" "+U"))
+   (set (match_dup 1)
+       (unspec_volatile:I48MODE
+        [(fetchop:I48MODE
+          (match_dup 1)
+          (match_operand:I48MODE 2 "reg_or_0_operand" "rO"))]
+          UNSPEC_ATOMIC))]
+  ""
+  "fetch<fetchop_name><four_if_si>\t%0, %1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+
+(define_expand "atomic_fetch_sub<mode>"
+  [(match_operand:I48MODE 0 "register_operand" "")      ;; result
+   (match_operand:I48MODE 1 "nonautoincmem_operand" "") ;; memory
+   (unspec_volatile:I48MODE
+    [(minus:I48MODE
+      (match_dup 1)
+      (match_operand:I48MODE 2 "reg_or_0_operand" ""))] ;; value
+    UNSPEC_ATOMIC)
+   (match_operand:SI 3 "const_int_operand" "")]         ;; model
+  ""
+{
+  enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+
+  if (operands[2] != const0_rtx)
+    emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
+
+  tilegx_pre_atomic_barrier (model);
+  emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
+                                              operands[1],
+                                              operands[2]));
+  tilegx_pre_atomic_barrier (model);
+  DONE;
+})
diff --git a/gcc/config/tilegx/t-tilegx b/gcc/config/tilegx/t-tilegx
new file mode 100644 (file)
index 0000000..4e3203c
--- /dev/null
@@ -0,0 +1,21 @@
+MULTILIB_OPTIONS = m64/m32
+MULTILIB_DIRNAMES = 64 32
+MULTILIB_OSDIRNAMES = ../lib ../lib32
+
+LIBGCC = stmp-multilib
+INSTALL_LIBGCC = install-multilib
+
+tilegx-c.o: $(srcdir)/config/tilegx/tilegx-c.c \
+    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(MACHMODE_H) \
+    $(TM_H) $(TM_P_H) $(CPPLIB_H) $(TREE_H) $(C_COMMON_H)
+       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
+
+$(srcdir)/config/tilegx/mul-tables.c: \
+    $(srcdir)/config/tilepro/gen-mul-tables.cc
+       $(CC_FOR_BUILD) $(BUILD_CPPFLAGS) -O2 -o gen-mul-tables -lstdc++ $<;
+       ./gen-mul-tables > $@
+
+mul-tables.o: $(srcdir)/config/tilegx/mul-tables.c \
+    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(EXPR_H) $(OPTABS_H) \
+    $(srcdir)/config/tilegx/tilegx-multiply.h
+       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/config/tilegx/tilegx-builtins.h b/gcc/config/tilegx/tilegx-builtins.h
new file mode 100644 (file)
index 0000000..49067ae
--- /dev/null
@@ -0,0 +1,325 @@
+/* Enum for builtin intrinsics for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TILEGX_BUILTINS_H
+#define GCC_TILEGX_BUILTINS_H
+
+enum tilegx_builtin
+{
+  TILEGX_INSN_ADD,
+  TILEGX_INSN_ADDX,
+  TILEGX_INSN_ADDXSC,
+  TILEGX_INSN_AND,
+  TILEGX_INSN_BFEXTS,
+  TILEGX_INSN_BFEXTU,
+  TILEGX_INSN_BFINS,
+  TILEGX_INSN_CLZ,
+  TILEGX_INSN_CMOVEQZ,
+  TILEGX_INSN_CMOVNEZ,
+  TILEGX_INSN_CMPEQ,
+  TILEGX_INSN_CMPEXCH,
+  TILEGX_INSN_CMPEXCH4,
+  TILEGX_INSN_CMPLES,
+  TILEGX_INSN_CMPLEU,
+  TILEGX_INSN_CMPLTS,
+  TILEGX_INSN_CMPLTU,
+  TILEGX_INSN_CMPNE,
+  TILEGX_INSN_CMUL,
+  TILEGX_INSN_CMULA,
+  TILEGX_INSN_CMULAF,
+  TILEGX_INSN_CMULF,
+  TILEGX_INSN_CMULFR,
+  TILEGX_INSN_CMULH,
+  TILEGX_INSN_CMULHR,
+  TILEGX_INSN_CRC32_32,
+  TILEGX_INSN_CRC32_8,
+  TILEGX_INSN_CTZ,
+  TILEGX_INSN_DBLALIGN,
+  TILEGX_INSN_DBLALIGN2,
+  TILEGX_INSN_DBLALIGN4,
+  TILEGX_INSN_DBLALIGN6,
+  TILEGX_INSN_DRAIN,
+  TILEGX_INSN_DTLBPR,
+  TILEGX_INSN_EXCH,
+  TILEGX_INSN_EXCH4,
+  TILEGX_INSN_FDOUBLE_ADD_FLAGS,
+  TILEGX_INSN_FDOUBLE_ADDSUB,
+  TILEGX_INSN_FDOUBLE_MUL_FLAGS,
+  TILEGX_INSN_FDOUBLE_PACK1,
+  TILEGX_INSN_FDOUBLE_PACK2,
+  TILEGX_INSN_FDOUBLE_SUB_FLAGS,
+  TILEGX_INSN_FDOUBLE_UNPACK_MAX,
+  TILEGX_INSN_FDOUBLE_UNPACK_MIN,
+  TILEGX_INSN_FETCHADD,
+  TILEGX_INSN_FETCHADD4,
+  TILEGX_INSN_FETCHADDGEZ,
+  TILEGX_INSN_FETCHADDGEZ4,
+  TILEGX_INSN_FETCHAND,
+  TILEGX_INSN_FETCHAND4,
+  TILEGX_INSN_FETCHOR,
+  TILEGX_INSN_FETCHOR4,
+  TILEGX_INSN_FINV,
+  TILEGX_INSN_FLUSH,
+  TILEGX_INSN_FLUSHWB,
+  TILEGX_INSN_FNOP,
+  TILEGX_INSN_FSINGLE_ADD1,
+  TILEGX_INSN_FSINGLE_ADDSUB2,
+  TILEGX_INSN_FSINGLE_MUL1,
+  TILEGX_INSN_FSINGLE_MUL2,
+  TILEGX_INSN_FSINGLE_PACK1,
+  TILEGX_INSN_FSINGLE_PACK2,
+  TILEGX_INSN_FSINGLE_SUB1,
+  TILEGX_INSN_ICOH,
+  TILEGX_INSN_ILL,
+  TILEGX_INSN_INFO,
+  TILEGX_INSN_INFOL,
+  TILEGX_INSN_INV,
+  TILEGX_INSN_LD,
+  TILEGX_INSN_LD1S,
+  TILEGX_INSN_LD1U,
+  TILEGX_INSN_LD2S,
+  TILEGX_INSN_LD2U,
+  TILEGX_INSN_LD4S,
+  TILEGX_INSN_LD4U,
+  TILEGX_INSN_LDNA,
+  TILEGX_INSN_LDNT,
+  TILEGX_INSN_LDNT1S,
+  TILEGX_INSN_LDNT1U,
+  TILEGX_INSN_LDNT2S,
+  TILEGX_INSN_LDNT2U,
+  TILEGX_INSN_LDNT4S,
+  TILEGX_INSN_LDNT4U,
+  TILEGX_INSN_LD_L2,
+  TILEGX_INSN_LD1S_L2,
+  TILEGX_INSN_LD1U_L2,
+  TILEGX_INSN_LD2S_L2,
+  TILEGX_INSN_LD2U_L2,
+  TILEGX_INSN_LD4S_L2,
+  TILEGX_INSN_LD4U_L2,
+  TILEGX_INSN_LDNA_L2,
+  TILEGX_INSN_LDNT_L2,
+  TILEGX_INSN_LDNT1S_L2,
+  TILEGX_INSN_LDNT1U_L2,
+  TILEGX_INSN_LDNT2S_L2,
+  TILEGX_INSN_LDNT2U_L2,
+  TILEGX_INSN_LDNT4S_L2,
+  TILEGX_INSN_LDNT4U_L2,
+  TILEGX_INSN_LD_MISS,
+  TILEGX_INSN_LD1S_MISS,
+  TILEGX_INSN_LD1U_MISS,
+  TILEGX_INSN_LD2S_MISS,
+  TILEGX_INSN_LD2U_MISS,
+  TILEGX_INSN_LD4S_MISS,
+  TILEGX_INSN_LD4U_MISS,
+  TILEGX_INSN_LDNA_MISS,
+  TILEGX_INSN_LDNT_MISS,
+  TILEGX_INSN_LDNT1S_MISS,
+  TILEGX_INSN_LDNT1U_MISS,
+  TILEGX_INSN_LDNT2S_MISS,
+  TILEGX_INSN_LDNT2U_MISS,
+  TILEGX_INSN_LDNT4S_MISS,
+  TILEGX_INSN_LDNT4U_MISS,
+  TILEGX_INSN_LNK,
+  TILEGX_INSN_MF,
+  TILEGX_INSN_MFSPR,
+  TILEGX_INSN_MM,
+  TILEGX_INSN_MNZ,
+  TILEGX_INSN_MOVE,
+  TILEGX_INSN_MTSPR,
+  TILEGX_INSN_MUL_HS_HS,
+  TILEGX_INSN_MUL_HS_HU,
+  TILEGX_INSN_MUL_HS_LS,
+  TILEGX_INSN_MUL_HS_LU,
+  TILEGX_INSN_MUL_HU_HU,
+  TILEGX_INSN_MUL_HU_LS,
+  TILEGX_INSN_MUL_HU_LU,
+  TILEGX_INSN_MUL_LS_LS,
+  TILEGX_INSN_MUL_LS_LU,
+  TILEGX_INSN_MUL_LU_LU,
+  TILEGX_INSN_MULA_HS_HS,
+  TILEGX_INSN_MULA_HS_HU,
+  TILEGX_INSN_MULA_HS_LS,
+  TILEGX_INSN_MULA_HS_LU,
+  TILEGX_INSN_MULA_HU_HU,
+  TILEGX_INSN_MULA_HU_LS,
+  TILEGX_INSN_MULA_HU_LU,
+  TILEGX_INSN_MULA_LS_LS,
+  TILEGX_INSN_MULA_LS_LU,
+  TILEGX_INSN_MULA_LU_LU,
+  TILEGX_INSN_MULAX,
+  TILEGX_INSN_MULX,
+  TILEGX_INSN_MZ,
+  TILEGX_INSN_NAP,
+  TILEGX_INSN_NOP,
+  TILEGX_INSN_NOR,
+  TILEGX_INSN_OR,
+  TILEGX_INSN_PCNT,
+  TILEGX_INSN_PREFETCH_L1,
+  TILEGX_INSN_PREFETCH_L1_FAULT,
+  TILEGX_INSN_PREFETCH_L2,
+  TILEGX_INSN_PREFETCH_L2_FAULT,
+  TILEGX_INSN_PREFETCH_L3,
+  TILEGX_INSN_PREFETCH_L3_FAULT,
+  TILEGX_INSN_REVBITS,
+  TILEGX_INSN_REVBYTES,
+  TILEGX_INSN_ROTL,
+  TILEGX_INSN_SHL,
+  TILEGX_INSN_SHL16INSLI,
+  TILEGX_INSN_SHL1ADD,
+  TILEGX_INSN_SHL1ADDX,
+  TILEGX_INSN_SHL2ADD,
+  TILEGX_INSN_SHL2ADDX,
+  TILEGX_INSN_SHL3ADD,
+  TILEGX_INSN_SHL3ADDX,
+  TILEGX_INSN_SHLX,
+  TILEGX_INSN_SHRS,
+  TILEGX_INSN_SHRU,
+  TILEGX_INSN_SHRUX,
+  TILEGX_INSN_SHUFFLEBYTES,
+  TILEGX_INSN_ST,
+  TILEGX_INSN_ST1,
+  TILEGX_INSN_ST2,
+  TILEGX_INSN_ST4,
+  TILEGX_INSN_STNT,
+  TILEGX_INSN_STNT1,
+  TILEGX_INSN_STNT2,
+  TILEGX_INSN_STNT4,
+  TILEGX_INSN_SUB,
+  TILEGX_INSN_SUBX,
+  TILEGX_INSN_SUBXSC,
+  TILEGX_INSN_TBLIDXB0,
+  TILEGX_INSN_TBLIDXB1,
+  TILEGX_INSN_TBLIDXB2,
+  TILEGX_INSN_TBLIDXB3,
+  TILEGX_INSN_V1ADD,
+  TILEGX_INSN_V1ADDI,
+  TILEGX_INSN_V1ADDUC,
+  TILEGX_INSN_V1ADIFFU,
+  TILEGX_INSN_V1AVGU,
+  TILEGX_INSN_V1CMPEQ,
+  TILEGX_INSN_V1CMPEQI,
+  TILEGX_INSN_V1CMPLES,
+  TILEGX_INSN_V1CMPLEU,
+  TILEGX_INSN_V1CMPLTS,
+  TILEGX_INSN_V1CMPLTSI,
+  TILEGX_INSN_V1CMPLTU,
+  TILEGX_INSN_V1CMPLTUI,
+  TILEGX_INSN_V1CMPNE,
+  TILEGX_INSN_V1DDOTPU,
+  TILEGX_INSN_V1DDOTPUA,
+  TILEGX_INSN_V1DDOTPUS,
+  TILEGX_INSN_V1DDOTPUSA,
+  TILEGX_INSN_V1DOTP,
+  TILEGX_INSN_V1DOTPA,
+  TILEGX_INSN_V1DOTPU,
+  TILEGX_INSN_V1DOTPUA,
+  TILEGX_INSN_V1DOTPUS,
+  TILEGX_INSN_V1DOTPUSA,
+  TILEGX_INSN_V1INT_H,
+  TILEGX_INSN_V1INT_L,
+  TILEGX_INSN_V1MAXU,
+  TILEGX_INSN_V1MAXUI,
+  TILEGX_INSN_V1MINU,
+  TILEGX_INSN_V1MINUI,
+  TILEGX_INSN_V1MNZ,
+  TILEGX_INSN_V1MULTU,
+  TILEGX_INSN_V1MULU,
+  TILEGX_INSN_V1MULUS,
+  TILEGX_INSN_V1MZ,
+  TILEGX_INSN_V1SADAU,
+  TILEGX_INSN_V1SADU,
+  TILEGX_INSN_V1SHL,
+  TILEGX_INSN_V1SHLI,
+  TILEGX_INSN_V1SHRS,
+  TILEGX_INSN_V1SHRSI,
+  TILEGX_INSN_V1SHRU,
+  TILEGX_INSN_V1SHRUI,
+  TILEGX_INSN_V1SUB,
+  TILEGX_INSN_V1SUBUC,
+  TILEGX_INSN_V2ADD,
+  TILEGX_INSN_V2ADDI,
+  TILEGX_INSN_V2ADDSC,
+  TILEGX_INSN_V2ADIFFS,
+  TILEGX_INSN_V2AVGS,
+  TILEGX_INSN_V2CMPEQ,
+  TILEGX_INSN_V2CMPEQI,
+  TILEGX_INSN_V2CMPLES,
+  TILEGX_INSN_V2CMPLEU,
+  TILEGX_INSN_V2CMPLTS,
+  TILEGX_INSN_V2CMPLTSI,
+  TILEGX_INSN_V2CMPLTU,
+  TILEGX_INSN_V2CMPLTUI,
+  TILEGX_INSN_V2CMPNE,
+  TILEGX_INSN_V2DOTP,
+  TILEGX_INSN_V2DOTPA,
+  TILEGX_INSN_V2INT_H,
+  TILEGX_INSN_V2INT_L,
+  TILEGX_INSN_V2MAXS,
+  TILEGX_INSN_V2MAXSI,
+  TILEGX_INSN_V2MINS,
+  TILEGX_INSN_V2MINSI,
+  TILEGX_INSN_V2MNZ,
+  TILEGX_INSN_V2MULFSC,
+  TILEGX_INSN_V2MULS,
+  TILEGX_INSN_V2MULTS,
+  TILEGX_INSN_V2MZ,
+  TILEGX_INSN_V2PACKH,
+  TILEGX_INSN_V2PACKL,
+  TILEGX_INSN_V2PACKUC,
+  TILEGX_INSN_V2SADAS,
+  TILEGX_INSN_V2SADAU,
+  TILEGX_INSN_V2SADS,
+  TILEGX_INSN_V2SADU,
+  TILEGX_INSN_V2SHL,
+  TILEGX_INSN_V2SHLI,
+  TILEGX_INSN_V2SHLSC,
+  TILEGX_INSN_V2SHRS,
+  TILEGX_INSN_V2SHRSI,
+  TILEGX_INSN_V2SHRU,
+  TILEGX_INSN_V2SHRUI,
+  TILEGX_INSN_V2SUB,
+  TILEGX_INSN_V2SUBSC,
+  TILEGX_INSN_V4ADD,
+  TILEGX_INSN_V4ADDSC,
+  TILEGX_INSN_V4INT_H,
+  TILEGX_INSN_V4INT_L,
+  TILEGX_INSN_V4PACKSC,
+  TILEGX_INSN_V4SHL,
+  TILEGX_INSN_V4SHLSC,
+  TILEGX_INSN_V4SHRS,
+  TILEGX_INSN_V4SHRU,
+  TILEGX_INSN_V4SUB,
+  TILEGX_INSN_V4SUBSC,
+  TILEGX_INSN_WH64,
+  TILEGX_INSN_XOR,
+  TILEGX_NETWORK_BARRIER,
+  TILEGX_IDN0_RECEIVE,
+  TILEGX_IDN1_RECEIVE,
+  TILEGX_IDN_SEND,
+  TILEGX_UDN0_RECEIVE,
+  TILEGX_UDN1_RECEIVE,
+  TILEGX_UDN2_RECEIVE,
+  TILEGX_UDN3_RECEIVE,
+  TILEGX_UDN_SEND,
+  TILEGX_BUILTIN_max
+};
+
+#endif /* !GCC_TILEGX_BUILTINS_H */
diff --git a/gcc/config/tilegx/tilegx-c.c b/gcc/config/tilegx/tilegx-c.c
new file mode 100644 (file)
index 0000000..9cb8f7a
--- /dev/null
@@ -0,0 +1,55 @@
+/* Definitions of C specific functions for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "machmode.h"
+#include "tm.h"
+#include "tm_p.h"
+#include "cpplib.h"
+#include "tree.h"
+#include "c-family/c-common.h"
+
+/* copy defines in c-cppbuiltin.c */
+# define builtin_define(TXT) cpp_define (pfile, TXT)
+# define builtin_assert(TXT) cpp_assert (pfile, TXT)
+
+
+/* Implement TARGET_CPU_CPP_BUILTINS.  */
+void
+tilegx_cpu_cpp_builtins (struct cpp_reader *pfile)
+{
+  builtin_define ("__tile__");
+  builtin_define ("__tilegx__");
+  builtin_define ("__tile_chip__=10");
+  builtin_define ("__tile_chip_rev__=0");
+  builtin_assert ("cpu=tilegx");
+  builtin_assert ("machine=tilegx");
+
+  if (TARGET_32BIT)
+    builtin_define ("__tilegx32__");
+
+  TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
+  GNU_USER_TARGET_OS_CPP_BUILTINS ();
+}
+
+
diff --git a/gcc/config/tilegx/tilegx-generic.md b/gcc/config/tilegx/tilegx-generic.md
new file mode 100644 (file)
index 0000000..970344a
--- /dev/null
@@ -0,0 +1,112 @@
+;; Scheduling description for Tilera TILE-Gx chip.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_automaton "tile")
+
+; Make the scheduling automaton an ndfa.
+(automata_option "ndfa")
+
+; Name the three pipes.
+(define_cpu_unit "X0" "tile")
+(define_cpu_unit "X1" "tile")
+(define_cpu_unit "Y0" "tile")
+(define_cpu_unit "Y1" "tile")
+(define_cpu_unit "Y2" "tile")
+
+(define_insn_reservation "X0" 1
+  (eq_attr "type" "X0")
+  "X0")
+
+(define_insn_reservation "X0_2cycle" 2
+  (eq_attr "type" "X0_2cycle")
+  "X0,nothing")
+
+(define_insn_reservation "X1" 1
+  (eq_attr "type" "X1,X1_branch")
+  "X1")
+
+(define_insn_reservation "X1_2cycle" 2
+  (eq_attr "type" "X1_2cycle")
+  "X1,nothing")
+
+(define_insn_reservation "X1_L2" 11
+  (eq_attr "type" "X1_L2")
+  "X1")
+
+(define_insn_reservation "X1_miss" 80
+  (eq_attr "type" "X1_miss")
+  "X1")
+
+(define_insn_reservation "X01" 1
+  (eq_attr "type" "X01")
+  "X0|X1")
+
+(define_insn_reservation "Y0" 1
+  (eq_attr "type" "Y0")
+  "Y0|X0")
+
+(define_insn_reservation "Y0_2cycle" 2
+  (eq_attr "type" "Y0_2cycle")
+  "Y0|X0,nothing")
+
+(define_insn_reservation "Y1" 1
+  (eq_attr "type" "Y1")
+  "Y1|X1")
+
+(define_insn_reservation "Y2" 1
+  (eq_attr "type" "Y2")
+  "Y2|X1")
+
+(define_insn_reservation "Y2_2cycle" 2
+  (eq_attr "type" "Y2_2cycle")
+  "Y2|X1,nothing")
+
+(define_insn_reservation "Y2_L2" 11
+  (eq_attr "type" "Y2_L2")
+  "Y2|X1")
+
+(define_insn_reservation "Y2_miss" 80
+  (eq_attr "type" "Y2_miss")
+  "Y2|X1")
+
+(define_insn_reservation "Y01" 1
+  (eq_attr "type" "Y01")
+  "Y0|Y1|X0|X1")
+
+(define_insn_reservation "nothing" 0
+  (eq_attr "type" "nothing")
+  "nothing")
+
+(define_insn_reservation "cannot_bundle" 1
+  (eq_attr "type" "cannot_bundle")
+  "X0+X1")
+
+(define_insn_reservation "cannot_bundle_3cycle" 3
+  (eq_attr "type" "cannot_bundle_3cycle")
+  "X0+X1")
+
+(define_insn_reservation "cannot_bundle_4cycle" 4
+  (eq_attr "type" "cannot_bundle_4cycle")
+  "X0+X1")
+
+
+; A bundle must be in either X format or Y format.
+(exclusion_set "X0,X1" "Y0,Y1,Y2")
diff --git a/gcc/config/tilegx/tilegx-modes.def b/gcc/config/tilegx/tilegx-modes.def
new file mode 100644 (file)
index 0000000..47c959f
--- /dev/null
@@ -0,0 +1,38 @@
+/* TILE-Gx extra machine modes. 
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Extra modes for handling struct returns in up to 10 registers. */
+INT_MODE (R3I, 24);
+INT_MODE (R5I, 40);
+INT_MODE (R6I, 48);
+INT_MODE (R7I, 56);
+INT_MODE (R8I, 64);
+INT_MODE (R9I, 72);
+INT_MODE (R10I, 80);
+
+/* Vector modes.  */
+VECTOR_MODES (INT, 8);     /* V8QI V4HI V2SI */
+VECTOR_MODE (INT, QI, 16); /* V16QI */
+VECTOR_MODE (INT, HI, 8);  /* V8HI */
+VECTOR_MODE (INT, SI, 4);  /* V4SI */
+VECTOR_MODE (INT, HI, 2);  /* V2HI */
+
+VECTOR_MODE (INT, QI, 4);  /* V4QI */
diff --git a/gcc/config/tilegx/tilegx-multiply.h b/gcc/config/tilegx/tilegx-multiply.h
new file mode 100644 (file)
index 0000000..7acba06
--- /dev/null
@@ -0,0 +1,79 @@
+/* Header for constant multiple table for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TILEGX_MULTIPLY_H
+#define GCC_TILEGX_MULTIPLY_H
+
+/* A node of a tilegx_multiply_insn_seq, corresponding to a single
+   machine instruction such as 'add', 's1a', or an shl by a constant.  */
+struct tilegx_multiply_insn_seq_entry
+{
+  /* Which operation this node performs (e.g. an add or sub).
+     Don't use this directly, call get_opcode() table to get a insn_code.  */
+  unsigned char compressed_opcode;
+
+  /* The left-hand side of this expression tree.
+     If equal to 0, it refers to 'zero'.
+     If equal to 1, it refers to the original input to the multiply operation.
+     Otherwise, subtract two and it is an index into the containing
+     tilegx_multiply_insn_seq's 'op' array. Since it can only point to some
+     value that has already been computed it will always point to an
+     earlier entry in the array.  */
+  unsigned char lhs;
+
+  /* This is like lhs, but for the right-hand side. However, for shift
+     opcodes this is a shift count rather than an operand index.  */
+  unsigned char rhs;
+};
+
+/* Maximum size of op array.  */
+#define tilegx_multiply_insn_seq_MAX_OPERATIONS 4
+
+/* This defines a DAG describing how to multiply by a constant in
+   terms of one or more machine instructions.  */
+struct tilegx_multiply_insn_seq
+{
+  /* The constant factor by which this expression tree multiplies its input.  */
+  long long multiplier;
+
+  /* The nodes of the parse tree. These are ordered so that instructions
+     can be emitted in the same order that they appear in this array.
+     Entry entry in this array can only refer to earlier entries in
+     the array.  */
+  struct tilegx_multiply_insn_seq_entry
+    op[tilegx_multiply_insn_seq_MAX_OPERATIONS];
+
+};
+
+/* A mapping from the compressed opcode to the corresponding enum
+   insn_code.  */
+extern const enum insn_code tilegx_multiply_insn_seq_decode_opcode[];
+
+/* Table mapping constant int multipliers to an expression
+   tree that efficiently performs that multiplication.
+   This is sorted by its 'multiplier' field so a binary search
+   can look for matches.  */
+extern const struct tilegx_multiply_insn_seq tilegx_multiply_insn_seq_table[];
+
+/* The number of elements in multiply_insn_seq_table.  */
+extern const int tilegx_multiply_insn_seq_table_size;
+
+#endif /* !GCC_TILEGX_MULTIPLY_H */
diff --git a/gcc/config/tilegx/tilegx-protos.h b/gcc/config/tilegx/tilegx-protos.h
new file mode 100644 (file)
index 0000000..56ce617
--- /dev/null
@@ -0,0 +1,74 @@
+/* Prototypes of target machine for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TILEGX_PROTOS_H
+#define GCC_TILEGX_PROTOS_H
+
+extern void tilegx_init_expanders (void);
+extern bool tilegx_legitimate_pic_operand_p (rtx);
+extern rtx tilegx_simd_int (rtx, enum machine_mode);
+
+#ifdef RTX_CODE
+extern bool tilegx_bitfield_operand_p (HOST_WIDE_INT, int *, int *);
+extern void tilegx_expand_set_const64 (rtx, rtx);
+extern bool tilegx_expand_mov (enum machine_mode, rtx *);
+extern void tilegx_expand_unaligned_load (rtx, rtx, HOST_WIDE_INT,
+                                         HOST_WIDE_INT, bool);
+extern void tilegx_expand_movmisalign (enum machine_mode, rtx *);
+extern void tilegx_allocate_stack (rtx, rtx);
+extern bool tilegx_expand_muldi (rtx, rtx, rtx);
+extern void tilegx_expand_smuldi3_highpart (rtx, rtx, rtx);
+extern void tilegx_expand_umuldi3_highpart (rtx, rtx, rtx);
+
+extern bool tilegx_emit_setcc (rtx[], enum machine_mode);
+extern void tilegx_emit_conditional_branch (rtx[], enum machine_mode);
+extern rtx tilegx_emit_conditional_move (rtx);
+extern const char *tilegx_output_cbranch_with_opcode (rtx, rtx *,
+                                                     const char *,
+                                                     const char *, int);
+extern const char *tilegx_output_cbranch (rtx, rtx *, bool);
+extern void tilegx_expand_tablejump (rtx, rtx);
+extern void tilegx_expand_builtin_vector_binop (rtx (*)(rtx, rtx, rtx),
+                                               enum machine_mode, rtx,
+                                               enum machine_mode, rtx, rtx,
+                                               bool);
+extern void tilegx_pre_atomic_barrier (enum memmodel);
+extern void tilegx_post_atomic_barrier (enum memmodel);
+#endif /* RTX_CODE */
+
+extern bool tilegx_can_use_return_insn_p (void);
+extern void tilegx_expand_prologue (void);
+extern void tilegx_expand_epilogue (bool);
+extern int tilegx_initial_elimination_offset (int, int);
+extern rtx tilegx_return_addr (int, rtx);
+extern rtx tilegx_eh_return_handler_rtx (void);
+extern int tilegx_adjust_insn_length (rtx, int);
+
+extern int tilegx_asm_preferred_eh_data_format (int, int);
+extern void tilegx_final_prescan_insn (rtx);
+extern const char *tilegx_asm_output_opcode (FILE *, const char *);
+extern void tilegx_function_profiler (FILE *, int);
+
+/* Declare functions in tilegx-c.c */
+
+extern void tilegx_cpu_cpp_builtins (struct cpp_reader *);
+
+#endif /* GCC_TILEGX_PROTOS_H */
diff --git a/gcc/config/tilegx/tilegx.c b/gcc/config/tilegx/tilegx.c
new file mode 100644 (file)
index 0000000..276b5d2
--- /dev/null
@@ -0,0 +1,5501 @@
+/* Subroutines used for code generation on the Tilera TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "rtl.h"
+#include "regs.h"
+#include "insn-config.h"
+#include "output.h"
+#include "insn-attr.h"
+#include "recog.h"
+#include "expr.h"
+#include "langhooks.h"
+#include "optabs.h"
+#include "sched-int.h"
+#include "tm_p.h"
+#include "tm-constrs.h"
+#include "target.h"
+#include "target-def.h"
+#include "integrate.h"
+#include "dwarf2.h"
+#include "timevar.h"
+#include "gimple.h"
+#include "cfgloop.h"
+#include "tilegx-builtins.h"
+#include "tilegx-multiply.h"
+#include "diagnostic.h"
+
+/* SYMBOL_REF for GOT */
+static GTY(()) rtx g_got_symbol = NULL;
+
+/* In case of a POST_INC or POST_DEC memory reference, we must report
+   the mode of the memory reference from TARGET_PRINT_OPERAND to
+   TARGET_PRINT_OPERAND_ADDRESS.  */
+static enum machine_mode output_memory_reference_mode;
+
+/* Report whether we're printing out the first address fragment of a
+   POST_INC or POST_DEC memory reference, from TARGET_PRINT_OPERAND to
+   TARGET_PRINT_OPERAND_ADDRESS.  */
+static bool output_memory_autoinc_first;
+
+\f
+
+/* Option handling  */
+
+/* Implement TARGET_OPTION_OVERRIDE.  */
+static void
+tilegx_option_override (void)
+{
+  /* When modulo scheduling is enabled, we still rely on regular
+     scheduler for bundling.  */
+  if (flag_modulo_sched)
+    flag_resched_modulo_sched = 1;
+}
+\f
+
+
+/* Implement TARGET_SCALAR_MODE_SUPPORTED_P.  */
+static bool
+tilegx_scalar_mode_supported_p (enum machine_mode mode)
+{
+  switch (mode)
+    {
+    case QImode:
+    case HImode:
+    case SImode:
+    case DImode:
+    case TImode:
+      return true;
+
+    case SFmode:
+    case DFmode:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+
+/* Implement TARGET_VECTOR_MODE_SUPPORTED_P.  */
+static bool
+tilegx_vector_mode_supported_p (enum machine_mode mode)
+{
+  return mode == V8QImode || mode == V4HImode || mode == V2SImode;
+}
+
+
+/* Implement TARGET_CANNOT_FORCE_CONST_MEM.  */
+static bool
+tilegx_cannot_force_const_mem (enum machine_mode mode ATTRIBUTE_UNUSED,
+                              rtx x ATTRIBUTE_UNUSED)
+{
+  return true;
+}
+
+
+/* Implement TARGET_FUNCTION_OK_FOR_SIBCALL.  */
+static bool
+tilegx_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
+{
+  return decl != NULL;
+}
+
+
+/* Implement TARGET_PASS_BY_REFERENCE.  Variable sized types are
+   passed by reference.  */
+static bool
+tilegx_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
+                         enum machine_mode mode ATTRIBUTE_UNUSED,
+                         const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  return (type && TYPE_SIZE (type)
+         && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST);
+}
+
+
+/* Implement TARGET_RETURN_IN_MEMORY.  */
+static bool
+tilegx_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
+{
+  return !IN_RANGE (int_size_in_bytes (type),
+                   0, TILEGX_NUM_RETURN_REGS * UNITS_PER_WORD);
+}
+
+
+/* TARGET_MODE_REP_EXTENDED.  */
+static int
+tilegx_mode_rep_extended (enum machine_mode mode, enum machine_mode mode_rep)
+{
+  /* SImode register values are sign-extended to DImode.  */
+  if (mode == SImode && mode_rep == DImode)
+    return SIGN_EXTEND;
+
+  return UNKNOWN;
+}
+
+
+/* Implement TARGET_FUNCTION_ARG_BOUNDARY.  */
+static unsigned int
+tilegx_function_arg_boundary (enum machine_mode mode, const_tree type)
+{
+  unsigned int alignment;
+
+  alignment = type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode);
+  if (alignment < PARM_BOUNDARY)
+    alignment = PARM_BOUNDARY;
+  if (alignment > STACK_BOUNDARY)
+    alignment = STACK_BOUNDARY;
+  return alignment;
+}
+
+
+/* Implement TARGET_FUNCTION_ARG.  */
+static rtx
+tilegx_function_arg (cumulative_args_t cum_v,
+                    enum machine_mode mode,
+                    const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  CUMULATIVE_ARGS cum = *get_cumulative_args (cum_v);
+  int byte_size = ((mode == BLKmode)
+                  ? int_size_in_bytes (type) : GET_MODE_SIZE (mode));
+
+  if (cum >= TILEGX_NUM_ARG_REGS)
+    return NULL_RTX;
+
+  /* The ABI does not allow parameters to be passed partially in reg
+     and partially in stack.  */
+  if ((cum + (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+      > TILEGX_NUM_ARG_REGS)
+    return NULL_RTX;
+
+  return gen_rtx_REG (mode, cum);
+}
+
+
+/* Implement TARGET_FUNCTION_ARG_ADVANCE.  */
+static void
+tilegx_function_arg_advance (cumulative_args_t cum_v,
+                            enum machine_mode mode,
+                            const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
+
+  int byte_size = ((mode == BLKmode)
+                  ? int_size_in_bytes (type) : GET_MODE_SIZE (mode));
+  int word_size = (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+
+  /* If the current argument does not fit in the pretend_args space,
+     skip over it.  */
+  if (*cum < TILEGX_NUM_ARG_REGS
+      && *cum + word_size > TILEGX_NUM_ARG_REGS)
+    *cum = TILEGX_NUM_ARG_REGS;
+
+  *cum += word_size;
+}
+
+
+/* Implement TARGET_FUNCTION_VALUE.  */
+static rtx
+tilegx_function_value (const_tree valtype, const_tree fn_decl_or_type,
+                      bool outgoing ATTRIBUTE_UNUSED)
+{
+  enum machine_mode mode;
+  int unsigned_p;
+
+  mode = TYPE_MODE (valtype);
+  unsigned_p = TYPE_UNSIGNED (valtype);
+
+  mode = promote_function_mode (valtype, mode, &unsigned_p,
+                               fn_decl_or_type, 1);
+
+  return gen_rtx_REG (mode, 0);
+}
+
+
+/* Implement TARGET_LIBCALL_VALUE.  */
+static rtx
+tilegx_libcall_value (enum machine_mode mode,
+                      const_rtx fun ATTRIBUTE_UNUSED)
+{
+  return gen_rtx_REG (mode, 0);
+}
+
+
+/* Implement FUNCTION_VALUE_REGNO_P.  */
+static bool
+tilegx_function_value_regno_p (const unsigned int regno)
+{
+  return regno < TILEGX_NUM_RETURN_REGS;
+}
+
+
+/* Implement TARGET_BUILD_BUILTIN_VA_LIST.  */
+static tree
+tilegx_build_builtin_va_list (void)
+{
+  tree f_args, f_skip, record, type_decl;
+  bool owp;
+
+  record = lang_hooks.types.make_type (RECORD_TYPE);
+
+  type_decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
+                         get_identifier ("__va_list_tag"), record);
+
+  f_args = build_decl (BUILTINS_LOCATION, FIELD_DECL,
+                      get_identifier ("__args"), ptr_type_node);
+  f_skip = build_decl (BUILTINS_LOCATION, FIELD_DECL,
+                      get_identifier ("__skip"), ptr_type_node);
+
+  DECL_FIELD_CONTEXT (f_args) = record;
+
+  DECL_FIELD_CONTEXT (f_skip) = record;
+
+  TREE_CHAIN (record) = type_decl;
+  TYPE_NAME (record) = type_decl;
+  TYPE_FIELDS (record) = f_args;
+  TREE_CHAIN (f_args) = f_skip;
+
+  /* We know this is being padded and we want it too.  It is an
+     internal type so hide the warnings from the user.  */
+  owp = warn_padded;
+  warn_padded = false;
+
+  layout_type (record);
+
+  warn_padded = owp;
+
+  /* The correct type is an array type of one element.  */
+  return record;
+}
+
+
+/* Implement TARGET_EXPAND_BUILTIN_VA_START.  */
+static void
+tilegx_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
+{
+  tree f_args, f_skip;
+  tree args, skip, t;
+
+  f_args = TYPE_FIELDS (TREE_TYPE (valist));
+  f_skip = TREE_CHAIN (f_args);
+
+  args =
+    build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
+  skip =
+    build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
+
+  /* Find the __args area.  */
+  t = make_tree (TREE_TYPE (args), virtual_incoming_args_rtx);
+  t = fold_build_pointer_plus_hwi (t,
+                                  UNITS_PER_WORD *
+                                  (crtl->args.info - TILEGX_NUM_ARG_REGS));
+
+  if (crtl->args.pretend_args_size > 0)
+    t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
+
+  t = build2 (MODIFY_EXPR, TREE_TYPE (args), args, t);
+  TREE_SIDE_EFFECTS (t) = 1;
+  expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
+
+  /* Find the __skip area.  */
+  t = make_tree (TREE_TYPE (skip), virtual_incoming_args_rtx);
+  t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
+  t = build2 (MODIFY_EXPR, TREE_TYPE (skip), skip, t);
+  TREE_SIDE_EFFECTS (t) = 1;
+  expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
+}
+
+
+/* Implement TARGET_SETUP_INCOMING_VARARGS.  */
+static void
+tilegx_setup_incoming_varargs (cumulative_args_t cum,
+                              enum machine_mode mode,
+                              tree type, int *pretend_args, int no_rtl)
+{
+  CUMULATIVE_ARGS local_cum = *get_cumulative_args (cum);
+  int first_reg;
+
+  /* The caller has advanced CUM up to, but not beyond, the last named
+     argument.  Advance a local copy of CUM past the last "real" named
+     argument, to find out how many registers are left over.  */
+  targetm.calls.function_arg_advance (pack_cumulative_args (&local_cum),
+                                     mode, type, true);
+  first_reg = local_cum;
+
+  if (local_cum < TILEGX_NUM_ARG_REGS)
+    {
+      *pretend_args = UNITS_PER_WORD * (TILEGX_NUM_ARG_REGS - first_reg);
+
+      if (!no_rtl)
+       {
+         alias_set_type set = get_varargs_alias_set ();
+         rtx tmp =
+           gen_rtx_MEM (BLKmode, plus_constant (virtual_incoming_args_rtx,
+                                                -STACK_POINTER_OFFSET -
+                                                UNITS_PER_WORD *
+                                                (TILEGX_NUM_ARG_REGS -
+                                                 first_reg)));
+         MEM_NOTRAP_P (tmp) = 1;
+         set_mem_alias_set (tmp, set);
+         move_block_from_reg (first_reg, tmp,
+                              TILEGX_NUM_ARG_REGS - first_reg);
+       }
+    }
+  else
+    *pretend_args = 0;
+}
+
+
+/* Implement TARGET_GIMPLIFY_VA_ARG_EXPR.  Gimplify va_arg by updating
+   the va_list structure VALIST as required to retrieve an argument of
+   type TYPE, and returning that argument.
+   
+   ret = va_arg(VALIST, TYPE);
+
+   generates code equivalent to:
+  
+    paddedsize = (sizeof(TYPE) + 3) & -4;
+    if (  (VALIST.__args + paddedsize > VALIST.__skip)
+       & (VALIST.__args <= VALIST.__skip))
+      addr = VALIST.__skip + STACK_POINTER_OFFSET;
+    else
+      addr = VALIST.__args;
+    VALIST.__args = addr + paddedsize;
+    ret = *(TYPE *)addr;
+ */
+static tree
+tilegx_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
+                            gimple_seq *post_p ATTRIBUTE_UNUSED)
+{
+  tree f_args, f_skip;
+  tree args, skip;
+  HOST_WIDE_INT size, rsize;
+  tree addr, tmp;
+  bool pass_by_reference_p;
+
+  f_args = TYPE_FIELDS (va_list_type_node);
+  f_skip = TREE_CHAIN (f_args);
+
+  args =
+    build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
+  skip =
+    build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
+
+  addr = create_tmp_var (ptr_type_node, "va_arg");
+
+  /* if an object is dynamically sized, a pointer to it is passed
+     instead of the object itself.  */
+  pass_by_reference_p = pass_by_reference (NULL, TYPE_MODE (type), type,
+                                          false);
+
+  if (pass_by_reference_p)
+    type = build_pointer_type (type);
+
+  size = int_size_in_bytes (type);
+  rsize = ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD) * UNITS_PER_WORD;
+
+  /* Assert alignment assumption.  */
+  gcc_assert (STACK_BOUNDARY == PARM_BOUNDARY);
+
+  /* Build conditional expression to calculate addr. The expression
+     will be gimplified later.  */
+  tmp = fold_build_pointer_plus_hwi (unshare_expr (args), rsize);
+  tmp = build2 (TRUTH_AND_EXPR, boolean_type_node,
+               build2 (GT_EXPR, boolean_type_node, tmp, unshare_expr (skip)),
+               build2 (LE_EXPR, boolean_type_node, unshare_expr (args),
+                       unshare_expr (skip)));
+
+  tmp = build3 (COND_EXPR, ptr_type_node, tmp,
+               build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (skip),
+                       size_int (STACK_POINTER_OFFSET)),
+               unshare_expr (args));
+
+  gimplify_assign (addr, tmp, pre_p);
+
+  /* Update VALIST.__args.  */
+  tmp = fold_build_pointer_plus_hwi (addr, rsize);
+  gimplify_assign (unshare_expr (args), tmp, pre_p);
+
+  addr = fold_convert (build_pointer_type (type), addr);
+
+  if (pass_by_reference_p)
+    addr = build_va_arg_indirect_ref (addr);
+
+  return build_va_arg_indirect_ref (addr);
+}
+\f
+
+
+/* Implement TARGET_RTX_COSTS.  */
+static bool
+tilegx_rtx_costs (rtx x, int code, int outer_code, int opno, int *total,
+                 bool speed)
+{
+  switch (code)
+    {
+    case CONST_INT:
+      /* If this is an 8-bit constant, return zero since it can be
+         used nearly anywhere with no cost.  If it is a valid operand
+         for an ADD or AND, likewise return 0 if we know it will be
+         used in that context.  Otherwise, return 2 since it might be
+         used there later.  All other constants take at least two
+         insns.  */
+      if (satisfies_constraint_I (x))
+       {
+         *total = 0;
+         return true;
+       }
+      else if (outer_code == PLUS && add_operand (x, VOIDmode))
+       {
+         /* Slightly penalize large constants even though we can add
+            them in one instruction, because it forces the use of
+            2-wide bundling mode.  */
+         *total = 1;
+         return true;
+       }
+      else if (move_operand (x, SImode))
+       {
+         /* We can materialize in one move.  */
+         *total = COSTS_N_INSNS (1);
+         return true;
+       }
+      else
+       {
+         /* We can materialize in two moves.  */
+         *total = COSTS_N_INSNS (2);
+         return true;
+       }
+
+      return false;
+
+    case CONST:
+    case LABEL_REF:
+    case SYMBOL_REF:
+      *total = COSTS_N_INSNS (2);
+      return true;
+
+    case CONST_DOUBLE:
+      *total = COSTS_N_INSNS (4);
+      return true;
+
+    case HIGH:
+      *total = 0;
+      return true;
+
+    case MEM:
+      /* If outer-code was a sign or zero extension, a cost of
+         COSTS_N_INSNS (1) was already added in, so account for
+         that.  */
+      if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
+       *total = COSTS_N_INSNS (1);
+      else
+       *total = COSTS_N_INSNS (2);
+      return true;
+
+    case PLUS:
+      /* Convey that shl[123]add are efficient.  */
+      if (GET_CODE (XEXP (x, 0)) == MULT
+         && cint_248_operand (XEXP (XEXP (x, 0), 1), VOIDmode))
+       {
+         *total = (rtx_cost (XEXP (XEXP (x, 0), 0),
+                             (enum rtx_code) outer_code, opno, speed)
+                   + rtx_cost (XEXP (x, 1),
+                               (enum rtx_code) outer_code, opno, speed)
+                   + COSTS_N_INSNS (1));
+         return true;
+       }
+      return false;
+
+    case MULT:
+      *total = COSTS_N_INSNS (2);
+      return false;
+
+    case DIV:
+    case UDIV:
+    case MOD:
+    case UMOD:
+      /* These are handled by software and are very expensive.  */
+      *total = COSTS_N_INSNS (100);
+      return false;
+
+    case UNSPEC:
+    case UNSPEC_VOLATILE:
+      {
+       int num = XINT (x, 1);
+
+       if (num <= TILEGX_LAST_LATENCY_1_INSN)
+         *total = COSTS_N_INSNS (1);
+       else if (num <= TILEGX_LAST_LATENCY_2_INSN)
+         *total = COSTS_N_INSNS (2);
+       else if (num > TILEGX_LAST_LATENCY_INSN)
+         {
+           if (num == UNSPEC_NON_TEMPORAL)
+             {
+               /* These are basically loads.  */
+               if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
+                 *total = COSTS_N_INSNS (1);
+               else
+                 *total = COSTS_N_INSNS (2);
+             }
+           else
+             {
+               if (outer_code == PLUS)
+                 *total = 0;
+               else
+                 *total = COSTS_N_INSNS (1);
+             }
+         }
+       else
+         {
+           switch (num)
+             {
+             case UNSPEC_BLOCKAGE:
+             case UNSPEC_NETWORK_BARRIER:
+             case UNSPEC_ATOMIC:
+               *total = 0;
+               break;
+
+             case UNSPEC_LNK_AND_LABEL:
+             case UNSPEC_MF:
+             case UNSPEC_MOV_PCREL_STEP3:
+             case UNSPEC_NETWORK_RECEIVE:
+             case UNSPEC_NETWORK_SEND:
+             case UNSPEC_SPR_MOVE:
+             case UNSPEC_TLS_GD_ADD:
+               *total = COSTS_N_INSNS (1);
+               break;
+
+             case UNSPEC_TLS_IE_LOAD:
+             case UNSPEC_XCHG:
+               *total = COSTS_N_INSNS (2);
+               break;
+
+             case UNSPEC_SP_SET:
+               *total = COSTS_N_INSNS (3);
+               break;
+
+             case UNSPEC_SP_TEST:
+               *total = COSTS_N_INSNS (4);
+               break;
+
+             case UNSPEC_CMPXCHG:
+             case UNSPEC_INSN_CMPEXCH:
+             case UNSPEC_LATENCY_L2:
+               *total = COSTS_N_INSNS (11);
+               break;
+
+             case UNSPEC_TLS_GD_CALL:
+               *total = COSTS_N_INSNS (30);
+               break;
+
+             case UNSPEC_LATENCY_MISS:
+               *total = COSTS_N_INSNS (80);
+               break;
+
+             default:
+               *total = COSTS_N_INSNS (1);
+             }
+         }
+       return true;
+      }
+
+    default:
+      return false;
+    }
+}
+\f
+
+
+/* Rtl lowering.  */
+
+/* Create a temporary variable to hold a partial result, to enable
+   CSE.  */
+static rtx
+create_temp_reg_if_possible (enum machine_mode mode, rtx default_reg)
+{
+  return can_create_pseudo_p ()? gen_reg_rtx (mode) : default_reg;
+}
+
+
+/* Functions to save and restore machine-specific function data.  */
+static struct machine_function *
+tilegx_init_machine_status (void)
+{
+  return ggc_alloc_cleared_machine_function ();
+}
+
+
+/* Do anything needed before RTL is emitted for each function.  */
+void
+tilegx_init_expanders (void)
+{
+  /* Arrange to initialize and mark the machine per-function
+     status.  */
+  init_machine_status = tilegx_init_machine_status;
+
+  if (cfun && cfun->machine && flag_pic)
+    {
+      static int label_num = 0;
+
+      char text_label_name[32];
+
+      struct machine_function *machine = cfun->machine;
+
+      ASM_GENERATE_INTERNAL_LABEL (text_label_name, "L_PICLNK", label_num++);
+
+      machine->text_label_symbol =
+       gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (text_label_name));
+
+      machine->text_label_rtx =
+       gen_rtx_REG (Pmode, TILEGX_PIC_TEXT_LABEL_REGNUM);
+
+      machine->got_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
+
+      machine->calls_tls_get_addr = false;
+    }
+}
+
+
+/* Implement TARGET_SHIFT_TRUNCATION_MASK.  DImode shifts use the mode
+   matching insns and therefore guarantee that the shift count is
+   modulo 64.  SImode shifts sometimes use the 64 bit version so do
+   not hold such guarantee.  */
+static unsigned HOST_WIDE_INT
+tilegx_shift_truncation_mask (enum machine_mode mode)
+{
+  return mode == DImode ? 63 : 0;
+}
+
+
+/* Implement TARGET_INIT_LIBFUNCS.  */
+static void
+tilegx_init_libfuncs (void)
+{
+  /* We need to explicitly generate these libfunc's to support
+     conversion of divide by constant to multiply (the divide stubs in
+     tilegx.md exist also for this reason).  Normally we'd expect gcc
+     to lazily generate them when they are needed, but for some reason
+     it's set up to only generate them if the mode is the word
+     mode.  */
+  set_optab_libfunc (sdiv_optab, SImode, "__divsi3");
+  set_optab_libfunc (udiv_optab, SImode, "__udivsi3");
+  set_optab_libfunc (smod_optab, SImode, "__modsi3");
+  set_optab_libfunc (umod_optab, SImode, "__umodsi3");
+}
+
+
+/* Return true if X contains a thread-local symbol.  */
+static bool
+tilegx_tls_referenced_p (rtx x)
+{
+  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
+    x = XEXP (XEXP (x, 0), 0);
+
+  if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x))
+    return true;
+
+  /* That's all we handle in tilegx_legitimize_tls_address for
+     now.  */
+  return false;
+}
+
+
+/* Return true if X requires a scratch register.  It is given that
+   flag_pic is on and that X satisfies CONSTANT_P.  */
+static int
+tilegx_pic_address_needs_scratch (rtx x)
+{
+  if (GET_CODE (x) == CONST
+      && GET_CODE (XEXP (x, 0)) == PLUS
+      && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
+         || GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)
+      && (CONST_INT_P (XEXP (XEXP (x, 0), 1))))
+    return true;
+
+  return false;
+}
+
+
+/* Implement TARGET_LEGITIMATE_CONSTANT_P.  This is all constants for
+   which we are willing to load the value into a register via a move
+   pattern.  TLS cannot be treated as a constant because it can
+   include a function call.  */
+static bool
+tilegx_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
+{
+  switch (GET_CODE (x))
+    {
+    case CONST:
+    case SYMBOL_REF:
+      return !tilegx_tls_referenced_p (x);
+
+    default:
+      return true;
+    }
+}
+
+
+/* Return true if the constant value X is a legitimate general operand
+   when generating PIC code.  It is given that flag_pic is on and that
+   X satisfies CONSTANT_P.  */
+bool
+tilegx_legitimate_pic_operand_p (rtx x)
+{
+  if (tilegx_pic_address_needs_scratch (x))
+    return false;
+
+  if (tilegx_tls_referenced_p (x))
+    return false;
+
+  return true;
+}
+
+
+/* Return true if the rtx X can be used as an address operand.  */
+static bool
+tilegx_legitimate_address_p (enum machine_mode ARG_UNUSED (mode), rtx x,
+                            bool strict)
+{
+  if (GET_CODE (x) == SUBREG)
+    x = SUBREG_REG (x);
+
+  switch (GET_CODE (x))
+    {
+    case POST_INC:
+    case POST_DEC:
+      if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+       return false;
+
+      x = XEXP (x, 0);
+      break;
+
+    case POST_MODIFY:
+      if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+       return false;
+
+      if (GET_CODE (XEXP (x, 1)) != PLUS)
+       return false;
+
+      if (!rtx_equal_p (XEXP (x, 0), XEXP (XEXP (x, 1), 0)))
+       return false;
+
+      if (!satisfies_constraint_I (XEXP (XEXP (x, 1), 1)))
+       return false;
+
+      x = XEXP (x, 0);
+      break;
+
+    case REG:
+      break;
+
+    default:
+      return false;
+    }
+
+  /* Check if x is a valid reg.  */
+  if (!REG_P (x))
+    return false;
+
+  if (strict)
+    return REGNO_OK_FOR_BASE_P (REGNO (x));
+  else
+    return true;
+}
+
+
+/* Return the rtx containing SYMBOL_REF to the text label.  */
+static rtx
+tilegx_text_label_symbol (void)
+{
+  return cfun->machine->text_label_symbol;
+}
+
+
+/* Return the register storing the value of the text label.  */
+static rtx
+tilegx_text_label_rtx (void)
+{
+  return cfun->machine->text_label_rtx;
+}
+
+
+/* Return the register storing the value of the global offset
+   table.  */
+static rtx
+tilegx_got_rtx (void)
+{
+  return cfun->machine->got_rtx;
+}
+
+
+/* Return the SYMBOL_REF for _GLOBAL_OFFSET_TABLE_.  */
+static rtx
+tilegx_got_symbol (void)
+{
+  if (g_got_symbol == NULL)
+    g_got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
+
+  return g_got_symbol;
+}
+
+
+/* Return a reference to the got to be used by tls references.  */
+static rtx
+tilegx_tls_got (void)
+{
+  rtx temp;
+  if (flag_pic)
+    {
+      crtl->uses_pic_offset_table = 1;
+      return tilegx_got_rtx ();
+    }
+
+  temp = gen_reg_rtx (Pmode);
+  emit_move_insn (temp, tilegx_got_symbol ());
+
+  return temp;
+}
+
+
+/* ADDR contains a thread-local SYMBOL_REF.  Generate code to compute
+   this (thread-local) address.  */
+static rtx
+tilegx_legitimize_tls_address (rtx addr)
+{
+  rtx ret;
+
+  gcc_assert (can_create_pseudo_p ());
+
+  if (GET_CODE (addr) == SYMBOL_REF)
+    switch (SYMBOL_REF_TLS_MODEL (addr))
+      {
+      case TLS_MODEL_GLOBAL_DYNAMIC:
+      case TLS_MODEL_LOCAL_DYNAMIC:
+       {
+         rtx r0, temp, temp2, temp3, got, last;
+
+         ret = gen_reg_rtx (Pmode);
+         r0 = gen_rtx_REG (Pmode, 0);
+         temp = gen_reg_rtx (Pmode);
+         temp2 = gen_reg_rtx (Pmode);
+         temp3 = gen_reg_rtx (Pmode);
+
+         got = tilegx_tls_got ();
+         if (TARGET_32BIT)
+           {
+             emit_insn (gen_mov_tls_gd_step1_32bit (temp, addr));
+             emit_insn (gen_mov_tls_gd_step2_32bit (temp2, temp, addr));
+             emit_insn (gen_tls_add_32bit (temp2, got, temp2, addr));
+           }
+         else
+           {
+             emit_insn (gen_mov_tls_gd_step1 (temp, addr));
+             emit_insn (gen_mov_tls_gd_step2 (temp2, temp, addr));
+             emit_insn (gen_tls_add (temp2, got, temp2, addr));
+           }
+
+         emit_move_insn (r0, temp2);
+
+         if (TARGET_32BIT)
+           {
+             emit_insn (gen_tls_gd_call_32bit (addr));
+           }
+         else
+           {
+             emit_insn (gen_tls_gd_call (addr));
+           }
+
+         emit_move_insn (temp3, r0);
+
+         if (TARGET_32BIT)
+           last = emit_insn (gen_tls_gd_add_32bit (ret, temp3, addr));
+         else
+           last = emit_insn (gen_tls_gd_add (ret, temp3, addr));
+
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      case TLS_MODEL_INITIAL_EXEC:
+       {
+         rtx temp, temp2, temp3, got, last;
+
+         ret = gen_reg_rtx (Pmode);
+         temp = gen_reg_rtx (Pmode);
+         temp2 = gen_reg_rtx (Pmode);
+         temp3 = gen_reg_rtx (Pmode);
+
+         got = tilegx_tls_got ();
+         if (TARGET_32BIT)
+           {
+             emit_insn (gen_mov_tls_ie_step1_32bit (temp, addr));
+             emit_insn (gen_mov_tls_ie_step2_32bit (temp2, temp, addr));
+             emit_insn (gen_tls_add_32bit (temp2, got, temp2, addr));
+             emit_insn (gen_tls_ie_load_32bit (temp3, temp2, addr));
+           }
+         else
+           {
+             emit_insn (gen_mov_tls_ie_step1 (temp, addr));
+             emit_insn (gen_mov_tls_ie_step2 (temp2, temp, addr));
+             emit_insn (gen_tls_add (temp2, got, temp2, addr));
+             emit_insn (gen_tls_ie_load (temp3, temp2, addr));
+           }
+
+         last =
+           emit_move_insn(ret,
+                          gen_rtx_PLUS (Pmode,
+                                        gen_rtx_REG (Pmode,
+                                                     THREAD_POINTER_REGNUM),
+                                        temp3));
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      case TLS_MODEL_LOCAL_EXEC:
+       {
+         rtx temp, temp2, last;
+
+         ret = gen_reg_rtx (Pmode);
+         temp = gen_reg_rtx (Pmode);
+         temp2 = gen_reg_rtx (Pmode);
+
+         if (TARGET_32BIT)
+           {
+             emit_insn (gen_mov_tls_le_step1_32bit (temp, addr));
+             emit_insn (gen_mov_tls_le_step2_32bit (temp2, temp, addr));
+           }
+         else
+           {
+             emit_insn (gen_mov_tls_le_step1 (temp, addr));
+             emit_insn (gen_mov_tls_le_step2 (temp2, temp, addr));
+           }
+
+         last =
+           emit_move_insn (ret,
+                           gen_rtx_PLUS (Pmode,
+                                         gen_rtx_REG (Pmode,
+                                                      THREAD_POINTER_REGNUM),
+                                         temp2));
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      default:
+       gcc_unreachable ();
+      }
+  else if (GET_CODE (addr) == CONST)
+    {
+      rtx base, offset;
+
+      gcc_assert (GET_CODE (XEXP (addr, 0)) == PLUS);
+
+      base = tilegx_legitimize_tls_address (XEXP (XEXP (addr, 0), 0));
+      offset = XEXP (XEXP (addr, 0), 1);
+
+      base = force_operand (base, NULL_RTX);
+      ret = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
+    }
+  else
+    gcc_unreachable ();
+
+  return ret;
+}
+
+
+/* Returns a register that points to ADDR, a symbolic address, by
+   computing its address relative to tilegx_text_label_symbol.  */
+static void
+compute_pcrel_address (rtx result, rtx addr)
+{
+  rtx text_label_symbol = tilegx_text_label_symbol ();
+  rtx text_label_rtx = tilegx_text_label_rtx ();
+  rtx temp, temp2;
+
+  temp = create_temp_reg_if_possible (Pmode, result);
+  temp2 = create_temp_reg_if_possible (Pmode, result);
+
+  if (TARGET_32BIT)
+    {
+      emit_insn (gen_mov_pcrel_step1_32bit (temp, addr, text_label_symbol));
+      emit_insn (gen_mov_pcrel_step2_32bit (temp2, temp, addr,
+                                           text_label_symbol));
+      emit_insn (gen_mov_pcrel_step3_32bit (result, temp2,
+                                           text_label_rtx,
+                                           addr, text_label_symbol));
+    }
+  else
+    {
+      emit_insn (gen_mov_pcrel_step1 (temp, addr, text_label_symbol));
+      emit_insn (gen_mov_pcrel_step2 (temp2, temp, addr, text_label_symbol));
+      emit_insn (gen_mov_pcrel_step3 (result, temp2,
+                                     text_label_rtx,
+                                     addr, text_label_symbol));
+    }
+}
+
+
+/* Legitimize PIC addresses.  If the address is already
+   position-independent, we return ORIG.  Newly generated
+   position-independent addresses go into a reg.  This is REG if
+   nonzero, otherwise we allocate register(s) as necessary.  */
+static rtx
+tilegx_legitimize_pic_address (rtx orig,
+                              enum machine_mode mode ATTRIBUTE_UNUSED,
+                              rtx reg)
+{
+  if (GET_CODE (orig) == SYMBOL_REF)
+    {
+      rtx address, pic_ref;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      if (SYMBOL_REF_LOCAL_P (orig))
+       {
+         /* If not during reload, allocate another temp reg here for
+            loading in the address, so that these instructions can be
+            optimized properly.  */
+         rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
+         compute_pcrel_address (temp_reg, orig);
+
+         /* Note: this is conservative.  We use the text_label but we
+            don't use the pic_offset_table.  However, in some cases
+            we may need the pic_offset_table (see
+            tilegx_fixup_pcrel_references).  */
+         crtl->uses_pic_offset_table = 1;
+
+         address = temp_reg;
+
+         emit_move_insn (reg, address);
+         return reg;
+       }
+      else
+       {
+         /* If not during reload, allocate another temp reg here for
+            loading in the address, so that these instructions can be
+            optimized properly.  */
+         rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
+
+         gcc_assert (flag_pic);
+         if (flag_pic == 1)
+           {
+             if (TARGET_32BIT)
+               {
+                 emit_insn (gen_add_got16_32bit (temp_reg,
+                                                 tilegx_got_rtx (),
+                                                 orig));
+               }
+             else
+               {
+                 emit_insn (gen_add_got16 (temp_reg,
+                                           tilegx_got_rtx (), orig));
+               }
+           }
+         else
+           {
+             rtx temp_reg2 = create_temp_reg_if_possible (Pmode, reg);
+             rtx temp_reg3 = create_temp_reg_if_possible (Pmode, reg);
+             if (TARGET_32BIT)
+               {
+                 emit_insn (gen_mov_got32_step1_32bit (temp_reg3, orig));
+                 emit_insn (gen_mov_got32_step2_32bit
+                            (temp_reg2, temp_reg3, orig));
+               }
+             else
+               {
+                 emit_insn (gen_mov_got32_step1 (temp_reg3, orig));
+                 emit_insn (gen_mov_got32_step2 (temp_reg2, temp_reg3,
+                                                 orig));
+               }
+             emit_move_insn (temp_reg,
+                             gen_rtx_PLUS (Pmode,
+                                           tilegx_got_rtx (), temp_reg2));
+           }
+
+         address = temp_reg;
+
+         pic_ref = gen_const_mem (Pmode, address);
+         crtl->uses_pic_offset_table = 1;
+         emit_move_insn (reg, pic_ref);
+         /* The following put a REG_EQUAL note on this insn, so that
+            it can be optimized by loop.  But it causes the label to
+            be optimized away.  */
+         /* set_unique_reg_note (insn, REG_EQUAL, orig); */
+         return reg;
+       }
+    }
+  else if (GET_CODE (orig) == CONST)
+    {
+      rtx base, offset;
+
+      if (GET_CODE (XEXP (orig, 0)) == PLUS
+         && XEXP (XEXP (orig, 0), 0) == tilegx_got_rtx ())
+       return orig;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      gcc_assert (GET_CODE (XEXP (orig, 0)) == PLUS);
+      base = tilegx_legitimize_pic_address (XEXP (XEXP (orig, 0), 0),
+                                           Pmode, reg);
+      offset = tilegx_legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
+                                             base == reg ? 0 : reg);
+
+      if (CONST_INT_P (offset))
+       {
+         if (can_create_pseudo_p ())
+           offset = force_reg (Pmode, offset);
+         else
+           /* If we reach here, then something is seriously wrong.  */
+           gcc_unreachable ();
+       }
+
+      if (can_create_pseudo_p ())
+       return force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
+      else
+       gcc_unreachable ();
+    }
+  else if (GET_CODE (orig) == LABEL_REF)
+    {
+      rtx address;
+      rtx temp_reg;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      /* If not during reload, allocate another temp reg here for
+         loading in the address, so that these instructions can be
+         optimized properly.  */
+      temp_reg = create_temp_reg_if_possible (Pmode, reg);
+      compute_pcrel_address (temp_reg, orig);
+
+      /* Note: this is conservative.  We use the text_label but we
+         don't use the pic_offset_table.  */
+      crtl->uses_pic_offset_table = 1;
+
+      address = temp_reg;
+
+      emit_move_insn (reg, address);
+
+      return reg;
+    }
+
+  return orig;
+}
+
+
+/* Implement TARGET_LEGITIMIZE_ADDRESS.  */
+static rtx
+tilegx_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
+                          enum machine_mode mode)
+{
+  if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
+      && symbolic_operand (x, Pmode) && tilegx_tls_referenced_p (x))
+    {
+      return tilegx_legitimize_tls_address (x);
+    }
+  else if (flag_pic)
+    {
+      return tilegx_legitimize_pic_address (x, mode, 0);
+    }
+  else
+    return x;
+}
+
+
+/* Implement TARGET_DELEGITIMIZE_ADDRESS.  */
+static rtx
+tilegx_delegitimize_address (rtx x)
+{
+  x = delegitimize_mem_from_attrs (x);
+
+  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == UNSPEC)
+    {
+      switch (XINT (XEXP (x, 0), 1))
+       {
+         case UNSPEC_HW0:
+         case UNSPEC_HW1:
+         case UNSPEC_HW2:
+         case UNSPEC_HW3:
+         case UNSPEC_HW0_LAST:
+         case UNSPEC_HW1_LAST:
+         case UNSPEC_HW2_LAST:
+         case UNSPEC_HW0_PCREL:
+         case UNSPEC_HW1_LAST_PCREL:
+         case UNSPEC_HW0_GOT:
+         case UNSPEC_HW0_LAST_GOT:
+         case UNSPEC_HW1_LAST_GOT:
+         case UNSPEC_HW0_TLS_GD:
+         case UNSPEC_HW1_LAST_TLS_GD:
+         case UNSPEC_HW0_TLS_IE:
+         case UNSPEC_HW1_LAST_TLS_IE:
+         case UNSPEC_HW0_TLS_LE:
+         case UNSPEC_HW1_LAST_TLS_LE:
+           x = XVECEXP (XEXP (x, 0), 0, 0);
+         break;
+       }
+    }
+
+  return x;
+}
+
+
+/* Emit code to load the PIC register.  */
+static void
+load_pic_register (bool delay_pic_helper ATTRIBUTE_UNUSED)
+{
+  int orig_flag_pic = flag_pic;
+
+  rtx got_symbol = tilegx_got_symbol ();
+  rtx text_label_symbol = tilegx_text_label_symbol ();
+  rtx text_label_rtx = tilegx_text_label_rtx ();
+  flag_pic = 0;
+
+  if (TARGET_32BIT)
+    {
+      emit_insn (gen_insn_lnk_and_label_32bit (text_label_rtx,
+                                              text_label_symbol));
+    }
+  else
+    {
+      emit_insn (gen_insn_lnk_and_label (text_label_rtx, text_label_symbol));
+    }
+
+  compute_pcrel_address (tilegx_got_rtx (), got_symbol);
+
+  flag_pic = orig_flag_pic;
+
+  /* Need to emit this whether or not we obey regdecls, since
+     setjmp/longjmp can cause life info to screw up.  ??? In the case
+     where we don't obey regdecls, this is not sufficient since we may
+     not fall out the bottom.  */
+  emit_use (tilegx_got_rtx ());
+}
+
+
+/* Return the simd variant of the constant NUM of mode MODE, by
+   replicating it to fill an interger of mode DImode.  NUM is first
+   truncated to fit in MODE.  */
+rtx
+tilegx_simd_int (rtx num, enum machine_mode mode)
+{
+  HOST_WIDE_INT n = 0;
+
+  gcc_assert (CONST_INT_P (num));
+
+  n = INTVAL (num);
+
+  switch (mode)
+    {
+    case QImode:
+      n = 0x0101010101010101LL * (n & 0x000000FF);
+      break;
+    case HImode:
+      n = 0x0001000100010001LL * (n & 0x0000FFFF);
+      break;
+    case SImode:
+      n = 0x0000000100000001LL * (n & 0xFFFFFFFF);
+      break;
+    case DImode:
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  return GEN_INT (n);
+}
+
+
+/* Returns true iff VAL can be moved into a register in one
+   instruction.  And if it can, it emits the code to move the
+   constant into DEST_REG.
+
+   If THREE_WIDE_ONLY is true, this insists on an instruction that
+   works in a bundle containing three instructions.  */
+static bool
+expand_set_cint64_one_inst (rtx dest_reg,
+                           HOST_WIDE_INT val, bool three_wide_only)
+{
+  if (val == trunc_int_for_mode (val, QImode))
+    {
+      /* Success! */
+      emit_move_insn (dest_reg, GEN_INT (val));
+      return true;
+    }
+  else if (!three_wide_only)
+    {
+      rtx imm_op = GEN_INT (val);
+
+      if (satisfies_constraint_J (imm_op)
+         || satisfies_constraint_K (imm_op)
+         || satisfies_constraint_N (imm_op)
+         || satisfies_constraint_P (imm_op))
+       {
+         emit_move_insn (dest_reg, imm_op);
+         return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Implement DImode rotatert.  */
+static HOST_WIDE_INT
+rotate_right (HOST_WIDE_INT n, int count)
+{
+  unsigned HOST_WIDE_INT x = n & 0xFFFFFFFFFFFFFFFFULL;
+  if (count == 0)
+    return x;
+  return ((x >> count) | (x << (64 - count))) & 0xFFFFFFFFFFFFFFFFULL;
+}
+
+
+/* Return true iff n contains exactly one contiguous sequence of 1
+   bits, possibly wrapping around from high bits to low bits.  */
+bool
+tilegx_bitfield_operand_p (HOST_WIDE_INT n, int *first_bit, int *last_bit)
+{
+  int i;
+
+  if (n == 0)
+    return false;
+
+  for (i = 0; i < 64; i++)
+    {
+      unsigned HOST_WIDE_INT x = rotate_right (n, i);
+      if (!(x & 1))
+       continue;
+
+      /* See if x is a power of two minus one, i.e. only consecutive 1
+         bits starting from bit 0.  */
+      if ((x & (x + 1)) == 0)
+       {
+         if (first_bit != NULL)
+           *first_bit = i;
+         if (last_bit != NULL)
+           *last_bit = (i + exact_log2 (x ^ (x >> 1))) & 63;
+
+         return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Create code to move the CONST_INT value in src_val to dest_reg.  */
+static void
+expand_set_cint64 (rtx dest_reg, rtx src_val)
+{
+  HOST_WIDE_INT val;
+  int leading_zeroes, trailing_zeroes;
+  int three_wide_only;
+  int shift, ins_shift, zero_cluster_shift;
+  rtx temp, subreg;
+
+  gcc_assert (CONST_INT_P (src_val));
+  val = trunc_int_for_mode (INTVAL (src_val), GET_MODE (dest_reg));
+
+  /* See if we can generate the constant in one instruction.  */
+  if (expand_set_cint64_one_inst (dest_reg, val, false))
+    return;
+
+  /* Force the destination to DImode so we can use DImode instructions
+     to create it.  This both allows instructions like rotl, and
+     certain efficient 3-wide instructions.  */
+  subreg = simplify_gen_subreg (DImode, dest_reg, GET_MODE (dest_reg), 0);
+  gcc_assert (subreg != NULL);
+  dest_reg = subreg;
+
+  temp = create_temp_reg_if_possible (DImode, dest_reg);
+
+  leading_zeroes = 63 - floor_log2 (val & 0xFFFFFFFFFFFFFFFFULL);
+  trailing_zeroes = exact_log2 (val & -val);
+
+  /* First try all three-wide instructions that generate a constant
+     (i.e. movei) followed by various shifts and rotates. If none of
+     those work, try various two-wide ways of generating a constant
+     followed by various shifts and rotates.  */
+  for (three_wide_only = 1; three_wide_only >= 0; three_wide_only--)
+    {
+      int count;
+
+      if (expand_set_cint64_one_inst (temp, val >> trailing_zeroes,
+                                     three_wide_only))
+       {
+         /* 0xFFFFFFFFFFFFA500 becomes:
+            movei temp, 0xFFFFFFFFFFFFFFA5
+            shli dest, temp, 8  */
+         emit_move_insn (dest_reg,
+                         gen_rtx_ASHIFT (DImode, temp,
+                                         GEN_INT (trailing_zeroes)));
+         return;
+       }
+
+      if (expand_set_cint64_one_inst (temp, val << leading_zeroes,
+                                     three_wide_only))
+       {
+         /* 0x7FFFFFFFFFFFFFFF becomes:
+            movei temp, -2
+            shrui dest, temp, 1  */
+         emit_move_insn (dest_reg,
+                         gen_rtx_LSHIFTRT (DImode, temp,
+                                           GEN_INT (leading_zeroes)));
+         return;
+       }
+
+      /* Try rotating a one-instruction immediate.  */
+      for (count = 1; count < 64; count++)
+       {
+         HOST_WIDE_INT r = rotate_right (val, count);
+         if (expand_set_cint64_one_inst (temp, r, three_wide_only))
+           {
+             /* 0xFFFFFFFFFFA5FFFF becomes:
+                movei temp, 0xFFFFFFFFFFFFFFA5
+                rotli dest, temp, 16  */
+             emit_move_insn (dest_reg,
+                             gen_rtx_ROTATE (DImode, temp, GEN_INT (count)));
+             return;
+           }
+       }
+    }
+
+  /* There are two cases here to produce a large constant.
+     In the most general case, we do this:
+
+     moveli x, hw3(NUM)
+     shl16insli x, x, hw2(NUM)
+     shl16insli x, x, hw1(NUM)
+     shl16insli x, x, hw0(NUM)
+
+     However, we can sometimes do better.  shl16insli is a poor way to
+     insert 16 zero bits, because simply shifting left by 16 has more
+     bundling freedom.  So if we see any contiguous aligned sequence
+     of 16 or more zero bits (below the highest set bit), it is always
+     more efficient to materialize the bits above the zero bits, then
+     left shift to put in the zeroes, then insert whatever bits
+     remain.  For example, we might end up with:
+
+     movei x, NUM >> (37 + 16)
+     shli x, x, 37
+     shl16insli x, x, hw0(NUM)      */
+
+  zero_cluster_shift = -1;
+
+  for (shift = 0; shift < 48 - leading_zeroes; shift += 16)
+    {
+      HOST_WIDE_INT x = val >> shift;
+
+      /* Find the least significant group of 16 aligned zero bits.  */
+      if ((x & 0xFFFF) == 0x0000)
+       {
+         /* Grab any following zero bits as well.  */
+         zero_cluster_shift = exact_log2 (x & -x);
+         shift += zero_cluster_shift;
+         break;
+       }
+    }
+
+  if (zero_cluster_shift >= 0)
+    {
+      unsigned HOST_WIDE_INT leftover;
+
+      /* Recursively create the constant above the lowest 16 zero
+         bits.  */
+      expand_set_cint64 (temp, GEN_INT (val >> shift));
+
+      /* See if we can easily insert the remaining bits, or if we need
+         to fall through to the more general case.  */
+      leftover = val - ((val >> shift) << shift);
+      if (leftover == 0)
+       {
+         /* A simple left shift is enough.  */
+         emit_move_insn (dest_reg,
+                         gen_rtx_ASHIFT (DImode, temp, GEN_INT (shift)));
+         return;
+       }
+      else if (leftover <= 32767)
+       {
+         /* Left shift into position then add in the leftover.  */
+         rtx temp2 = create_temp_reg_if_possible (DImode, temp);
+         emit_move_insn (temp2,
+                         gen_rtx_ASHIFT (DImode, temp, GEN_INT (shift)));
+         emit_move_insn (dest_reg,
+                         gen_rtx_PLUS (DImode, temp2, GEN_INT (leftover)));
+         return;
+       }
+      else
+       {
+         /* Shift in the batch of >= 16 zeroes we detected earlier.
+            After this, shift will be aligned mod 16 so the final
+            loop can use shl16insli.  */
+         rtx temp2 = create_temp_reg_if_possible (DImode, temp);
+         rtx shift_count_rtx = GEN_INT (zero_cluster_shift);
+
+         emit_move_insn (temp2,
+                         gen_rtx_ASHIFT (DImode, temp, shift_count_rtx));
+
+         shift -= zero_cluster_shift;
+         temp = temp2;
+       }
+    }
+  else
+    {
+      /* Set as many high 16-bit blocks as we can with a single
+         instruction.  We'll insert the remaining 16-bit blocks
+         below.  */
+      for (shift = 16;; shift += 16)
+       {
+         gcc_assert (shift < 64);
+         if (expand_set_cint64_one_inst (temp, val >> shift, false))
+           break;
+       }
+    }
+
+  /* At this point, temp == val >> shift, shift % 16 == 0, and we
+     still need to insert any bits of 'val' below 'shift'. Those bits
+     are guaranteed to not have 16 contiguous zeroes.  */
+
+  gcc_assert ((shift & 15) == 0);
+
+  for (ins_shift = shift - 16; ins_shift >= 0; ins_shift -= 16)
+    {
+      rtx result;
+      HOST_WIDE_INT bits = (val >> ins_shift) & 0xFFFF;
+      gcc_assert (bits != 0);
+
+      /* On the last iteration we need to store into dest_reg.  */
+      if (ins_shift == 0)
+       result = dest_reg;
+      else
+       result = create_temp_reg_if_possible (DImode, dest_reg);
+
+      emit_insn (gen_insn_shl16insli (result, temp, GEN_INT (bits)));
+
+      temp = result;
+    }
+}
+
+
+/* Load OP1, a 64-bit constant, into OP0, a register.  We know it
+   can't be done in one insn when we get here, the move expander
+   guarantees this.  */
+void
+tilegx_expand_set_const64 (rtx op0, rtx op1)
+{
+  if (CONST_INT_P (op1))
+    {
+      /* TODO: I don't know if we want to split large constants
+         now, or wait until later (with a define_split).
+
+         Does splitting early help CSE?  Does it harm other
+         optimizations that might fold loads? */
+      expand_set_cint64 (op0, op1);
+    }
+  else
+    {
+      rtx temp = create_temp_reg_if_possible (Pmode, op0);
+
+      if (TARGET_32BIT)
+       {
+         /* Generate the 2-insn sequence to materialize a symbolic
+            address.  */
+         emit_insn (gen_mov_address_32bit_step1 (temp, op1));
+         emit_insn (gen_mov_address_32bit_step2 (op0, temp, op1));
+       }
+      else
+       {
+         /* Generate the 3-insn sequence to materialize a symbolic
+            address.  Note that this assumes that virtual addresses
+            fit in 48 signed bits, which is currently true.  */
+         rtx temp2 = create_temp_reg_if_possible (Pmode, op0);
+         emit_insn (gen_mov_address_step1 (temp, op1));
+         emit_insn (gen_mov_address_step2 (temp2, temp, op1));
+         emit_insn (gen_mov_address_step3 (op0, temp2, op1));
+       }
+    }
+}
+
+
+/* Expand a move instruction.  Return true if all work is done.  */
+bool
+tilegx_expand_mov (enum machine_mode mode, rtx *operands)
+{
+  /* Handle sets of MEM first.  */
+  if (MEM_P (operands[0]))
+    {
+      if (can_create_pseudo_p ())
+       operands[0] = validize_mem (operands[0]);
+
+      if (reg_or_0_operand (operands[1], mode))
+       return false;
+
+      if (!reload_in_progress)
+       operands[1] = force_reg (mode, operands[1]);
+    }
+
+  /* Fixup TLS cases.  */
+  if (CONSTANT_P (operands[1]) && tilegx_tls_referenced_p (operands[1]))
+    {
+      operands[1] = tilegx_legitimize_tls_address (operands[1]);
+      return false;
+    }
+
+  /* Fixup PIC cases.  */
+  if (flag_pic && CONSTANT_P (operands[1]))
+    {
+      if (tilegx_pic_address_needs_scratch (operands[1]))
+       operands[1] = tilegx_legitimize_pic_address (operands[1], mode, 0);
+
+      if (symbolic_operand (operands[1], mode))
+       {
+         operands[1] = tilegx_legitimize_pic_address (operands[1],
+                                                      mode,
+                                                      (reload_in_progress ?
+                                                       operands[0] :
+                                                       NULL_RTX));
+         return false;
+       }
+    }
+
+  /* Accept non-constants and valid constants unmodified.  */
+  if (!CONSTANT_P (operands[1]) || move_operand (operands[1], mode))
+    return false;
+
+  /* Split large integers.  */
+  tilegx_expand_set_const64 (operands[0], operands[1]);
+  return true;
+}
+
+
+/* Expand unaligned loads.  */
+void
+tilegx_expand_unaligned_load (rtx dest_reg, rtx mem, HOST_WIDE_INT bitsize,
+                             HOST_WIDE_INT bit_offset, bool sign)
+{
+  enum machine_mode mode;
+  rtx addr_lo, addr_hi;
+  rtx mem_lo, mem_hi, hi;
+  rtx mema, wide_result;
+  int last_byte_offset;
+  HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
+
+  mode = GET_MODE (dest_reg);
+
+  hi = gen_reg_rtx (mode);
+
+  if (bitsize == 2 * BITS_PER_UNIT && (bit_offset % BITS_PER_UNIT) == 0)
+    {
+      /* When just loading a two byte value, we can load the two bytes
+         individually and combine them efficiently.  */
+
+      mem_lo = adjust_address (mem, QImode, byte_offset);
+      mem_hi = adjust_address (mem, QImode, byte_offset + 1);
+
+      if (sign)
+       {
+         /* Do a signed load of the second byte and use bfins to set
+            the high bits of the result.  */
+         emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, dest_reg),
+                                          mem_lo));
+         emit_insn (gen_extendqidi2 (gen_lowpart (DImode, hi), mem_hi));
+         emit_insn (gen_insv (gen_lowpart (DImode, dest_reg),
+                              GEN_INT (64 - 8), GEN_INT (8),
+                              gen_lowpart (DImode, hi)));
+       }
+      else
+       {
+         /* Do two unsigned loads and use v1int_l to interleave
+            them.  */
+         rtx lo = gen_reg_rtx (mode);
+         emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, lo),
+                                          mem_lo));
+         emit_insn (gen_zero_extendqidi2 (gen_lowpart (DImode, hi),
+                                          mem_hi));
+         emit_insn (gen_insn_v1int_l (gen_lowpart (DImode, dest_reg),
+                                      gen_lowpart (DImode, hi),
+                                      gen_lowpart (DImode, lo)));
+       }
+
+      return;
+    }
+
+  mema = XEXP (mem, 0);
+
+  /* AND addresses cannot be in any alias set, since they may
+     implicitly alias surrounding code.  Ideally we'd have some alias
+     set that covered all types except those with alignment 8 or
+     higher.  */
+  addr_lo = force_reg (Pmode, plus_constant (mema, byte_offset));
+  mem_lo = change_address (mem, mode,
+                          gen_rtx_AND (GET_MODE (mema), addr_lo,
+                                       GEN_INT (-8)));
+  set_mem_alias_set (mem_lo, 0);
+
+  /* Load the high word at an address that will not fault if the low
+     address is aligned and at the very end of a page.  */
+  last_byte_offset = (bit_offset + bitsize - 1) / BITS_PER_UNIT;
+  addr_hi = force_reg (Pmode, plus_constant (mema, last_byte_offset));
+  mem_hi = change_address (mem, mode,
+                          gen_rtx_AND (GET_MODE (mema), addr_hi,
+                                       GEN_INT (-8)));
+  set_mem_alias_set (mem_hi, 0);
+
+  if (bitsize == 64)
+    {
+      addr_lo = make_safe_from (addr_lo, dest_reg);
+      wide_result = dest_reg;
+    }
+  else
+    {
+      wide_result = gen_reg_rtx (mode);
+    }
+
+  /* Load hi first in case dest_reg is used in mema.  */
+  emit_move_insn (hi, mem_hi);
+  emit_move_insn (wide_result, mem_lo);
+
+  emit_insn (gen_insn_dblalign (gen_lowpart (DImode, wide_result),
+                               gen_lowpart (DImode, wide_result),
+                               gen_lowpart (DImode, hi), addr_lo));
+
+  if (bitsize != 64)
+    {
+      rtx extracted =
+       extract_bit_field (gen_lowpart (DImode, wide_result),
+                          bitsize, bit_offset % BITS_PER_UNIT,
+                          !sign, false, gen_lowpart (DImode, dest_reg),
+                          DImode, DImode);
+
+      if (extracted != dest_reg)
+       emit_move_insn (dest_reg, gen_lowpart (DImode, extracted));
+    }
+}
+
+
+/* Expand unaligned stores.  */
+static void
+tilegx_expand_unaligned_store (rtx mem, rtx src, HOST_WIDE_INT bitsize,
+                              HOST_WIDE_INT bit_offset)
+{
+  HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
+  HOST_WIDE_INT bytesize = bitsize / BITS_PER_UNIT;
+  HOST_WIDE_INT shift_amt;
+  HOST_WIDE_INT i;
+  rtx mem_addr;
+  rtx store_val;
+
+  for (i = 0, shift_amt = 0; i < bytesize; i++, shift_amt += BITS_PER_UNIT)
+    {
+      mem_addr = adjust_address (mem, QImode, byte_offset + i);
+
+      if (shift_amt)
+       {
+         store_val = expand_simple_binop (DImode, LSHIFTRT,
+                                          gen_lowpart (DImode, src),
+                                          GEN_INT (shift_amt), NULL, 1,
+                                          OPTAB_LIB_WIDEN);
+         store_val = gen_lowpart (QImode, store_val);
+       }
+      else
+       {
+         store_val = gen_lowpart (QImode, src);
+       }
+
+      emit_move_insn (mem_addr, store_val);
+    }
+}
+
+
+/* Implement the movmisalign patterns.  One of the operands is a
+   memory that is not naturally aligned.  Emit instructions to load
+   it.  */
+void
+tilegx_expand_movmisalign (enum machine_mode mode, rtx *operands)
+{
+  if (MEM_P (operands[1]))
+    {
+      rtx tmp;
+
+      if (register_operand (operands[0], mode))
+       tmp = operands[0];
+      else
+       tmp = gen_reg_rtx (mode);
+
+      tilegx_expand_unaligned_load (tmp, operands[1], GET_MODE_BITSIZE (mode),
+                                   0, true);
+
+      if (tmp != operands[0])
+       emit_move_insn (operands[0], tmp);
+    }
+  else if (MEM_P (operands[0]))
+    {
+      if (!reg_or_0_operand (operands[1], mode))
+       operands[1] = force_reg (mode, operands[1]);
+
+      tilegx_expand_unaligned_store (operands[0], operands[1],
+                                    GET_MODE_BITSIZE (mode), 0);
+    }
+  else
+    gcc_unreachable ();
+
+}
+
+
+/* Implement the allocate_stack pattern (alloca).  */
+void
+tilegx_allocate_stack (rtx op0, rtx op1)
+{
+  /* Technically the correct way to initialize chain_loc is with
+   * gen_frame_mem() instead of gen_rtx_MEM(), but gen_frame_mem()
+   * sets the alias_set to that of a frame reference.  Some of our
+   * tests rely on some unsafe assumption about when the chaining
+   * update is done, we need to be conservative about reordering the
+   * chaining instructions.
+   */
+  rtx fp_addr = gen_reg_rtx (Pmode);
+  rtx fp_value = gen_reg_rtx (Pmode);
+  rtx fp_loc;
+
+  emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                        GEN_INT (UNITS_PER_WORD)));
+
+  fp_loc = gen_frame_mem (Pmode, fp_addr);
+
+  emit_move_insn (fp_value, fp_loc);
+
+  op1 = force_reg (Pmode, op1);
+
+  emit_move_insn (stack_pointer_rtx,
+                 gen_rtx_MINUS (Pmode, stack_pointer_rtx, op1));
+
+  emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                        GEN_INT (UNITS_PER_WORD)));
+
+  fp_loc = gen_frame_mem (Pmode, fp_addr);
+
+  emit_move_insn (fp_loc, fp_value);
+
+  emit_move_insn (op0, virtual_stack_dynamic_rtx);
+}
+\f
+
+
+/* Multiplies */
+
+
+/* Returns the insn_code in ENTRY.  */
+static enum insn_code
+tilegx_multiply_get_opcode (const struct tilegx_multiply_insn_seq_entry
+                           *entry)
+{
+  return tilegx_multiply_insn_seq_decode_opcode[entry->compressed_opcode];
+}
+
+
+/* Returns the length of the 'op' array.  */
+static int
+tilegx_multiply_get_num_ops (const struct tilegx_multiply_insn_seq *seq)
+{
+  /* The array either uses all of its allocated slots or is terminated
+     by a bogus opcode. Either way, the array size is the index of the
+     last valid opcode plus one.  */
+  int i;
+  for (i = tilegx_multiply_insn_seq_MAX_OPERATIONS - 1; i >= 0; i--)
+    if (tilegx_multiply_get_opcode (&seq->op[i]) != CODE_FOR_nothing)
+      return i + 1;
+
+  /* An empty array is not allowed.  */
+  gcc_unreachable ();
+}
+
+
+/* We precompute a number of expression trees for multiplying by
+   constants.  This generates code for such an expression tree by
+   walking through the nodes in the tree (which are conveniently
+   pre-linearized) and emitting an instruction for each one.  */
+static void
+tilegx_expand_constant_multiply_given_sequence (rtx result, rtx src,
+                                               const struct
+                                               tilegx_multiply_insn_seq *seq)
+{
+  int i;
+  int num_ops;
+
+  /* Keep track of the subexpressions computed so far, so later
+     instructions can refer to them.  We seed the array with zero and
+     the value being multiplied.  */
+  int num_subexprs = 2;
+  rtx subexprs[tilegx_multiply_insn_seq_MAX_OPERATIONS + 2];
+  subexprs[0] = const0_rtx;
+  subexprs[1] = src;
+
+  /* Determine how many instructions we are going to generate.  */
+  num_ops = tilegx_multiply_get_num_ops (seq);
+  gcc_assert (num_ops > 0
+             && num_ops <= tilegx_multiply_insn_seq_MAX_OPERATIONS);
+
+  for (i = 0; i < num_ops; i++)
+    {
+      const struct tilegx_multiply_insn_seq_entry *entry = &seq->op[i];
+
+      /* Figure out where to store the output of this instruction.  */
+      const bool is_last_op = (i + 1 == num_ops);
+      rtx out = is_last_op ? result : gen_reg_rtx (DImode);
+
+      enum insn_code opcode = tilegx_multiply_get_opcode (entry);
+      if (opcode == CODE_FOR_ashldi3)
+       {
+         /* Handle shift by immediate. This is a special case because
+            the meaning of the second operand is a constant shift
+            count rather than an operand index.  */
+
+         /* Make sure the shift count is in range. Zero should not
+            happen.  */
+         const int shift_count = entry->rhs;
+         gcc_assert (shift_count > 0 && shift_count < 64);
+
+         /* Emit the actual instruction.  */
+         emit_insn (GEN_FCN (opcode)
+                    (out, subexprs[entry->lhs],
+                     gen_rtx_CONST_INT (DImode, shift_count)));
+       }
+      else
+       {
+         /* Handle a normal two-operand instruction, such as add or
+            shl1add.  */
+
+         /* Make sure we are referring to a previously computed
+            subexpression.  */
+         gcc_assert (entry->rhs < num_subexprs);
+
+         /* Emit the actual instruction.  */
+         emit_insn (GEN_FCN (opcode)
+                    (out, subexprs[entry->lhs], subexprs[entry->rhs]));
+       }
+
+      /* Record this subexpression for use by later expressions.  */
+      subexprs[num_subexprs++] = out;
+    }
+}
+
+
+/* bsearch helper function.  */
+static int
+tilegx_compare_multipliers (const void *key, const void *t)
+{
+  long long delta =
+    (*(const long long *) key
+     - ((const struct tilegx_multiply_insn_seq *) t)->multiplier);
+  return (delta < 0) ? -1 : (delta > 0);
+}
+
+
+/* Returns the tilegx_multiply_insn_seq for multiplier, or NULL if none
+   exists.  */
+static const struct tilegx_multiply_insn_seq *
+tilegx_find_multiply_insn_seq_for_constant (long long multiplier)
+{
+  return ((const struct tilegx_multiply_insn_seq *)
+         bsearch (&multiplier, tilegx_multiply_insn_seq_table,
+                  tilegx_multiply_insn_seq_table_size,
+                  sizeof tilegx_multiply_insn_seq_table[0],
+                  tilegx_compare_multipliers));
+}
+
+
+/* Try to a expand constant multiply in DImode by looking it up in a
+   precompiled table.  OP0 is the result operand, OP1 is the source
+   operand, and MULTIPLIER is the value of the constant.  Return true
+   if it succeeds.  */
+static bool
+tilegx_expand_const_muldi (rtx op0, rtx op1, long long multiplier)
+{
+  /* See if we have precomputed an efficient way to multiply by this
+     constant.  */
+  const struct tilegx_multiply_insn_seq *seq =
+    tilegx_find_multiply_insn_seq_for_constant (multiplier);
+  if (seq != NULL)
+    {
+      tilegx_expand_constant_multiply_given_sequence (op0, op1, seq);
+      return true;
+    }
+  else
+    return false;
+}
+
+/* Expand the muldi pattern.  */
+bool
+tilegx_expand_muldi (rtx op0, rtx op1, rtx op2)
+{
+  if (CONST_INT_P (op2))
+    {
+      HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op2), DImode);
+      return tilegx_expand_const_muldi (op0, op1, n);
+    }
+  return false;
+}
+
+
+/* Expand a high multiply pattern in DImode.  RESULT, OP1, OP2 are the
+   operands, and SIGN is true if it's a signed multiply, and false if
+   it's an unsigned multiply.  */
+static void
+tilegx_expand_high_multiply (rtx result, rtx op1, rtx op2, bool sign)
+{
+  rtx tmp0 = gen_reg_rtx (DImode);
+  rtx tmp1 = gen_reg_rtx (DImode);
+  rtx tmp2 = gen_reg_rtx (DImode);
+  rtx tmp3 = gen_reg_rtx (DImode);
+  rtx tmp4 = gen_reg_rtx (DImode);
+  rtx tmp5 = gen_reg_rtx (DImode);
+  rtx tmp6 = gen_reg_rtx (DImode);
+  rtx tmp7 = gen_reg_rtx (DImode);
+  rtx tmp8 = gen_reg_rtx (DImode);
+  rtx tmp9 = gen_reg_rtx (DImode);
+  rtx tmp10 = gen_reg_rtx (DImode);
+  rtx tmp11 = gen_reg_rtx (DImode);
+  rtx tmp12 = gen_reg_rtx (DImode);
+  rtx tmp13 = gen_reg_rtx (DImode);
+  rtx result_lo = gen_reg_rtx (DImode);
+
+  if (sign)
+    {
+      emit_insn (gen_insn_mul_hs_lu (tmp0, op1, op2));
+      emit_insn (gen_insn_mul_hs_lu (tmp1, op2, op1));
+      emit_insn (gen_insn_mul_lu_lu (tmp2, op1, op2));
+      emit_insn (gen_insn_mul_hs_hs (tmp3, op1, op2));
+    }
+  else
+    {
+      emit_insn (gen_insn_mul_hu_lu (tmp0, op1, op2));
+      emit_insn (gen_insn_mul_hu_lu (tmp1, op2, op1));
+      emit_insn (gen_insn_mul_lu_lu (tmp2, op1, op2));
+      emit_insn (gen_insn_mul_hu_hu (tmp3, op1, op2));
+    }
+
+  emit_move_insn (tmp4, (gen_rtx_ASHIFT (DImode, tmp0, GEN_INT (32))));
+
+  emit_move_insn (tmp5, (gen_rtx_ASHIFT (DImode, tmp1, GEN_INT (32))));
+
+  emit_move_insn (tmp6, (gen_rtx_PLUS (DImode, tmp4, tmp5)));
+  emit_move_insn (result_lo, (gen_rtx_PLUS (DImode, tmp2, tmp6)));
+
+  emit_move_insn (tmp7, gen_rtx_LTU (DImode, tmp6, tmp4));
+  emit_move_insn (tmp8, gen_rtx_LTU (DImode, result_lo, tmp2));
+
+  if (sign)
+    {
+      emit_move_insn (tmp9, (gen_rtx_ASHIFTRT (DImode, tmp0, GEN_INT (32))));
+      emit_move_insn (tmp10, (gen_rtx_ASHIFTRT (DImode, tmp1, GEN_INT (32))));
+    }
+  else
+    {
+      emit_move_insn (tmp9, (gen_rtx_LSHIFTRT (DImode, tmp0, GEN_INT (32))));
+      emit_move_insn (tmp10, (gen_rtx_LSHIFTRT (DImode, tmp1, GEN_INT (32))));
+    }
+
+  emit_move_insn (tmp11, (gen_rtx_PLUS (DImode, tmp3, tmp7)));
+  emit_move_insn (tmp12, (gen_rtx_PLUS (DImode, tmp8, tmp9)));
+  emit_move_insn (tmp13, (gen_rtx_PLUS (DImode, tmp11, tmp12)));
+  emit_move_insn (result, (gen_rtx_PLUS (DImode, tmp13, tmp10)));
+}
+
+
+/* Implement smuldi3_highpart.  */
+void
+tilegx_expand_smuldi3_highpart (rtx op0, rtx op1, rtx op2)
+{
+  tilegx_expand_high_multiply (op0, op1, op2, true);
+}
+
+
+/* Implement umuldi3_highpart.  */
+void
+tilegx_expand_umuldi3_highpart (rtx op0, rtx op1, rtx op2)
+{
+  tilegx_expand_high_multiply (op0, op1, op2, false);
+}
+\f
+
+
+/* Compare and branches  */
+
+/* Produce the rtx yielding a bool for a floating point
+   comparison.  */
+static bool
+tilegx_emit_fp_setcc (rtx res, enum rtx_code code, enum machine_mode mode,
+                     rtx op0, rtx op1)
+{
+  /* TODO: Certain compares again constants can be done using entirely
+     integer operations. But you have to get the special cases right
+     e.g. NaN, +0 == -0, etc.  */
+
+  rtx flags;
+  int flag_index;
+  rtx a = force_reg (DImode, gen_lowpart (DImode, op0));
+  rtx b = force_reg (DImode, gen_lowpart (DImode, op1));
+
+  flags = gen_reg_rtx (DImode);
+
+  if (mode == SFmode)
+    {
+      emit_insn (gen_insn_fsingle_add1 (flags, a, b));
+    }
+  else
+    {
+      gcc_assert (mode == DFmode);
+      emit_insn (gen_insn_fdouble_add_flags (flags, a, b));
+    }
+
+  switch (code)
+    {
+    case EQ: flag_index = 30; break;
+    case NE: flag_index = 31; break;
+    case LE: flag_index = 27; break;
+    case LT: flag_index = 26; break;
+    case GE: flag_index = 29; break;
+    case GT: flag_index = 28; break;
+    default: gcc_unreachable ();
+    }
+
+  gcc_assert (GET_MODE (res) == DImode);
+  emit_move_insn (res, gen_rtx_ZERO_EXTRACT (DImode, flags, GEN_INT (1),
+                                            GEN_INT (flag_index)));
+  return true;
+}
+
+
+/* Certain simplifications can be done to make invalid setcc
+   operations valid.  Return the final comparison, or NULL if we can't
+   work.  */
+static bool
+tilegx_emit_setcc_internal (rtx res, enum rtx_code code, rtx op0, rtx op1,
+                           enum machine_mode cmp_mode)
+{
+  rtx tmp;
+  bool swap = false;
+
+  if (cmp_mode == SFmode || cmp_mode == DFmode)
+    return tilegx_emit_fp_setcc (res, code, cmp_mode, op0, op1);
+
+  /* The general case: fold the comparison code to the types of
+     compares that we have, choosing the branch as necessary.  */
+
+  switch (code)
+    {
+    case EQ:
+    case NE:
+    case LE:
+    case LT:
+    case LEU:
+    case LTU:
+      /* We have these compares.  */
+      break;
+
+    case GE:
+    case GT:
+    case GEU:
+    case GTU:
+      /* We do not have these compares, so we reverse the
+         operands.  */
+      swap = true;
+      break;
+
+    default:
+      /* We should not have called this with any other code.  */
+      gcc_unreachable ();
+    }
+
+  if (swap)
+    {
+      code = swap_condition (code);
+      tmp = op0, op0 = op1, op1 = tmp;
+    }
+
+  if (!reg_or_0_operand (op0, cmp_mode))
+    op0 = force_reg (cmp_mode, op0);
+
+  if (!CONST_INT_P (op1) && !register_operand (op1, cmp_mode))
+    op1 = force_reg (cmp_mode, op1);
+
+  /* Return the setcc comparison.  */
+  emit_insn (gen_rtx_SET (VOIDmode, res,
+                         gen_rtx_fmt_ee (code, DImode, op0, op1)));
+
+  return true;
+}
+
+
+/* Implement cstore patterns.  */
+bool
+tilegx_emit_setcc (rtx operands[], enum machine_mode cmp_mode)
+{
+  return
+    tilegx_emit_setcc_internal (operands[0], GET_CODE (operands[1]),
+                               operands[2], operands[3], cmp_mode);
+}
+
+
+/* Return whether CODE is a signed comparison.  */
+static bool
+signed_compare_p (enum rtx_code code)
+{
+  return (code == EQ || code == NE || code == LT || code == LE
+         || code == GT || code == GE);
+}
+
+
+/* Generate the comparison for a DImode conditional branch.  */
+static rtx
+tilegx_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
+                    enum machine_mode cmp_mode, bool eq_ne_only)
+{
+  enum rtx_code branch_code;
+  rtx temp;
+
+  if (cmp_mode == SFmode || cmp_mode == DFmode)
+    {
+      /* Compute a boolean saying whether the comparison is true.  */
+      temp = gen_reg_rtx (DImode);
+      tilegx_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
+
+      /* Test that flag.  */
+      return gen_rtx_fmt_ee (NE, VOIDmode, temp, const0_rtx);
+    }
+
+  /* Check for a compare against zero using a comparison we can do
+     directly.  */
+  if (op1 == const0_rtx
+      && (code == EQ || code == NE
+         || (!eq_ne_only && signed_compare_p (code))))
+    {
+      op0 = force_reg (cmp_mode, op0);
+      return gen_rtx_fmt_ee (code, VOIDmode, op0, const0_rtx);
+    }
+
+  /* The general case: fold the comparison code to the types of
+     compares that we have, choosing the branch as necessary.  */
+  switch (code)
+    {
+    case EQ:
+    case LE:
+    case LT:
+    case LEU:
+    case LTU:
+      /* We have these compares.  */
+      branch_code = NE;
+      break;
+
+    case NE:
+    case GE:
+    case GT:
+    case GEU:
+    case GTU:
+      /* These must be reversed (except NE, but let's
+         canonicalize).  */
+      code = reverse_condition (code);
+      branch_code = EQ;
+      break;
+
+    default:
+      gcc_unreachable ();
+    }
+
+  if (CONST_INT_P (op1) && (!satisfies_constraint_I (op1) || code == LEU))
+    {
+      HOST_WIDE_INT n = INTVAL (op1);
+
+      switch (code)
+       {
+       case EQ:
+         /* Subtract off the value we want to compare against and see
+            if we get zero.  This is cheaper than creating a constant
+            in a register. Except that subtracting -128 is more
+            expensive than seqi to -128, so we leave that alone.  */
+         /* ??? Don't do this when comparing against symbols,
+            otherwise we'll reduce (&x == 0x1234) to (&x-0x1234 ==
+            0), which will be declared false out of hand (at least
+            for non-weak).  */
+         if (n != -128
+             && add_operand (GEN_INT (-n), DImode)
+             && !(symbolic_operand (op0, VOIDmode)
+                  || (REG_P (op0) && REG_POINTER (op0))))
+           {
+             /* TODO: Use a SIMD add immediate to hit zero for tiled
+                constants in a single instruction.  */
+             if (GET_MODE (op0) != DImode)
+               {
+                 /* Convert to DImode so we can use addli.  Note that
+                    this will not actually generate any code because
+                    sign extension from SI -> DI is a no-op.  I don't
+                    know if it's safe just to make a paradoxical
+                    subreg here though.  */
+                 rtx temp2 = gen_reg_rtx (DImode);
+                 emit_insn (gen_extendsidi2 (temp2, op0));
+                 op0 = temp2;
+               }
+             else
+               {
+                 op0 = force_reg (DImode, op0);
+               }
+             temp = gen_reg_rtx (DImode);
+             emit_move_insn (temp, gen_rtx_PLUS (DImode, op0, GEN_INT (-n)));
+             return gen_rtx_fmt_ee (reverse_condition (branch_code),
+                                    VOIDmode, temp, const0_rtx);
+           }
+         break;
+
+       case LEU:
+         if (n == -1)
+           break;
+         /* FALLTHRU */
+
+       case LTU:
+         /* Change ((unsigned)x < 0x1000) into !((int)x >> 12), etc.
+            We use arithmetic shift right because it's a 3-wide op,
+            while logical shift right is not.  */
+         {
+           int first = exact_log2 (code == LTU ? n : n + 1);
+           if (first != -1)
+             {
+               op0 = force_reg (cmp_mode, op0);
+               temp = gen_reg_rtx (cmp_mode);
+               emit_move_insn (temp,
+                               gen_rtx_ASHIFTRT (cmp_mode, op0,
+                                                 GEN_INT (first)));
+               return gen_rtx_fmt_ee (reverse_condition (branch_code),
+                                      VOIDmode, temp, const0_rtx);
+             }
+         }
+         break;
+
+       default:
+         break;
+       }
+    }
+
+  /* Compute a flag saying whether we should branch.  */
+  temp = gen_reg_rtx (DImode);
+  tilegx_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
+
+  /* Return the branch comparison.  */
+  return gen_rtx_fmt_ee (branch_code, VOIDmode, temp, const0_rtx);
+}
+
+
+/* Generate the comparison for a conditional branch.  */
+void
+tilegx_emit_conditional_branch (rtx operands[], enum machine_mode cmp_mode)
+{
+  rtx cmp_rtx =
+    tilegx_emit_cc_test (GET_CODE (operands[0]), operands[1], operands[2],
+                        cmp_mode, false);
+  rtx branch_rtx = gen_rtx_SET (VOIDmode, pc_rtx,
+                               gen_rtx_IF_THEN_ELSE (VOIDmode, cmp_rtx,
+                                                     gen_rtx_LABEL_REF
+                                                     (VOIDmode,
+                                                      operands[3]),
+                                                     pc_rtx));
+  emit_jump_insn (branch_rtx);
+}
+
+
+/* Implement the mov<mode>cc pattern.  */
+rtx
+tilegx_emit_conditional_move (rtx cmp)
+{
+  return
+    tilegx_emit_cc_test (GET_CODE (cmp), XEXP (cmp, 0), XEXP (cmp, 1),
+                        GET_MODE (XEXP (cmp, 0)), true);
+}
+
+
+/* Return true if INSN is annotated with a REG_BR_PROB note that
+   indicates it's a branch that's predicted taken.  */
+static bool
+cbranch_predicted_p (rtx insn)
+{
+  rtx x = find_reg_note (insn, REG_BR_PROB, 0);
+
+  if (x)
+    {
+      int pred_val = INTVAL (XEXP (x, 0));
+
+      return pred_val >= REG_BR_PROB_BASE / 2;
+    }
+
+  return false;
+}
+
+
+/* Output assembly code for a specific branch instruction, appending
+   the branch prediction flag to the opcode if appropriate.  */
+static const char *
+tilegx_output_simple_cbranch_with_opcode (rtx insn, const char *opcode,
+                                         int regop, bool reverse_predicted)
+{
+  static char buf[64];
+  sprintf (buf, "%s%s\t%%r%d, %%l0", opcode,
+          (cbranch_predicted_p (insn) ^ reverse_predicted) ? "t" : "",
+          regop);
+  return buf;
+}
+
+
+/* Output assembly code for a specific branch instruction, appending
+   the branch prediction flag to the opcode if appropriate.  */
+const char *
+tilegx_output_cbranch_with_opcode (rtx insn, rtx *operands,
+                                  const char *opcode,
+                                  const char *rev_opcode, int regop)
+{
+  const char *branch_if_false;
+  rtx taken, not_taken;
+  bool is_simple_branch;
+
+  gcc_assert (LABEL_P (operands[0]));
+
+  is_simple_branch = true;
+  if (INSN_ADDRESSES_SET_P ())
+    {
+      int from_addr = INSN_ADDRESSES (INSN_UID (insn));
+      int to_addr = INSN_ADDRESSES (INSN_UID (operands[0]));
+      int delta = to_addr - from_addr;
+      is_simple_branch = IN_RANGE (delta, -524288, 524280);
+    }
+
+  if (is_simple_branch)
+    {
+      /* Just a simple conditional branch.  */
+      return
+       tilegx_output_simple_cbranch_with_opcode (insn, opcode, regop, false);
+    }
+
+  /* Generate a reversed branch around a direct jump.  This fallback
+     does not use branch-likely instructions.  */
+  not_taken = gen_label_rtx ();
+  taken = operands[0];
+
+  /* Generate the reversed branch to NOT_TAKEN.  */
+  operands[0] = not_taken;
+  branch_if_false =
+    tilegx_output_simple_cbranch_with_opcode (insn, rev_opcode, regop, true);
+  output_asm_insn (branch_if_false, operands);
+
+  output_asm_insn ("j\t%l0", &taken);
+
+  /* Output NOT_TAKEN.  */
+  targetm.asm_out.internal_label (asm_out_file, "L",
+                                 CODE_LABEL_NUMBER (not_taken));
+  return "";
+}
+
+
+/* Output assembly code for a conditional branch instruction.  */
+const char *
+tilegx_output_cbranch (rtx insn, rtx *operands, bool reversed)
+{
+  enum rtx_code code = GET_CODE (operands[1]);
+  const char *opcode;
+  const char *rev_opcode;
+
+  if (reversed)
+    code = reverse_condition (code);
+
+  switch (code)
+    {
+    case NE:
+      opcode = "bnez";
+      rev_opcode = "beqz";
+      break;
+    case EQ:
+      opcode = "beqz";
+      rev_opcode = "bnez";
+      break;
+    case GE:
+      opcode = "bgez";
+      rev_opcode = "bltz";
+      break;
+    case GT:
+      opcode = "bgtz";
+      rev_opcode = "blez";
+      break;
+    case LE:
+      opcode = "blez";
+      rev_opcode = "bgtz";
+      break;
+    case LT:
+      opcode = "bltz";
+      rev_opcode = "bgez";
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  return tilegx_output_cbranch_with_opcode (insn, operands, opcode,
+                                           rev_opcode, 2);
+}
+
+
+/* Implement the tablejump pattern.  */
+void
+tilegx_expand_tablejump (rtx op0, rtx op1)
+{
+  if (flag_pic)
+    {
+      rtx temp = gen_reg_rtx (Pmode);
+      rtx temp2 = gen_reg_rtx (Pmode);
+
+      compute_pcrel_address (temp, gen_rtx_LABEL_REF (Pmode, op1));
+      emit_move_insn (temp2,
+                     gen_rtx_PLUS (Pmode,
+                                   convert_to_mode (Pmode, op0, false),
+                                   temp));
+      op0 = temp2;
+    }
+
+  emit_jump_insn (gen_tablejump_aux (op0, op1));
+}
+
+
+/* Emit barrier before an atomic, as needed for the memory MODEL.  */
+void
+tilegx_pre_atomic_barrier (enum memmodel model)
+{
+  switch (model)
+    {
+    case MEMMODEL_RELAXED:
+    case MEMMODEL_CONSUME:
+    case MEMMODEL_ACQUIRE:
+      break;
+    case MEMMODEL_RELEASE:
+    case MEMMODEL_ACQ_REL:
+    case MEMMODEL_SEQ_CST:
+      emit_insn (gen_memory_barrier ());
+      break;
+    default:
+      gcc_unreachable ();
+    }
+}
+
+
+/* Emit barrier after an atomic, as needed for the memory MODEL.  */
+void
+tilegx_post_atomic_barrier (enum memmodel model)
+{
+  switch (model)
+    {
+    case MEMMODEL_RELAXED:
+    case MEMMODEL_CONSUME:
+    case MEMMODEL_RELEASE:
+      break;
+    case MEMMODEL_ACQUIRE:
+    case MEMMODEL_ACQ_REL:
+    case MEMMODEL_SEQ_CST:
+      emit_insn (gen_memory_barrier ());
+      break;
+    default:
+      gcc_unreachable ();
+    }
+}
+
+
+
+/* Expand a builtin vector binary op, by calling gen function GEN with
+   operands in the proper modes.  DEST is converted to DEST_MODE, and
+   src0 and src1 (if DO_SRC1 is true) is converted to SRC_MODE.  */
+void
+tilegx_expand_builtin_vector_binop (rtx (*gen) (rtx, rtx, rtx),
+                                   enum machine_mode dest_mode,
+                                   rtx dest,
+                                   enum machine_mode src_mode,
+                                   rtx src0, rtx src1, bool do_src1)
+{
+  dest = gen_lowpart (dest_mode, dest);
+
+  if (src0 == const0_rtx)
+    src0 = CONST0_RTX (src_mode);
+  else
+    src0 = gen_lowpart (src_mode, src0);
+
+  if (do_src1)
+    {
+      if (src1 == const0_rtx)
+       src1 = CONST0_RTX (src_mode);
+      else
+       src1 = gen_lowpart (src_mode, src1);
+    }
+
+  emit_insn ((*gen) (dest, src0, src1));
+}
+\f
+
+
+/* Intrinsics  */
+
+
+struct tile_builtin_info
+{
+  enum insn_code icode;
+  tree fndecl;
+};
+
+static struct tile_builtin_info tilegx_builtin_info[TILEGX_BUILTIN_max] = {
+  { CODE_FOR_adddi3,                    NULL }, /* add */
+  { CODE_FOR_addsi3,                    NULL }, /* addx */
+  { CODE_FOR_ssaddsi3,                  NULL }, /* addxsc */
+  { CODE_FOR_anddi3,                    NULL }, /* and */
+  { CODE_FOR_insn_bfexts,               NULL }, /* bfexts */
+  { CODE_FOR_insn_bfextu,               NULL }, /* bfextu */
+  { CODE_FOR_insn_bfins,                NULL }, /* bfins */
+  { CODE_FOR_clzdi2,                    NULL }, /* clz */
+  { CODE_FOR_insn_cmoveqz,              NULL }, /* cmoveqz */
+  { CODE_FOR_insn_cmovnez,              NULL }, /* cmovnez */
+  { CODE_FOR_insn_cmpeq_didi,           NULL }, /* cmpeq */
+  { CODE_FOR_insn_cmpexch,              NULL }, /* cmpexch */
+  { CODE_FOR_insn_cmpexch4,             NULL }, /* cmpexch4 */
+  { CODE_FOR_insn_cmples_didi,          NULL }, /* cmples */
+  { CODE_FOR_insn_cmpleu_didi,          NULL }, /* cmpleu */
+  { CODE_FOR_insn_cmplts_didi,          NULL }, /* cmplts */
+  { CODE_FOR_insn_cmpltu_didi,          NULL }, /* cmpltu */
+  { CODE_FOR_insn_cmpne_didi,           NULL }, /* cmpne */
+  { CODE_FOR_insn_cmul,                 NULL }, /* cmul */
+  { CODE_FOR_insn_cmula,                NULL }, /* cmula */
+  { CODE_FOR_insn_cmulaf,               NULL }, /* cmulaf */
+  { CODE_FOR_insn_cmulf,                NULL }, /* cmulf */
+  { CODE_FOR_insn_cmulfr,               NULL }, /* cmulfr */
+  { CODE_FOR_insn_cmulh,                NULL }, /* cmulh */
+  { CODE_FOR_insn_cmulhr,               NULL }, /* cmulhr */
+  { CODE_FOR_insn_crc32_32,             NULL }, /* crc32_32 */
+  { CODE_FOR_insn_crc32_8,              NULL }, /* crc32_8 */
+  { CODE_FOR_ctzdi2,                    NULL }, /* ctz */
+  { CODE_FOR_insn_dblalign,             NULL }, /* dblalign */
+  { CODE_FOR_insn_dblalign2,            NULL }, /* dblalign2 */
+  { CODE_FOR_insn_dblalign4,            NULL }, /* dblalign4 */
+  { CODE_FOR_insn_dblalign6,            NULL }, /* dblalign6 */
+  { CODE_FOR_insn_drain,                NULL }, /* drain */
+  { CODE_FOR_insn_dtlbpr,               NULL }, /* dtlbpr */
+  { CODE_FOR_insn_exch,                 NULL }, /* exch */
+  { CODE_FOR_insn_exch4,                NULL }, /* exch4 */
+  { CODE_FOR_insn_fdouble_add_flags,    NULL }, /* fdouble_add_flags */
+  { CODE_FOR_insn_fdouble_addsub,       NULL }, /* fdouble_addsub */
+  { CODE_FOR_insn_fdouble_mul_flags,    NULL }, /* fdouble_mul_flags */
+  { CODE_FOR_insn_fdouble_pack1,        NULL }, /* fdouble_pack1 */
+  { CODE_FOR_insn_fdouble_pack2,        NULL }, /* fdouble_pack2 */
+  { CODE_FOR_insn_fdouble_sub_flags,    NULL }, /* fdouble_sub_flags */
+  { CODE_FOR_insn_fdouble_unpack_max,   NULL }, /* fdouble_unpack_max */
+  { CODE_FOR_insn_fdouble_unpack_min,   NULL }, /* fdouble_unpack_min */
+  { CODE_FOR_insn_fetchadd,             NULL }, /* fetchadd */
+  { CODE_FOR_insn_fetchadd4,            NULL }, /* fetchadd4 */
+  { CODE_FOR_insn_fetchaddgez,          NULL }, /* fetchaddgez */
+  { CODE_FOR_insn_fetchaddgez4,         NULL }, /* fetchaddgez4 */
+  { CODE_FOR_insn_fetchand,             NULL }, /* fetchand */
+  { CODE_FOR_insn_fetchand4,            NULL }, /* fetchand4 */
+  { CODE_FOR_insn_fetchor,              NULL }, /* fetchor */
+  { CODE_FOR_insn_fetchor4,             NULL }, /* fetchor4 */
+  { CODE_FOR_insn_finv,                 NULL }, /* finv */
+  { CODE_FOR_insn_flush,                NULL }, /* flush */
+  { CODE_FOR_insn_flushwb,              NULL }, /* flushwb */
+  { CODE_FOR_insn_fnop,                 NULL }, /* fnop */
+  { CODE_FOR_insn_fsingle_add1,         NULL }, /* fsingle_add1 */
+  { CODE_FOR_insn_fsingle_addsub2,      NULL }, /* fsingle_addsub2 */
+  { CODE_FOR_insn_fsingle_mul1,         NULL }, /* fsingle_mul1 */
+  { CODE_FOR_insn_fsingle_mul2,         NULL }, /* fsingle_mul2 */
+  { CODE_FOR_insn_fsingle_pack1,        NULL }, /* fsingle_pack1 */
+  { CODE_FOR_insn_fsingle_pack2,        NULL }, /* fsingle_pack2 */
+  { CODE_FOR_insn_fsingle_sub1,         NULL }, /* fsingle_sub1 */
+  { CODE_FOR_insn_icoh,                 NULL }, /* icoh */
+  { CODE_FOR_insn_ill,                  NULL }, /* ill */
+  { CODE_FOR_insn_info,                 NULL }, /* info */
+  { CODE_FOR_insn_infol,                NULL }, /* infol */
+  { CODE_FOR_insn_inv,                  NULL }, /* inv */
+  { CODE_FOR_insn_ld,                   NULL }, /* ld */
+  { CODE_FOR_insn_ld1s,                 NULL }, /* ld1s */
+  { CODE_FOR_insn_ld1u,                 NULL }, /* ld1u */
+  { CODE_FOR_insn_ld2s,                 NULL }, /* ld2s */
+  { CODE_FOR_insn_ld2u,                 NULL }, /* ld2u */
+  { CODE_FOR_insn_ld4s,                 NULL }, /* ld4s */
+  { CODE_FOR_insn_ld4u,                 NULL }, /* ld4u */
+  { CODE_FOR_insn_ldna,                 NULL }, /* ldna */
+  { CODE_FOR_insn_ldnt,                 NULL }, /* ldnt */
+  { CODE_FOR_insn_ldnt1s,               NULL }, /* ldnt1s */
+  { CODE_FOR_insn_ldnt1u,               NULL }, /* ldnt1u */
+  { CODE_FOR_insn_ldnt2s,               NULL }, /* ldnt2s */
+  { CODE_FOR_insn_ldnt2u,               NULL }, /* ldnt2u */
+  { CODE_FOR_insn_ldnt4s,               NULL }, /* ldnt4s */
+  { CODE_FOR_insn_ldnt4u,               NULL }, /* ldnt4u */
+  { CODE_FOR_insn_ld_L2,                NULL }, /* ld_L2 */
+  { CODE_FOR_insn_ld1s_L2,              NULL }, /* ld1s_L2 */
+  { CODE_FOR_insn_ld1u_L2,              NULL }, /* ld1u_L2 */
+  { CODE_FOR_insn_ld2s_L2,              NULL }, /* ld2s_L2 */
+  { CODE_FOR_insn_ld2u_L2,              NULL }, /* ld2u_L2 */
+  { CODE_FOR_insn_ld4s_L2,              NULL }, /* ld4s_L2 */
+  { CODE_FOR_insn_ld4u_L2,              NULL }, /* ld4u_L2 */
+  { CODE_FOR_insn_ldna_L2,              NULL }, /* ldna_L2 */
+  { CODE_FOR_insn_ldnt_L2,              NULL }, /* ldnt_L2 */
+  { CODE_FOR_insn_ldnt1s_L2,            NULL }, /* ldnt1s_L2 */
+  { CODE_FOR_insn_ldnt1u_L2,            NULL }, /* ldnt1u_L2 */
+  { CODE_FOR_insn_ldnt2s_L2,            NULL }, /* ldnt2s_L2 */
+  { CODE_FOR_insn_ldnt2u_L2,            NULL }, /* ldnt2u_L2 */
+  { CODE_FOR_insn_ldnt4s_L2,            NULL }, /* ldnt4s_L2 */
+  { CODE_FOR_insn_ldnt4u_L2,            NULL }, /* ldnt4u_L2 */
+  { CODE_FOR_insn_ld_miss,              NULL }, /* ld_miss */
+  { CODE_FOR_insn_ld1s_miss,            NULL }, /* ld1s_miss */
+  { CODE_FOR_insn_ld1u_miss,            NULL }, /* ld1u_miss */
+  { CODE_FOR_insn_ld2s_miss,            NULL }, /* ld2s_miss */
+  { CODE_FOR_insn_ld2u_miss,            NULL }, /* ld2u_miss */
+  { CODE_FOR_insn_ld4s_miss,            NULL }, /* ld4s_miss */
+  { CODE_FOR_insn_ld4u_miss,            NULL }, /* ld4u_miss */
+  { CODE_FOR_insn_ldna_miss,            NULL }, /* ldna_miss */
+  { CODE_FOR_insn_ldnt_miss,            NULL }, /* ldnt_miss */
+  { CODE_FOR_insn_ldnt1s_miss,          NULL }, /* ldnt1s_miss */
+  { CODE_FOR_insn_ldnt1u_miss,          NULL }, /* ldnt1u_miss */
+  { CODE_FOR_insn_ldnt2s_miss,          NULL }, /* ldnt2s_miss */
+  { CODE_FOR_insn_ldnt2u_miss,          NULL }, /* ldnt2u_miss */
+  { CODE_FOR_insn_ldnt4s_miss,          NULL }, /* ldnt4s_miss */
+  { CODE_FOR_insn_ldnt4u_miss,          NULL }, /* ldnt4u_miss */
+  { CODE_FOR_insn_lnk,                  NULL }, /* lnk */
+  { CODE_FOR_memory_barrier,            NULL }, /* mf */
+  { CODE_FOR_insn_mfspr,                NULL }, /* mfspr */
+  { CODE_FOR_insn_mm,                   NULL }, /* mm */
+  { CODE_FOR_insn_mnz,                  NULL }, /* mnz */
+  { CODE_FOR_movdi,                     NULL }, /* move */
+  { CODE_FOR_insn_mtspr,                NULL }, /* mtspr */
+  { CODE_FOR_insn_mul_hs_hs,            NULL }, /* mul_hs_hs */
+  { CODE_FOR_insn_mul_hs_hu,            NULL }, /* mul_hs_hu */
+  { CODE_FOR_insn_mul_hs_ls,            NULL }, /* mul_hs_ls */
+  { CODE_FOR_insn_mul_hs_lu,            NULL }, /* mul_hs_lu */
+  { CODE_FOR_insn_mul_hu_hu,            NULL }, /* mul_hu_hu */
+  { CODE_FOR_insn_mul_hu_ls,            NULL }, /* mul_hu_ls */
+  { CODE_FOR_insn_mul_hu_lu,            NULL }, /* mul_hu_lu */
+  { CODE_FOR_insn_mul_ls_ls,            NULL }, /* mul_ls_ls */
+  { CODE_FOR_insn_mul_ls_lu,            NULL }, /* mul_ls_lu */
+  { CODE_FOR_insn_mul_lu_lu,            NULL }, /* mul_lu_lu */
+  { CODE_FOR_insn_mula_hs_hs,           NULL }, /* mula_hs_hs */
+  { CODE_FOR_insn_mula_hs_hu,           NULL }, /* mula_hs_hu */
+  { CODE_FOR_insn_mula_hs_ls,           NULL }, /* mula_hs_ls */
+  { CODE_FOR_insn_mula_hs_lu,           NULL }, /* mula_hs_lu */
+  { CODE_FOR_insn_mula_hu_hu,           NULL }, /* mula_hu_hu */
+  { CODE_FOR_insn_mula_hu_ls,           NULL }, /* mula_hu_ls */
+  { CODE_FOR_insn_mula_hu_lu,           NULL }, /* mula_hu_lu */
+  { CODE_FOR_insn_mula_ls_ls,           NULL }, /* mula_ls_ls */
+  { CODE_FOR_insn_mula_ls_lu,           NULL }, /* mula_ls_lu */
+  { CODE_FOR_insn_mula_lu_lu,           NULL }, /* mula_lu_lu */
+  { CODE_FOR_insn_mulax,                NULL }, /* mulax */
+  { CODE_FOR_mulsi3,                    NULL }, /* mulx */
+  { CODE_FOR_insn_mz,                   NULL }, /* mz */
+  { CODE_FOR_insn_nap,                  NULL }, /* nap */
+  { CODE_FOR_nop,                       NULL }, /* nop */
+  { CODE_FOR_insn_nor_di,               NULL }, /* nor */
+  { CODE_FOR_iordi3,                    NULL }, /* or */
+  { CODE_FOR_popcountdi2,               NULL }, /* pcnt */
+  { CODE_FOR_insn_prefetch_l1,          NULL }, /* prefetch_l1 */
+  { CODE_FOR_insn_prefetch_l1_fault,    NULL }, /* prefetch_l1_fault */
+  { CODE_FOR_insn_prefetch_l2,          NULL }, /* prefetch_l2 */
+  { CODE_FOR_insn_prefetch_l2_fault,    NULL }, /* prefetch_l2_fault */
+  { CODE_FOR_insn_prefetch_l3,          NULL }, /* prefetch_l3 */
+  { CODE_FOR_insn_prefetch_l3_fault,    NULL }, /* prefetch_l3_fault */
+  { CODE_FOR_insn_revbits,              NULL }, /* revbits */
+  { CODE_FOR_bswapdi2,                  NULL }, /* revbytes */
+  { CODE_FOR_rotldi3,                   NULL }, /* rotl */
+  { CODE_FOR_ashldi3,                   NULL }, /* shl */
+  { CODE_FOR_insn_shl16insli,           NULL }, /* shl16insli */
+  { CODE_FOR_insn_shl1add,              NULL }, /* shl1add */
+  { CODE_FOR_insn_shl1addx,             NULL }, /* shl1addx */
+  { CODE_FOR_insn_shl2add,              NULL }, /* shl2add */
+  { CODE_FOR_insn_shl2addx,             NULL }, /* shl2addx */
+  { CODE_FOR_insn_shl3add,              NULL }, /* shl3add */
+  { CODE_FOR_insn_shl3addx,             NULL }, /* shl3addx */
+  { CODE_FOR_ashlsi3,                   NULL }, /* shlx */
+  { CODE_FOR_ashrdi3,                   NULL }, /* shrs */
+  { CODE_FOR_lshrdi3,                   NULL }, /* shru */
+  { CODE_FOR_lshrsi3,                   NULL }, /* shrux */
+  { CODE_FOR_insn_shufflebytes,         NULL }, /* shufflebytes */
+  { CODE_FOR_insn_st,                   NULL }, /* st */
+  { CODE_FOR_insn_st1,                  NULL }, /* st1 */
+  { CODE_FOR_insn_st2,                  NULL }, /* st2 */
+  { CODE_FOR_insn_st4,                  NULL }, /* st4 */
+  { CODE_FOR_insn_stnt,                 NULL }, /* stnt */
+  { CODE_FOR_insn_stnt1,                NULL }, /* stnt1 */
+  { CODE_FOR_insn_stnt2,                NULL }, /* stnt2 */
+  { CODE_FOR_insn_stnt4,                NULL }, /* stnt4 */
+  { CODE_FOR_subdi3,                    NULL }, /* sub */
+  { CODE_FOR_subsi3,                    NULL }, /* subx */
+  { CODE_FOR_sssubsi3,                  NULL }, /* subxsc */
+  { CODE_FOR_insn_tblidxb0,             NULL }, /* tblidxb0 */
+  { CODE_FOR_insn_tblidxb1,             NULL }, /* tblidxb1 */
+  { CODE_FOR_insn_tblidxb2,             NULL }, /* tblidxb2 */
+  { CODE_FOR_insn_tblidxb3,             NULL }, /* tblidxb3 */
+  { CODE_FOR_insn_v1add,                NULL }, /* v1add */
+  { CODE_FOR_insn_v1addi,               NULL }, /* v1addi */
+  { CODE_FOR_insn_v1adduc,              NULL }, /* v1adduc */
+  { CODE_FOR_insn_v1adiffu,             NULL }, /* v1adiffu */
+  { CODE_FOR_insn_v1avgu,               NULL }, /* v1avgu */
+  { CODE_FOR_insn_v1cmpeq,              NULL }, /* v1cmpeq */
+  { CODE_FOR_insn_v1cmpeqi,             NULL }, /* v1cmpeqi */
+  { CODE_FOR_insn_v1cmples,             NULL }, /* v1cmples */
+  { CODE_FOR_insn_v1cmpleu,             NULL }, /* v1cmpleu */
+  { CODE_FOR_insn_v1cmplts,             NULL }, /* v1cmplts */
+  { CODE_FOR_insn_v1cmpltsi,            NULL }, /* v1cmpltsi */
+  { CODE_FOR_insn_v1cmpltu,             NULL }, /* v1cmpltu */
+  { CODE_FOR_insn_v1cmpltui,            NULL }, /* v1cmpltui */
+  { CODE_FOR_insn_v1cmpne,              NULL }, /* v1cmpne */
+  { CODE_FOR_insn_v1ddotpu,             NULL }, /* v1ddotpu */
+  { CODE_FOR_insn_v1ddotpua,            NULL }, /* v1ddotpua */
+  { CODE_FOR_insn_v1ddotpus,            NULL }, /* v1ddotpus */
+  { CODE_FOR_insn_v1ddotpusa,           NULL }, /* v1ddotpusa */
+  { CODE_FOR_insn_v1dotp,               NULL }, /* v1dotp */
+  { CODE_FOR_insn_v1dotpa,              NULL }, /* v1dotpa */
+  { CODE_FOR_insn_v1dotpu,              NULL }, /* v1dotpu */
+  { CODE_FOR_insn_v1dotpua,             NULL }, /* v1dotpua */
+  { CODE_FOR_insn_v1dotpus,             NULL }, /* v1dotpus */
+  { CODE_FOR_insn_v1dotpusa,            NULL }, /* v1dotpusa */
+  { CODE_FOR_insn_v1int_h,              NULL }, /* v1int_h */
+  { CODE_FOR_insn_v1int_l,              NULL }, /* v1int_l */
+  { CODE_FOR_insn_v1maxu,               NULL }, /* v1maxu */
+  { CODE_FOR_insn_v1maxui,              NULL }, /* v1maxui */
+  { CODE_FOR_insn_v1minu,               NULL }, /* v1minu */
+  { CODE_FOR_insn_v1minui,              NULL }, /* v1minui */
+  { CODE_FOR_insn_v1mnz,                NULL }, /* v1mnz */
+  { CODE_FOR_insn_v1multu,              NULL }, /* v1multu */
+  { CODE_FOR_insn_v1mulu,               NULL }, /* v1mulu */
+  { CODE_FOR_insn_v1mulus,              NULL }, /* v1mulus */
+  { CODE_FOR_insn_v1mz,                 NULL }, /* v1mz */
+  { CODE_FOR_insn_v1sadau,              NULL }, /* v1sadau */
+  { CODE_FOR_insn_v1sadu,               NULL }, /* v1sadu */
+  { CODE_FOR_insn_v1shl,                NULL }, /* v1shl */
+  { CODE_FOR_insn_v1shl,                NULL }, /* v1shli */
+  { CODE_FOR_insn_v1shrs,               NULL }, /* v1shrs */
+  { CODE_FOR_insn_v1shrs,               NULL }, /* v1shrsi */
+  { CODE_FOR_insn_v1shru,               NULL }, /* v1shru */
+  { CODE_FOR_insn_v1shru,               NULL }, /* v1shrui */
+  { CODE_FOR_insn_v1sub,                NULL }, /* v1sub */
+  { CODE_FOR_insn_v1subuc,              NULL }, /* v1subuc */
+  { CODE_FOR_insn_v2add,                NULL }, /* v2add */
+  { CODE_FOR_insn_v2addi,               NULL }, /* v2addi */
+  { CODE_FOR_insn_v2addsc,              NULL }, /* v2addsc */
+  { CODE_FOR_insn_v2adiffs,             NULL }, /* v2adiffs */
+  { CODE_FOR_insn_v2avgs,               NULL }, /* v2avgs */
+  { CODE_FOR_insn_v2cmpeq,              NULL }, /* v2cmpeq */
+  { CODE_FOR_insn_v2cmpeqi,             NULL }, /* v2cmpeqi */
+  { CODE_FOR_insn_v2cmples,             NULL }, /* v2cmples */
+  { CODE_FOR_insn_v2cmpleu,             NULL }, /* v2cmpleu */
+  { CODE_FOR_insn_v2cmplts,             NULL }, /* v2cmplts */
+  { CODE_FOR_insn_v2cmpltsi,            NULL }, /* v2cmpltsi */
+  { CODE_FOR_insn_v2cmpltu,             NULL }, /* v2cmpltu */
+  { CODE_FOR_insn_v2cmpltui,            NULL }, /* v2cmpltui */
+  { CODE_FOR_insn_v2cmpne,              NULL }, /* v2cmpne */
+  { CODE_FOR_insn_v2dotp,               NULL }, /* v2dotp */
+  { CODE_FOR_insn_v2dotpa,              NULL }, /* v2dotpa */
+  { CODE_FOR_insn_v2int_h,              NULL }, /* v2int_h */
+  { CODE_FOR_insn_v2int_l,              NULL }, /* v2int_l */
+  { CODE_FOR_insn_v2maxs,               NULL }, /* v2maxs */
+  { CODE_FOR_insn_v2maxsi,              NULL }, /* v2maxsi */
+  { CODE_FOR_insn_v2mins,               NULL }, /* v2mins */
+  { CODE_FOR_insn_v2minsi,              NULL }, /* v2minsi */
+  { CODE_FOR_insn_v2mnz,                NULL }, /* v2mnz */
+  { CODE_FOR_insn_v2mulfsc,             NULL }, /* v2mulfsc */
+  { CODE_FOR_insn_v2muls,               NULL }, /* v2muls */
+  { CODE_FOR_insn_v2mults,              NULL }, /* v2mults */
+  { CODE_FOR_insn_v2mz,                 NULL }, /* v2mz */
+  { CODE_FOR_insn_v2packh,              NULL }, /* v2packh */
+  { CODE_FOR_insn_v2packl,              NULL }, /* v2packl */
+  { CODE_FOR_insn_v2packuc,             NULL }, /* v2packuc */
+  { CODE_FOR_insn_v2sadas,              NULL }, /* v2sadas */
+  { CODE_FOR_insn_v2sadau,              NULL }, /* v2sadau */
+  { CODE_FOR_insn_v2sads,               NULL }, /* v2sads */
+  { CODE_FOR_insn_v2sadu,               NULL }, /* v2sadu */
+  { CODE_FOR_insn_v2shl,                NULL }, /* v2shl */
+  { CODE_FOR_insn_v2shl,                NULL }, /* v2shli */
+  { CODE_FOR_insn_v2shlsc,              NULL }, /* v2shlsc */
+  { CODE_FOR_insn_v2shrs,               NULL }, /* v2shrs */
+  { CODE_FOR_insn_v2shrs,               NULL }, /* v2shrsi */
+  { CODE_FOR_insn_v2shru,               NULL }, /* v2shru */
+  { CODE_FOR_insn_v2shru,               NULL }, /* v2shrui */
+  { CODE_FOR_insn_v2sub,                NULL }, /* v2sub */
+  { CODE_FOR_insn_v2subsc,              NULL }, /* v2subsc */
+  { CODE_FOR_insn_v4add,                NULL }, /* v4add */
+  { CODE_FOR_insn_v4addsc,              NULL }, /* v4addsc */
+  { CODE_FOR_insn_v4int_h,              NULL }, /* v4int_h */
+  { CODE_FOR_insn_v4int_l,              NULL }, /* v4int_l */
+  { CODE_FOR_insn_v4packsc,             NULL }, /* v4packsc */
+  { CODE_FOR_insn_v4shl,                NULL }, /* v4shl */
+  { CODE_FOR_insn_v4shlsc,              NULL }, /* v4shlsc */
+  { CODE_FOR_insn_v4shrs,               NULL }, /* v4shrs */
+  { CODE_FOR_insn_v4shru,               NULL }, /* v4shru */
+  { CODE_FOR_insn_v4sub,                NULL }, /* v4sub */
+  { CODE_FOR_insn_v4subsc,              NULL }, /* v4subsc */
+  { CODE_FOR_insn_wh64,                 NULL }, /* wh64 */
+  { CODE_FOR_xordi3,                    NULL }, /* xor */
+  { CODE_FOR_tilegx_network_barrier,    NULL }, /* network_barrier */
+  { CODE_FOR_tilegx_idn0_receive,       NULL }, /* idn0_receive */
+  { CODE_FOR_tilegx_idn1_receive,       NULL }, /* idn1_receive */
+  { CODE_FOR_tilegx_idn_send,           NULL }, /* idn_send */
+  { CODE_FOR_tilegx_udn0_receive,       NULL }, /* udn0_receive */
+  { CODE_FOR_tilegx_udn1_receive,       NULL }, /* udn1_receive */
+  { CODE_FOR_tilegx_udn2_receive,       NULL }, /* udn2_receive */
+  { CODE_FOR_tilegx_udn3_receive,       NULL }, /* udn3_receive */
+  { CODE_FOR_tilegx_udn_send,           NULL }, /* udn_send */
+};
+
+
+struct tilegx_builtin_def
+{
+  const char *name;
+  enum tilegx_builtin code;
+  bool is_const;
+  /* The first character is the return type.  Subsequent characters
+     are the argument types. See char_to_type.  */
+  const char *type;
+};
+
+
+static const struct tilegx_builtin_def tilegx_builtins[] = {
+  { "__insn_add",                TILEGX_INSN_ADD,                true,  "lll"  },
+  { "__insn_addi",               TILEGX_INSN_ADD,                true,  "lll"  },
+  { "__insn_addli",              TILEGX_INSN_ADD,                true,  "lll"  },
+  { "__insn_addx",               TILEGX_INSN_ADDX,               true,  "iii"  },
+  { "__insn_addxi",              TILEGX_INSN_ADDX,               true,  "iii"  },
+  { "__insn_addxli",             TILEGX_INSN_ADDX,               true,  "iii"  },
+  { "__insn_addxsc",             TILEGX_INSN_ADDXSC,             true,  "iii"  },
+  { "__insn_and",                TILEGX_INSN_AND,                true,  "lll"  },
+  { "__insn_andi",               TILEGX_INSN_AND,                true,  "lll"  },
+  { "__insn_bfexts",             TILEGX_INSN_BFEXTS,             true,  "llll" },
+  { "__insn_bfextu",             TILEGX_INSN_BFEXTU,             true,  "llll" },
+  { "__insn_bfins",              TILEGX_INSN_BFINS,              true,  "lllll"},
+  { "__insn_clz",                TILEGX_INSN_CLZ,                true,  "ll"   },
+  { "__insn_cmoveqz",            TILEGX_INSN_CMOVEQZ,            true,  "llll" },
+  { "__insn_cmovnez",            TILEGX_INSN_CMOVNEZ,            true,  "llll" },
+  { "__insn_cmpeq",              TILEGX_INSN_CMPEQ,              true,  "lll"  },
+  { "__insn_cmpeqi",             TILEGX_INSN_CMPEQ,              true,  "lll"  },
+  { "__insn_cmpexch",            TILEGX_INSN_CMPEXCH,            false, "lpl"  },
+  { "__insn_cmpexch4",           TILEGX_INSN_CMPEXCH4,           false, "ipi"  },
+  { "__insn_cmples",             TILEGX_INSN_CMPLES,             true,  "lll"  },
+  { "__insn_cmpleu",             TILEGX_INSN_CMPLEU,             true,  "lll"  },
+  { "__insn_cmplts",             TILEGX_INSN_CMPLTS,             true,  "lll"  },
+  { "__insn_cmpltsi",            TILEGX_INSN_CMPLTS,             true,  "lll"  },
+  { "__insn_cmpltu",             TILEGX_INSN_CMPLTU,             true,  "lll"  },
+  { "__insn_cmpltui",            TILEGX_INSN_CMPLTU,             true,  "lll"  },
+  { "__insn_cmpne",              TILEGX_INSN_CMPNE,              true,  "lll"  },
+  { "__insn_cmul",               TILEGX_INSN_CMUL,               true,  "lll"  },
+  { "__insn_cmula",              TILEGX_INSN_CMULA,              true,  "llll" },
+  { "__insn_cmulaf",             TILEGX_INSN_CMULAF,             true,  "llll" },
+  { "__insn_cmulf",              TILEGX_INSN_CMULF,              true,  "lll"  },
+  { "__insn_cmulfr",             TILEGX_INSN_CMULFR,             true,  "lll"  },
+  { "__insn_cmulh",              TILEGX_INSN_CMULH,              true,  "lll"  },
+  { "__insn_cmulhr",             TILEGX_INSN_CMULHR,             true,  "lll"  },
+  { "__insn_crc32_32",           TILEGX_INSN_CRC32_32,           true,  "lll"  },
+  { "__insn_crc32_8",            TILEGX_INSN_CRC32_8,            true,  "lll"  },
+  { "__insn_ctz",                TILEGX_INSN_CTZ,                true,  "ll"   },
+  { "__insn_dblalign",           TILEGX_INSN_DBLALIGN,           true,  "lllk" },
+  { "__insn_dblalign2",          TILEGX_INSN_DBLALIGN2,          true,  "lll"  },
+  { "__insn_dblalign4",          TILEGX_INSN_DBLALIGN4,          true,  "lll"  },
+  { "__insn_dblalign6",          TILEGX_INSN_DBLALIGN6,          true,  "lll"  },
+  { "__insn_drain",              TILEGX_INSN_DRAIN,              false, "v"    },
+  { "__insn_dtlbpr",             TILEGX_INSN_DTLBPR,             false, "vl"   },
+  { "__insn_exch",               TILEGX_INSN_EXCH,               false, "lpl"  },
+  { "__insn_exch4",              TILEGX_INSN_EXCH4,              false, "ipi"  },
+  { "__insn_fdouble_add_flags",  TILEGX_INSN_FDOUBLE_ADD_FLAGS,  true,  "lll"  },
+  { "__insn_fdouble_addsub",     TILEGX_INSN_FDOUBLE_ADDSUB,     true,  "llll" },
+  { "__insn_fdouble_mul_flags",  TILEGX_INSN_FDOUBLE_MUL_FLAGS,  true,  "lll"  },
+  { "__insn_fdouble_pack1",      TILEGX_INSN_FDOUBLE_PACK1,      true,  "lll"  },
+  { "__insn_fdouble_pack2",      TILEGX_INSN_FDOUBLE_PACK2,      true,  "llll" },
+  { "__insn_fdouble_sub_flags",  TILEGX_INSN_FDOUBLE_SUB_FLAGS,  true,  "lll"  },
+  { "__insn_fdouble_unpack_max", TILEGX_INSN_FDOUBLE_UNPACK_MAX, true,  "lll"  },
+  { "__insn_fdouble_unpack_min", TILEGX_INSN_FDOUBLE_UNPACK_MIN, true,  "lll"  },
+  { "__insn_fetchadd",           TILEGX_INSN_FETCHADD,           false, "lpl"  },
+  { "__insn_fetchadd4",          TILEGX_INSN_FETCHADD4,          false, "ipi"  },
+  { "__insn_fetchaddgez",        TILEGX_INSN_FETCHADDGEZ,        false, "lpl"  },
+  { "__insn_fetchaddgez4",       TILEGX_INSN_FETCHADDGEZ4,       false, "ipi"  },
+  { "__insn_fetchand",           TILEGX_INSN_FETCHAND,           false, "lpl"  },
+  { "__insn_fetchand4",          TILEGX_INSN_FETCHAND4,          false, "ipi"  },
+  { "__insn_fetchor",            TILEGX_INSN_FETCHOR,            false, "lpl"  },
+  { "__insn_fetchor4",           TILEGX_INSN_FETCHOR4,           false, "ipi"  },
+  { "__insn_finv",               TILEGX_INSN_FINV,               false, "vk"   },
+  { "__insn_flush",              TILEGX_INSN_FLUSH,              false, "vk"   },
+  { "__insn_flushwb",            TILEGX_INSN_FLUSHWB,            false, "v"    },
+  { "__insn_fnop",               TILEGX_INSN_FNOP,               false, "v"    },
+  { "__insn_fsingle_add1",       TILEGX_INSN_FSINGLE_ADD1,       true,  "lll"  },
+  { "__insn_fsingle_addsub2",    TILEGX_INSN_FSINGLE_ADDSUB2,    true,  "llll" },
+  { "__insn_fsingle_mul1",       TILEGX_INSN_FSINGLE_MUL1,       true,  "lll"  },
+  { "__insn_fsingle_mul2",       TILEGX_INSN_FSINGLE_MUL2,       true,  "lll"  },
+  { "__insn_fsingle_pack1",      TILEGX_INSN_FSINGLE_PACK1,      true,  "ll"   },
+  { "__insn_fsingle_pack2",      TILEGX_INSN_FSINGLE_PACK2,      true,  "lll"  },
+  { "__insn_fsingle_sub1",       TILEGX_INSN_FSINGLE_SUB1,       true,  "lll"  },
+  { "__insn_icoh",               TILEGX_INSN_ICOH,               false, "vk"   },
+  { "__insn_ill",                TILEGX_INSN_ILL,                false, "v"    },
+  { "__insn_info",               TILEGX_INSN_INFO,               false, "vl"   },
+  { "__insn_infol",              TILEGX_INSN_INFOL,              false, "vl"   },
+  { "__insn_inv",                TILEGX_INSN_INV,                false, "vp"   },
+  { "__insn_ld",                 TILEGX_INSN_LD,                 false, "lk"   },
+  { "__insn_ld1s",               TILEGX_INSN_LD1S,               false, "lk"   },
+  { "__insn_ld1u",               TILEGX_INSN_LD1U,               false, "lk"   },
+  { "__insn_ld2s",               TILEGX_INSN_LD2S,               false, "lk"   },
+  { "__insn_ld2u",               TILEGX_INSN_LD2U,               false, "lk"   },
+  { "__insn_ld4s",               TILEGX_INSN_LD4S,               false, "lk"   },
+  { "__insn_ld4u",               TILEGX_INSN_LD4U,               false, "lk"   },
+  { "__insn_ldna",               TILEGX_INSN_LDNA,               false, "lk"   },
+  { "__insn_ldnt",               TILEGX_INSN_LDNT,               false, "lk"   },
+  { "__insn_ldnt1s",             TILEGX_INSN_LDNT1S,             false, "lk"   },
+  { "__insn_ldnt1u",             TILEGX_INSN_LDNT1U,             false, "lk"   },
+  { "__insn_ldnt2s",             TILEGX_INSN_LDNT2S,             false, "lk"   },
+  { "__insn_ldnt2u",             TILEGX_INSN_LDNT2U,             false, "lk"   },
+  { "__insn_ldnt4s",             TILEGX_INSN_LDNT4S,             false, "lk"   },
+  { "__insn_ldnt4u",             TILEGX_INSN_LDNT4U,             false, "lk"   },
+  { "__insn_ld_L2",              TILEGX_INSN_LD_L2,              false, "lk"   },
+  { "__insn_ld1s_L2",            TILEGX_INSN_LD1S_L2,            false, "lk"   },
+  { "__insn_ld1u_L2",            TILEGX_INSN_LD1U_L2,            false, "lk"   },
+  { "__insn_ld2s_L2",            TILEGX_INSN_LD2S_L2,            false, "lk"   },
+  { "__insn_ld2u_L2",            TILEGX_INSN_LD2U_L2,            false, "lk"   },
+  { "__insn_ld4s_L2",            TILEGX_INSN_LD4S_L2,            false, "lk"   },
+  { "__insn_ld4u_L2",            TILEGX_INSN_LD4U_L2,            false, "lk"   },
+  { "__insn_ldna_L2",            TILEGX_INSN_LDNA_L2,            false, "lk"   },
+  { "__insn_ldnt_L2",            TILEGX_INSN_LDNT_L2,            false, "lk"   },
+  { "__insn_ldnt1s_L2",          TILEGX_INSN_LDNT1S_L2,          false, "lk"   },
+  { "__insn_ldnt1u_L2",          TILEGX_INSN_LDNT1U_L2,          false, "lk"   },
+  { "__insn_ldnt2s_L2",          TILEGX_INSN_LDNT2S_L2,          false, "lk"   },
+  { "__insn_ldnt2u_L2",          TILEGX_INSN_LDNT2U_L2,          false, "lk"   },
+  { "__insn_ldnt4s_L2",          TILEGX_INSN_LDNT4S_L2,          false, "lk"   },
+  { "__insn_ldnt4u_L2",          TILEGX_INSN_LDNT4U_L2,          false, "lk"   },
+  { "__insn_ld_miss",            TILEGX_INSN_LD_MISS,            false, "lk"   },
+  { "__insn_ld1s_miss",          TILEGX_INSN_LD1S_MISS,          false, "lk"   },
+  { "__insn_ld1u_miss",          TILEGX_INSN_LD1U_MISS,          false, "lk"   },
+  { "__insn_ld2s_miss",          TILEGX_INSN_LD2S_MISS,          false, "lk"   },
+  { "__insn_ld2u_miss",          TILEGX_INSN_LD2U_MISS,          false, "lk"   },
+  { "__insn_ld4s_miss",          TILEGX_INSN_LD4S_MISS,          false, "lk"   },
+  { "__insn_ld4u_miss",          TILEGX_INSN_LD4U_MISS,          false, "lk"   },
+  { "__insn_ldna_miss",          TILEGX_INSN_LDNA_MISS,          false, "lk"   },
+  { "__insn_ldnt_miss",          TILEGX_INSN_LDNT_MISS,          false, "lk"   },
+  { "__insn_ldnt1s_miss",        TILEGX_INSN_LDNT1S_MISS,        false, "lk"   },
+  { "__insn_ldnt1u_miss",        TILEGX_INSN_LDNT1U_MISS,        false, "lk"   },
+  { "__insn_ldnt2s_miss",        TILEGX_INSN_LDNT2S_MISS,        false, "lk"   },
+  { "__insn_ldnt2u_miss",        TILEGX_INSN_LDNT2U_MISS,        false, "lk"   },
+  { "__insn_ldnt4s_miss",        TILEGX_INSN_LDNT4S_MISS,        false, "lk"   },
+  { "__insn_ldnt4u_miss",        TILEGX_INSN_LDNT4U_MISS,        false, "lk"   },
+  { "__insn_lnk",                TILEGX_INSN_LNK,                true,  "l"    },
+  { "__insn_mf",                 TILEGX_INSN_MF,                 false, "v"    },
+  { "__insn_mfspr",              TILEGX_INSN_MFSPR,              false, "ll"   },
+  { "__insn_mm",                 TILEGX_INSN_MM,                 true,  "lllll"},
+  { "__insn_mnz",                TILEGX_INSN_MNZ,                true,  "lll"  },
+  { "__insn_move",               TILEGX_INSN_MOVE,               true,  "ll"   },
+  { "__insn_movei",              TILEGX_INSN_MOVE,               true,  "ll"   },
+  { "__insn_moveli",             TILEGX_INSN_MOVE,               true,  "ll"   },
+  { "__insn_mtspr",              TILEGX_INSN_MTSPR,              false, "vll"  },
+  { "__insn_mul_hs_hs",          TILEGX_INSN_MUL_HS_HS,          true,  "lll"  },
+  { "__insn_mul_hs_hu",          TILEGX_INSN_MUL_HS_HU,          true,  "lll"  },
+  { "__insn_mul_hs_ls",          TILEGX_INSN_MUL_HS_LS,          true,  "lll"  },
+  { "__insn_mul_hs_lu",          TILEGX_INSN_MUL_HS_LU,          true,  "lll"  },
+  { "__insn_mul_hu_hu",          TILEGX_INSN_MUL_HU_HU,          true,  "lll"  },
+  { "__insn_mul_hu_ls",          TILEGX_INSN_MUL_HU_LS,          true,  "lll"  },
+  { "__insn_mul_hu_lu",          TILEGX_INSN_MUL_HU_LU,          true,  "lll"  },
+  { "__insn_mul_ls_ls",          TILEGX_INSN_MUL_LS_LS,          true,  "lll"  },
+  { "__insn_mul_ls_lu",          TILEGX_INSN_MUL_LS_LU,          true,  "lll"  },
+  { "__insn_mul_lu_lu",          TILEGX_INSN_MUL_LU_LU,          true,  "lll"  },
+  { "__insn_mula_hs_hs",         TILEGX_INSN_MULA_HS_HS,         true,  "llll" },
+  { "__insn_mula_hs_hu",         TILEGX_INSN_MULA_HS_HU,         true,  "llll" },
+  { "__insn_mula_hs_ls",         TILEGX_INSN_MULA_HS_LS,         true,  "llll" },
+  { "__insn_mula_hs_lu",         TILEGX_INSN_MULA_HS_LU,         true,  "llll" },
+  { "__insn_mula_hu_hu",         TILEGX_INSN_MULA_HU_HU,         true,  "llll" },
+  { "__insn_mula_hu_ls",         TILEGX_INSN_MULA_HU_LS,         true,  "llll" },
+  { "__insn_mula_hu_lu",         TILEGX_INSN_MULA_HU_LU,         true,  "llll" },
+  { "__insn_mula_ls_ls",         TILEGX_INSN_MULA_LS_LS,         true,  "llll" },
+  { "__insn_mula_ls_lu",         TILEGX_INSN_MULA_LS_LU,         true,  "llll" },
+  { "__insn_mula_lu_lu",         TILEGX_INSN_MULA_LU_LU,         true,  "llll" },
+  { "__insn_mulax",              TILEGX_INSN_MULAX,              true,  "iiii" },
+  { "__insn_mulx",               TILEGX_INSN_MULX,               true,  "iii"  },
+  { "__insn_mz",                 TILEGX_INSN_MZ,                 true,  "lll"  },
+  { "__insn_nap",                TILEGX_INSN_NAP,                false, "v"    },
+  { "__insn_nop",                TILEGX_INSN_NOP,                true,  "v"    },
+  { "__insn_nor",                TILEGX_INSN_NOR,                true,  "lll"  },
+  { "__insn_or",                 TILEGX_INSN_OR,                 true,  "lll"  },
+  { "__insn_ori",                TILEGX_INSN_OR,                 true,  "lll"  },
+  { "__insn_pcnt",               TILEGX_INSN_PCNT,               true,  "ll"   },
+  { "__insn_prefetch",           TILEGX_INSN_PREFETCH_L1,        false, "vk"   },
+  { "__insn_prefetch_l1",        TILEGX_INSN_PREFETCH_L1,        false, "vk"   },
+  { "__insn_prefetch_l1_fault",  TILEGX_INSN_PREFETCH_L1_FAULT,  false, "vk"   },
+  { "__insn_prefetch_l2",        TILEGX_INSN_PREFETCH_L2,        false, "vk"   },
+  { "__insn_prefetch_l2_fault",  TILEGX_INSN_PREFETCH_L2_FAULT,  false, "vk"   },
+  { "__insn_prefetch_l3",        TILEGX_INSN_PREFETCH_L3,        false, "vk"   },
+  { "__insn_prefetch_l3_fault",  TILEGX_INSN_PREFETCH_L3_FAULT,  false, "vk"   },
+  { "__insn_revbits",            TILEGX_INSN_REVBITS,            true,  "ll"   },
+  { "__insn_revbytes",           TILEGX_INSN_REVBYTES,           true,  "ll"   },
+  { "__insn_rotl",               TILEGX_INSN_ROTL,               true,  "lli"  },
+  { "__insn_rotli",              TILEGX_INSN_ROTL,               true,  "lli"  },
+  { "__insn_shl",                TILEGX_INSN_SHL,                true,  "lli"  },
+  { "__insn_shl16insli",         TILEGX_INSN_SHL16INSLI,         true,  "lll"  },
+  { "__insn_shl1add",            TILEGX_INSN_SHL1ADD,            true,  "lll"  },
+  { "__insn_shl1addx",           TILEGX_INSN_SHL1ADDX,           true,  "iii"  },
+  { "__insn_shl2add",            TILEGX_INSN_SHL2ADD,            true,  "lll"  },
+  { "__insn_shl2addx",           TILEGX_INSN_SHL2ADDX,           true,  "iii"  },
+  { "__insn_shl3add",            TILEGX_INSN_SHL3ADD,            true,  "lll"  },
+  { "__insn_shl3addx",           TILEGX_INSN_SHL3ADDX,           true,  "iii"  },
+  { "__insn_shli",               TILEGX_INSN_SHL,                true,  "lli"  },
+  { "__insn_shlx",               TILEGX_INSN_SHLX,               true,  "iii"  },
+  { "__insn_shlxi",              TILEGX_INSN_SHLX,               true,  "iii"  },
+  { "__insn_shrs",               TILEGX_INSN_SHRS,               true,  "lli"  },
+  { "__insn_shrsi",              TILEGX_INSN_SHRS,               true,  "lli"  },
+  { "__insn_shru",               TILEGX_INSN_SHRU,               true,  "lli"  },
+  { "__insn_shrui",              TILEGX_INSN_SHRU,               true,  "lli"  },
+  { "__insn_shrux",              TILEGX_INSN_SHRUX,              true,  "iii"  },
+  { "__insn_shruxi",             TILEGX_INSN_SHRUX,              true,  "iii"  },
+  { "__insn_shufflebytes",       TILEGX_INSN_SHUFFLEBYTES,       true,  "llll" },
+  { "__insn_st",                 TILEGX_INSN_ST,                 false, "vpl"  },
+  { "__insn_st1",                TILEGX_INSN_ST1,                false, "vpl"  },
+  { "__insn_st2",                TILEGX_INSN_ST2,                false, "vpl"  },
+  { "__insn_st4",                TILEGX_INSN_ST4,                false, "vpl"  },
+  { "__insn_stnt",               TILEGX_INSN_STNT,               false, "vpl"  },
+  { "__insn_stnt1",              TILEGX_INSN_STNT1,              false, "vpl"  },
+  { "__insn_stnt2",              TILEGX_INSN_STNT2,              false, "vpl"  },
+  { "__insn_stnt4",              TILEGX_INSN_STNT4,              false, "vpl"  },
+  { "__insn_sub",                TILEGX_INSN_SUB,                true,  "lll"  },
+  { "__insn_subx",               TILEGX_INSN_SUBX,               true,  "iii"  },
+  { "__insn_subxsc",             TILEGX_INSN_SUBXSC,             true,  "iii"  },
+  { "__insn_tblidxb0",           TILEGX_INSN_TBLIDXB0,           true,  "lll"  },
+  { "__insn_tblidxb1",           TILEGX_INSN_TBLIDXB1,           true,  "lll"  },
+  { "__insn_tblidxb2",           TILEGX_INSN_TBLIDXB2,           true,  "lll"  },
+  { "__insn_tblidxb3",           TILEGX_INSN_TBLIDXB3,           true,  "lll"  },
+  { "__insn_v1add",              TILEGX_INSN_V1ADD,              true,  "lll"  },
+  { "__insn_v1addi",             TILEGX_INSN_V1ADDI,             true,  "lll"  },
+  { "__insn_v1adduc",            TILEGX_INSN_V1ADDUC,            true,  "lll"  },
+  { "__insn_v1adiffu",           TILEGX_INSN_V1ADIFFU,           true,  "lll"  },
+  { "__insn_v1avgu",             TILEGX_INSN_V1AVGU,             true,  "lll"  },
+  { "__insn_v1cmpeq",            TILEGX_INSN_V1CMPEQ,            true,  "lll"  },
+  { "__insn_v1cmpeqi",           TILEGX_INSN_V1CMPEQI,           true,  "lll"  },
+  { "__insn_v1cmples",           TILEGX_INSN_V1CMPLES,           true,  "lll"  },
+  { "__insn_v1cmpleu",           TILEGX_INSN_V1CMPLEU,           true,  "lll"  },
+  { "__insn_v1cmplts",           TILEGX_INSN_V1CMPLTS,           true,  "lll"  },
+  { "__insn_v1cmpltsi",          TILEGX_INSN_V1CMPLTSI,          true,  "lll"  },
+  { "__insn_v1cmpltu",           TILEGX_INSN_V1CMPLTU,           true,  "lll"  },
+  { "__insn_v1cmpltui",          TILEGX_INSN_V1CMPLTUI,          true,  "lll"  },
+  { "__insn_v1cmpne",            TILEGX_INSN_V1CMPNE,            true,  "lll"  },
+  { "__insn_v1ddotpu",           TILEGX_INSN_V1DDOTPU,           true,  "lll"  },
+  { "__insn_v1ddotpua",          TILEGX_INSN_V1DDOTPUA,          true,  "llll" },
+  { "__insn_v1ddotpus",          TILEGX_INSN_V1DDOTPUS,          true,  "lll"  },
+  { "__insn_v1ddotpusa",         TILEGX_INSN_V1DDOTPUSA,         true,  "llll" },
+  { "__insn_v1dotp",             TILEGX_INSN_V1DOTP,             true,  "lll"  },
+  { "__insn_v1dotpa",            TILEGX_INSN_V1DOTPA,            true,  "llll" },
+  { "__insn_v1dotpu",            TILEGX_INSN_V1DOTPU,            true,  "lll"  },
+  { "__insn_v1dotpua",           TILEGX_INSN_V1DOTPUA,           true,  "llll" },
+  { "__insn_v1dotpus",           TILEGX_INSN_V1DOTPUS,           true,  "lll"  },
+  { "__insn_v1dotpusa",          TILEGX_INSN_V1DOTPUSA,          true,  "llll" },
+  { "__insn_v1int_h",            TILEGX_INSN_V1INT_H,            true,  "lll"  },
+  { "__insn_v1int_l",            TILEGX_INSN_V1INT_L,            true,  "lll"  },
+  { "__insn_v1maxu",             TILEGX_INSN_V1MAXU,             true,  "lll"  },
+  { "__insn_v1maxui",            TILEGX_INSN_V1MAXUI,            true,  "lll"  },
+  { "__insn_v1minu",             TILEGX_INSN_V1MINU,             true,  "lll"  },
+  { "__insn_v1minui",            TILEGX_INSN_V1MINUI,            true,  "lll"  },
+  { "__insn_v1mnz",              TILEGX_INSN_V1MNZ,              true,  "lll"  },
+  { "__insn_v1multu",            TILEGX_INSN_V1MULTU,            true,  "lll"  },
+  { "__insn_v1mulu",             TILEGX_INSN_V1MULU,             true,  "lll"  },
+  { "__insn_v1mulus",            TILEGX_INSN_V1MULUS,            true,  "lll"  },
+  { "__insn_v1mz",               TILEGX_INSN_V1MZ,               true,  "lll"  },
+  { "__insn_v1sadau",            TILEGX_INSN_V1SADAU,            true,  "llll" },
+  { "__insn_v1sadu",             TILEGX_INSN_V1SADU,             true,  "lll"  },
+  { "__insn_v1shl",              TILEGX_INSN_V1SHL,              true,  "lll"  },
+  { "__insn_v1shli",             TILEGX_INSN_V1SHLI,             true,  "lll"  },
+  { "__insn_v1shrs",             TILEGX_INSN_V1SHRS,             true,  "lll"  },
+  { "__insn_v1shrsi",            TILEGX_INSN_V1SHRSI,            true,  "lll"  },
+  { "__insn_v1shru",             TILEGX_INSN_V1SHRU,             true,  "lll"  },
+  { "__insn_v1shrui",            TILEGX_INSN_V1SHRUI,            true,  "lll"  },
+  { "__insn_v1sub",              TILEGX_INSN_V1SUB,              true,  "lll"  },
+  { "__insn_v1subuc",            TILEGX_INSN_V1SUBUC,            true,  "lll"  },
+  { "__insn_v2add",              TILEGX_INSN_V2ADD,              true,  "lll"  },
+  { "__insn_v2addi",             TILEGX_INSN_V2ADDI,             true,  "lll"  },
+  { "__insn_v2addsc",            TILEGX_INSN_V2ADDSC,            true,  "lll"  },
+  { "__insn_v2adiffs",           TILEGX_INSN_V2ADIFFS,           true,  "lll"  },
+  { "__insn_v2avgs",             TILEGX_INSN_V2AVGS,             true,  "lll"  },
+  { "__insn_v2cmpeq",            TILEGX_INSN_V2CMPEQ,            true,  "lll"  },
+  { "__insn_v2cmpeqi",           TILEGX_INSN_V2CMPEQI,           true,  "lll"  },
+  { "__insn_v2cmples",           TILEGX_INSN_V2CMPLES,           true,  "lll"  },
+  { "__insn_v2cmpleu",           TILEGX_INSN_V2CMPLEU,           true,  "lll"  },
+  { "__insn_v2cmplts",           TILEGX_INSN_V2CMPLTS,           true,  "lll"  },
+  { "__insn_v2cmpltsi",          TILEGX_INSN_V2CMPLTSI,          true,  "lll"  },
+  { "__insn_v2cmpltu",           TILEGX_INSN_V2CMPLTU,           true,  "lll"  },
+  { "__insn_v2cmpltui",          TILEGX_INSN_V2CMPLTUI,          true,  "lll"  },
+  { "__insn_v2cmpne",            TILEGX_INSN_V2CMPNE,            true,  "lll"  },
+  { "__insn_v2dotp",             TILEGX_INSN_V2DOTP,             true,  "lll"  },
+  { "__insn_v2dotpa",            TILEGX_INSN_V2DOTPA,            true,  "llll" },
+  { "__insn_v2int_h",            TILEGX_INSN_V2INT_H,            true,  "lll"  },
+  { "__insn_v2int_l",            TILEGX_INSN_V2INT_L,            true,  "lll"  },
+  { "__insn_v2maxs",             TILEGX_INSN_V2MAXS,             true,  "lll"  },
+  { "__insn_v2maxsi",            TILEGX_INSN_V2MAXSI,            true,  "lll"  },
+  { "__insn_v2mins",             TILEGX_INSN_V2MINS,             true,  "lll"  },
+  { "__insn_v2minsi",            TILEGX_INSN_V2MINSI,            true,  "lll"  },
+  { "__insn_v2mnz",              TILEGX_INSN_V2MNZ,              true,  "lll"  },
+  { "__insn_v2mulfsc",           TILEGX_INSN_V2MULFSC,           true,  "lll"  },
+  { "__insn_v2muls",             TILEGX_INSN_V2MULS,             true,  "lll"  },
+  { "__insn_v2mults",            TILEGX_INSN_V2MULTS,            true,  "lll"  },
+  { "__insn_v2mz",               TILEGX_INSN_V2MZ,               true,  "lll"  },
+  { "__insn_v2packh",            TILEGX_INSN_V2PACKH,            true,  "lll"  },
+  { "__insn_v2packl",            TILEGX_INSN_V2PACKL,            true,  "lll"  },
+  { "__insn_v2packuc",           TILEGX_INSN_V2PACKUC,           true,  "lll"  },
+  { "__insn_v2sadas",            TILEGX_INSN_V2SADAS,            true,  "llll" },
+  { "__insn_v2sadau",            TILEGX_INSN_V2SADAU,            true,  "llll" },
+  { "__insn_v2sads",             TILEGX_INSN_V2SADS,             true,  "lll"  },
+  { "__insn_v2sadu",             TILEGX_INSN_V2SADU,             true,  "lll"  },
+  { "__insn_v2shl",              TILEGX_INSN_V2SHL,              true,  "lll"  },
+  { "__insn_v2shli",             TILEGX_INSN_V2SHLI,             true,  "lll"  },
+  { "__insn_v2shlsc",            TILEGX_INSN_V2SHLSC,            true,  "lll"  },
+  { "__insn_v2shrs",             TILEGX_INSN_V2SHRS,             true,  "lll"  },
+  { "__insn_v2shrsi",            TILEGX_INSN_V2SHRSI,            true,  "lll"  },
+  { "__insn_v2shru",             TILEGX_INSN_V2SHRU,             true,  "lll"  },
+  { "__insn_v2shrui",            TILEGX_INSN_V2SHRUI,            true,  "lll"  },
+  { "__insn_v2sub",              TILEGX_INSN_V2SUB,              true,  "lll"  },
+  { "__insn_v2subsc",            TILEGX_INSN_V2SUBSC,            true,  "lll"  },
+  { "__insn_v4add",              TILEGX_INSN_V4ADD,              true,  "lll"  },
+  { "__insn_v4addsc",            TILEGX_INSN_V4ADDSC,            true,  "lll"  },
+  { "__insn_v4int_h",            TILEGX_INSN_V4INT_H,            true,  "lll"  },
+  { "__insn_v4int_l",            TILEGX_INSN_V4INT_L,            true,  "lll"  },
+  { "__insn_v4packsc",           TILEGX_INSN_V4PACKSC,           true,  "lll"  },
+  { "__insn_v4shl",              TILEGX_INSN_V4SHL,              true,  "lll"  },
+  { "__insn_v4shlsc",            TILEGX_INSN_V4SHLSC,            true,  "lll"  },
+  { "__insn_v4shrs",             TILEGX_INSN_V4SHRS,             true,  "lll"  },
+  { "__insn_v4shru",             TILEGX_INSN_V4SHRU,             true,  "lll"  },
+  { "__insn_v4sub",              TILEGX_INSN_V4SUB,              true,  "lll"  },
+  { "__insn_v4subsc",            TILEGX_INSN_V4SUBSC,            true,  "lll"  },
+  { "__insn_wh64",               TILEGX_INSN_WH64,               false, "vp"   },
+  { "__insn_xor",                TILEGX_INSN_XOR,                true,  "lll"  },
+  { "__insn_xori",               TILEGX_INSN_XOR,                true,  "lll"  },
+  { "__tile_network_barrier",    TILEGX_NETWORK_BARRIER,         false, "v"    },
+  { "__tile_idn0_receive",       TILEGX_IDN0_RECEIVE,            false, "l"    },
+  { "__tile_idn1_receive",       TILEGX_IDN1_RECEIVE,            false, "l"    },
+  { "__tile_idn_send",           TILEGX_IDN_SEND,                false, "vl"   },
+  { "__tile_udn0_receive",       TILEGX_UDN0_RECEIVE,            false, "l"    },
+  { "__tile_udn1_receive",       TILEGX_UDN1_RECEIVE,            false, "l"    },
+  { "__tile_udn2_receive",       TILEGX_UDN2_RECEIVE,            false, "l"    },
+  { "__tile_udn3_receive",       TILEGX_UDN3_RECEIVE,            false, "l"    },
+  { "__tile_udn_send",           TILEGX_UDN_SEND,                false, "vl"   },
+};
+
+
+/* Convert a character in a builtin type string to a tree type.  */
+static tree
+char_to_type (char c)
+{
+  static tree volatile_ptr_type_node = NULL;
+  static tree volatile_const_ptr_type_node = NULL;
+
+  if (volatile_ptr_type_node == NULL)
+    {
+      volatile_ptr_type_node =
+       build_pointer_type (build_qualified_type (void_type_node,
+                                                 TYPE_QUAL_VOLATILE));
+      volatile_const_ptr_type_node =
+       build_pointer_type (build_qualified_type (void_type_node,
+                                                 TYPE_QUAL_CONST
+                                                 | TYPE_QUAL_VOLATILE));
+    }
+
+  switch (c)
+    {
+    case 'v':
+      return void_type_node;
+    case 'i':
+      return unsigned_type_node;
+    case 'l':
+      return long_long_unsigned_type_node;
+    case 'p':
+      return volatile_ptr_type_node;
+    case 'k':
+      return volatile_const_ptr_type_node;
+    default:
+      gcc_unreachable ();
+    }
+}
+
+
+/* Implement TARGET_INIT_BUILTINS.  */
+static void
+tilegx_init_builtins (void)
+{
+  size_t i;
+
+  for (i = 0; i < ARRAY_SIZE (tilegx_builtins); i++)
+    {
+      const struct tilegx_builtin_def *p = &tilegx_builtins[i];
+      tree ftype, ret_type, arg_type_list = void_list_node;
+      tree decl;
+      int j;
+
+      for (j = strlen (p->type) - 1; j > 0; j--)
+       {
+         arg_type_list =
+           tree_cons (NULL_TREE, char_to_type (p->type[j]), arg_type_list);
+       }
+
+      ret_type = char_to_type (p->type[0]);
+
+      ftype = build_function_type (ret_type, arg_type_list);
+
+      decl = add_builtin_function (p->name, ftype, p->code, BUILT_IN_MD,
+                                  NULL, NULL);
+
+      if (p->is_const)
+       TREE_READONLY (decl) = 1;
+      TREE_NOTHROW (decl) = 1;
+
+      if (tilegx_builtin_info[p->code].fndecl == NULL)
+       tilegx_builtin_info[p->code].fndecl = decl;
+    }
+}
+
+
+/* Implement TARGET_EXPAND_BUILTIN.  */
+static rtx
+tilegx_expand_builtin (tree exp,
+                      rtx target,
+                      rtx subtarget ATTRIBUTE_UNUSED,
+                      enum machine_mode mode ATTRIBUTE_UNUSED,
+                      int ignore ATTRIBUTE_UNUSED)
+{
+#define MAX_BUILTIN_ARGS 4
+
+  tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
+  unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
+  tree arg;
+  call_expr_arg_iterator iter;
+  enum insn_code icode;
+  rtx op[MAX_BUILTIN_ARGS + 1], pat;
+  int opnum;
+  bool nonvoid;
+  insn_gen_fn fn;
+
+  if (fcode >= TILEGX_BUILTIN_max)
+    internal_error ("bad builtin fcode");
+  icode = tilegx_builtin_info[fcode].icode;
+  if (icode == 0)
+    internal_error ("bad builtin icode");
+
+  nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
+
+  opnum = nonvoid;
+  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
+  {
+    const struct insn_operand_data *insn_op;
+
+    if (arg == error_mark_node)
+      return NULL_RTX;
+    if (opnum > MAX_BUILTIN_ARGS)
+      return NULL_RTX;
+
+    insn_op = &insn_data[icode].operand[opnum];
+
+    op[opnum] = expand_expr (arg, NULL_RTX, insn_op->mode, EXPAND_NORMAL);
+
+    if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
+      {
+       enum machine_mode opmode = insn_op->mode;
+
+       /* pointer_operand and pmode_register_operand operands do
+          not specify a mode, so use the operand's mode instead
+          (which should always be right by the time we get here,
+          except for constants, which are VOIDmode).  */
+       if (opmode == VOIDmode)
+         {
+           enum machine_mode m = GET_MODE (op[opnum]);
+           gcc_assert (m == Pmode || m == VOIDmode);
+           opmode = Pmode;
+         }
+
+       op[opnum] = copy_to_mode_reg (opmode, op[opnum]);
+      }
+
+    if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
+      {
+       /* We still failed to meet the predicate even after moving
+          into a register. Assume we needed an immediate.  */
+       error_at (EXPR_LOCATION (exp),
+                 "operand must be an immediate of the right size");
+       return const0_rtx;
+      }
+
+    opnum++;
+  }
+
+  if (nonvoid)
+    {
+      enum machine_mode tmode = insn_data[icode].operand[0].mode;
+      if (!target
+         || GET_MODE (target) != tmode
+         || !(*insn_data[icode].operand[0].predicate) (target, tmode))
+       {
+         if (tmode == VOIDmode)
+           {
+             /* get the mode from the return type.  */
+             tmode = TYPE_MODE (TREE_TYPE (TREE_TYPE (fndecl)));
+           }
+         target = gen_reg_rtx (tmode);
+       }
+      op[0] = target;
+    }
+
+  fn = GEN_FCN (icode);
+  switch (opnum)
+    {
+    case 0:
+      pat = fn (NULL_RTX);
+      break;
+    case 1:
+      pat = fn (op[0]);
+      break;
+    case 2:
+      pat = fn (op[0], op[1]);
+      break;
+    case 3:
+      pat = fn (op[0], op[1], op[2]);
+      break;
+    case 4:
+      pat = fn (op[0], op[1], op[2], op[3]);
+      break;
+    case 5:
+      pat = fn (op[0], op[1], op[2], op[3], op[4]);
+      break;
+    default:
+      gcc_unreachable ();
+    }
+  if (!pat)
+    return NULL_RTX;
+  emit_insn (pat);
+
+  if (nonvoid)
+    return target;
+  else
+    return const0_rtx;
+}
+
+
+/* Implement TARGET_BUILTIN_DECL.  */
+static tree
+tilegx_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
+{
+  if (code >= TILEGX_BUILTIN_max)
+    return error_mark_node;
+
+  return tilegx_builtin_info[code].fndecl;
+}
+\f
+
+
+/* Stack frames  */
+
+/* Return whether REGNO needs to be saved in the stack frame.  */
+static bool
+need_to_save_reg (unsigned int regno)
+{
+  if (!fixed_regs[regno] && !call_used_regs[regno]
+      && df_regs_ever_live_p (regno))
+    return true;
+
+  if (flag_pic
+      && (regno == PIC_OFFSET_TABLE_REGNUM
+         || regno == TILEGX_PIC_TEXT_LABEL_REGNUM)
+      && (crtl->uses_pic_offset_table || crtl->saves_all_registers))
+    return true;
+
+  if (crtl->calls_eh_return)
+    {
+      unsigned i;
+      for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; i++)
+       {
+         if (regno == EH_RETURN_DATA_REGNO (i))
+           return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Return the size of the register savev area.  This function is only
+   correct starting with local register allocation */
+static int
+tilegx_saved_regs_size (void)
+{
+  int reg_save_size = 0;
+  int regno;
+  int offset_to_frame;
+  int align_mask;
+
+  for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+    if (need_to_save_reg (regno))
+      reg_save_size += UNITS_PER_WORD;
+
+  /* Pad out the register save area if necessary to make
+     frame_pointer_rtx be as aligned as the stack pointer.  */
+  offset_to_frame = crtl->args.pretend_args_size + reg_save_size;
+  align_mask = (STACK_BOUNDARY / BITS_PER_UNIT) - 1;
+  reg_save_size += (-offset_to_frame) & align_mask;
+
+  return reg_save_size;
+}
+
+
+/* Round up frame size SIZE.  */
+static int
+round_frame_size (int size)
+{
+  return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
+         & -STACK_BOUNDARY / BITS_PER_UNIT);
+}
+
+
+/* Emit a store in the stack frame to save REGNO at address ADDR, and
+   emit the corresponding REG_CFA_OFFSET note described by CFA and
+   CFA_OFFSET.  Return the emitted insn.  */
+static rtx
+frame_emit_store (int regno, int regno_note, rtx addr, rtx cfa,
+                 int cfa_offset)
+{
+  rtx reg = gen_rtx_REG (DImode, regno);
+  rtx mem = gen_frame_mem (DImode, addr);
+  rtx mov = gen_movdi (mem, reg);
+
+  /* Describe what just happened in a way that dwarf understands.  We
+     use temporary registers to hold the address to make scheduling
+     easier, and use the REG_CFA_OFFSET to describe the address as an
+     offset from the CFA.  */
+  rtx reg_note = gen_rtx_REG (DImode, regno_note);
+  rtx cfa_relative_addr = gen_rtx_PLUS (Pmode, cfa, GEN_INT (cfa_offset));
+  rtx cfa_relative_mem = gen_frame_mem (DImode, cfa_relative_addr);
+  rtx real = gen_rtx_SET (VOIDmode, cfa_relative_mem, reg_note);
+  add_reg_note (mov, REG_CFA_OFFSET, real);
+
+  return emit_insn (mov);
+}
+
+
+/* Emit a load in the stack frame to load REGNO from address ADDR.
+   Add a REG_CFA_RESTORE note to CFA_RESTORES if CFA_RESTORES is
+   non-null.  Return the emitted insn.  */
+static rtx
+frame_emit_load (int regno, rtx addr, rtx *cfa_restores)
+{
+  rtx reg = gen_rtx_REG (DImode, regno);
+  rtx mem = gen_frame_mem (DImode, addr);
+  if (cfa_restores)
+    *cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, *cfa_restores);
+  return emit_insn (gen_movdi (reg, mem));
+}
+
+
+/* Helper function to set RTX_FRAME_RELATED_P on instructions,
+   including sequences.  */
+static rtx
+set_frame_related_p (void)
+{
+  rtx seq = get_insns ();
+  rtx insn;
+
+  end_sequence ();
+
+  if (!seq)
+    return NULL_RTX;
+
+  if (INSN_P (seq))
+    {
+      insn = seq;
+      while (insn != NULL_RTX)
+       {
+         RTX_FRAME_RELATED_P (insn) = 1;
+         insn = NEXT_INSN (insn);
+       }
+      seq = emit_insn (seq);
+    }
+  else
+    {
+      seq = emit_insn (seq);
+      RTX_FRAME_RELATED_P (seq) = 1;
+    }
+  return seq;
+}
+
+
+#define FRP(exp)  (start_sequence (), exp, set_frame_related_p ())
+
+/* This emits code for 'sp += offset'.
+   
+   The ABI only allows us to modify 'sp' in a single 'addi' or
+   'addli', so the backtracer understands it. Larger amounts cannot
+   use those instructions, so are added by placing the offset into a
+   large register and using 'add'.
+
+   This happens after reload, so we need to expand it ourselves.  */
+static rtx
+emit_sp_adjust (int offset, int *next_scratch_regno, bool frame_related,
+               rtx reg_notes)
+{
+  rtx to_add;
+  rtx imm_rtx = GEN_INT (offset);
+
+  rtx insn;
+  if (satisfies_constraint_J (imm_rtx))
+    {
+      /* We can add this using a single immediate add.  */
+      to_add = imm_rtx;
+    }
+  else
+    {
+      rtx tmp = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
+      tilegx_expand_set_const64 (tmp, imm_rtx);
+      to_add = tmp;
+    }
+
+  /* Actually adjust the stack pointer.  */
+  if (TARGET_32BIT)
+    insn = gen_sp_adjust_32bit (stack_pointer_rtx, stack_pointer_rtx, to_add);
+  else
+    insn = gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx, to_add);
+
+  insn = emit_insn (insn);
+  REG_NOTES (insn) = reg_notes;
+
+  /* Describe what just happened in a way that dwarf understands.  */
+  if (frame_related)
+    {
+      rtx real = gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+                             gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                           imm_rtx));
+      RTX_FRAME_RELATED_P (insn) = 1;
+      add_reg_note (insn, REG_CFA_ADJUST_CFA, real);
+    }
+
+  return insn;
+}
+
+
+/* Return whether the current function is leaf.  This takes into
+   account whether the function calls tls_get_addr.  */
+static bool
+tilegx_current_function_is_leaf (void)
+{
+  return current_function_is_leaf && !cfun->machine->calls_tls_get_addr;
+}
+
+
+/* Return the frame size.  */
+static int
+compute_total_frame_size (void)
+{
+  int total_size = (get_frame_size () + tilegx_saved_regs_size ()
+                   + crtl->outgoing_args_size
+                   + crtl->args.pretend_args_size);
+
+  if (!tilegx_current_function_is_leaf () || cfun->calls_alloca)
+    {
+      /* Make room for save area in callee.  */
+      total_size += STACK_POINTER_OFFSET;
+    }
+
+  return round_frame_size (total_size);
+}
+
+
+/* Return nonzero if this function is known to have a null epilogue.
+   This allows the optimizer to omit jumps to jumps if no stack was
+   created.  */
+bool
+tilegx_can_use_return_insn_p (void)
+{
+  return (reload_completed
+         && cfun->static_chain_decl == 0
+         && compute_total_frame_size () == 0
+         && tilegx_current_function_is_leaf ()
+         && !crtl->profile && !df_regs_ever_live_p (TILEGX_LINK_REGNUM));
+}
+
+
+/* Returns an rtx for a stack slot at 'FP + offset_from_fp'.  If there
+   is a frame pointer, it computes the value relative to
+   that. Otherwise it uses the stack pointer.  */
+static rtx
+compute_frame_addr (int offset_from_fp, int *next_scratch_regno)
+{
+  rtx base_reg_rtx, tmp_reg_rtx, offset_rtx;
+  int offset_from_base;
+
+  if (frame_pointer_needed)
+    {
+      base_reg_rtx = hard_frame_pointer_rtx;
+      offset_from_base = offset_from_fp;
+    }
+  else
+    {
+      int offset_from_sp = compute_total_frame_size () + offset_from_fp;
+      offset_from_base = offset_from_sp;
+      base_reg_rtx = stack_pointer_rtx;
+    }
+
+  if (offset_from_base == 0)
+    return base_reg_rtx;
+
+  /* Compute the new value of the stack pointer.  */
+  tmp_reg_rtx = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
+  offset_rtx = GEN_INT (offset_from_base);
+
+  if (!add_operand (offset_rtx, Pmode))
+    {
+      expand_set_cint64 (tmp_reg_rtx, offset_rtx);
+      offset_rtx = tmp_reg_rtx;
+    }
+
+  emit_insn (gen_rtx_SET (VOIDmode, tmp_reg_rtx,
+                         gen_rtx_PLUS (Pmode, base_reg_rtx, offset_rtx)));
+
+  return tmp_reg_rtx;
+}
+
+
+/* The stack frame looks like this:
+         +-------------+
+         |    ...      | 
+         |  incoming   | 
+         | stack args  | 
+   AP -> +-------------+
+         | caller's HFP|
+         +-------------+
+         | lr save     |
+  HFP -> +-------------+
+         |  var args   | 
+         |  reg save   | crtl->args.pretend_args_size bytes
+         +-------------+
+         |    ...      | 
+         | saved regs  | tilegx_saved_regs_size() bytes
+   FP -> +-------------+
+         |    ...      | 
+         |   vars      | get_frame_size() bytes
+         +-------------+
+         |    ...      | 
+         |  outgoing   | 
+         |  stack args | crtl->outgoing_args_size bytes
+         +-------------+
+         | HFP         | ptr_size bytes (only here if nonleaf / alloca)
+         +-------------+
+         | callee lr   | ptr_size bytes (only here if nonleaf / alloca)
+         | save        | 
+   SP -> +-------------+
+
+  HFP == incoming SP.
+
+  For functions with a frame larger than 32767 bytes, or which use
+  alloca (), r52 is used as a frame pointer.  Otherwise there is no
+  frame pointer.
+
+  FP is saved at SP+ptr_size before calling a subroutine so the callee
+  can chain.  */
+void
+tilegx_expand_prologue (void)
+{
+#define ROUND_ROBIN_SIZE 4
+  /* We round-robin through four scratch registers to hold temporary
+     addresses for saving registers, to make instruction scheduling
+     easier.  */
+  rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
+    NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
+  };
+  rtx insn, cfa;
+  unsigned int which_scratch;
+  int offset, start_offset, regno;
+
+  /* A register that holds a copy of the incoming fp.  */
+  int fp_copy_regno = -1;
+
+  /* A register that holds a copy of the incoming sp.  */
+  int sp_copy_regno = -1;
+
+  /* Next scratch register number to hand out (postdecrementing).  */
+  int next_scratch_regno = 29;
+
+  int total_size = compute_total_frame_size ();
+
+  if (flag_stack_usage_info)
+    current_function_static_stack_size = total_size;
+
+  /* Save lr first in its special location because code after this
+     might use the link register as a scratch register.  */
+  if (df_regs_ever_live_p (TILEGX_LINK_REGNUM) || crtl->calls_eh_return)
+    FRP (frame_emit_store (TILEGX_LINK_REGNUM, TILEGX_LINK_REGNUM,
+                          stack_pointer_rtx, stack_pointer_rtx, 0));
+
+  if (total_size == 0)
+    {
+      /* Load the PIC register if needed.  */
+      if (flag_pic && crtl->uses_pic_offset_table)
+       load_pic_register (false);
+
+      return;
+    }
+
+  cfa = stack_pointer_rtx;
+
+  if (frame_pointer_needed)
+    {
+      fp_copy_regno = next_scratch_regno--;
+
+      /* Copy the old frame pointer aside so we can save it later.  */
+      insn =
+       FRP (emit_move_insn (gen_rtx_REG (word_mode, fp_copy_regno),
+                            gen_lowpart (word_mode, hard_frame_pointer_rtx)));
+      add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
+
+      /* Set up the frame pointer.  */
+      insn = FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx));
+      add_reg_note (insn, REG_CFA_DEF_CFA, hard_frame_pointer_rtx);
+      cfa = hard_frame_pointer_rtx;
+      REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
+
+      /* fp holds a copy of the incoming sp, in case we need to store
+         it.  */
+      sp_copy_regno = HARD_FRAME_POINTER_REGNUM;
+    }
+  else if (!tilegx_current_function_is_leaf ())
+    {
+      /* Copy the old stack pointer aside so we can save it later.  */
+      sp_copy_regno = next_scratch_regno--;
+      insn = FRP (emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno),
+                                 stack_pointer_rtx));
+      add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
+    }
+
+  if (tilegx_current_function_is_leaf ())
+    {
+      /* No need to store chain pointer to caller's frame.  */
+      emit_sp_adjust (-total_size, &next_scratch_regno,
+                     !frame_pointer_needed, NULL_RTX);
+    }
+  else
+    {
+      /* Save the frame pointer (incoming sp value) to support
+         backtracing.  First we need to create an rtx with the store
+         address.  */
+      rtx chain_addr = gen_rtx_REG (Pmode, next_scratch_regno--);
+      rtx size_rtx = GEN_INT (-(total_size - UNITS_PER_WORD));
+      int cfa_offset =
+       frame_pointer_needed ? UNITS_PER_WORD - total_size : UNITS_PER_WORD;
+
+      if (add_operand (size_rtx, Pmode))
+       {
+         /* Expose more parallelism by computing this value from the
+            original stack pointer, not the one after we have pushed
+            the frame.  */
+         rtx p = gen_rtx_PLUS (Pmode, stack_pointer_rtx, size_rtx);
+         emit_insn (gen_rtx_SET (VOIDmode, chain_addr, p));
+         emit_sp_adjust (-total_size, &next_scratch_regno,
+                         !frame_pointer_needed, NULL_RTX);
+       }
+      else
+       {
+         /* The stack frame is large, so just store the incoming sp
+            value at *(new_sp + UNITS_PER_WORD).  */
+         rtx p;
+         emit_sp_adjust (-total_size, &next_scratch_regno,
+                         !frame_pointer_needed, NULL_RTX);
+         p = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                           GEN_INT (UNITS_PER_WORD));
+         emit_insn (gen_rtx_SET (VOIDmode, chain_addr, p));
+       }
+
+      /* Save our frame pointer for backtrace chaining.  */
+      FRP (frame_emit_store (sp_copy_regno, STACK_POINTER_REGNUM,
+                            chain_addr, cfa, cfa_offset));
+    }
+
+  /* Compute where to start storing registers we need to save.  */
+  start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
+  offset = start_offset;
+
+  /* Store all registers that need saving.  */
+  which_scratch = 0;
+  for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
+    if (need_to_save_reg (regno))
+      {
+       rtx r = reg_save_addr[which_scratch];
+       int from_regno;
+       int cfa_offset = frame_pointer_needed ? offset : total_size + offset;
+
+       if (r == NULL_RTX)
+         {
+           rtx p = compute_frame_addr (offset, &next_scratch_regno);
+           r = gen_rtx_REG (Pmode, next_scratch_regno--);
+           reg_save_addr[which_scratch] = r;
+
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+       else
+         {
+           /* Advance to the next stack slot to store this
+              register.  */
+           int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
+           rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+
+       /* Save this register to the stack (but use the old fp value
+          we copied aside if appropriate).  */
+       from_regno =
+         (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
+         ? fp_copy_regno : regno;
+       FRP (frame_emit_store (from_regno, regno, r, cfa, cfa_offset));
+
+       offset -= UNITS_PER_WORD;
+       which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
+      }
+
+  /* If profiling, force that to happen after the frame is set up.  */
+  if (crtl->profile)
+    emit_insn (gen_blockage ());
+
+  /* Load the PIC register if needed.  */
+  if (flag_pic && crtl->uses_pic_offset_table)
+    load_pic_register (false);
+}
+
+
+/* Implement the epilogue and sibcall_epilogue patterns.  SIBCALL_P is
+   true for a sibcall_epilogue pattern, and false for an epilogue
+   pattern.  */
+void
+tilegx_expand_epilogue (bool sibcall_p)
+{
+  /* We round-robin through four scratch registers to hold temporary
+     addresses for saving registers, to make instruction scheduling
+     easier.  */
+  rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
+    NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
+  };
+  rtx last_insn, insn;
+  unsigned int which_scratch;
+  int offset, start_offset, regno;
+  rtx cfa_restores = NULL_RTX;
+
+  /* A register that holds a copy of the incoming fp.  */
+  int fp_copy_regno = -1;
+
+  /* Next scratch register number to hand out (postdecrementing).  */
+  int next_scratch_regno = 29;
+
+  int total_size = compute_total_frame_size ();
+
+  last_insn = get_last_insn ();
+
+  /* Load lr first since we are going to need it first.  */
+  insn = NULL;
+  if (df_regs_ever_live_p (TILEGX_LINK_REGNUM))
+    {
+      insn = frame_emit_load (TILEGX_LINK_REGNUM,
+                             compute_frame_addr (0, &next_scratch_regno),
+                             &cfa_restores);
+    }
+
+  if (total_size == 0)
+    {
+      if (insn)
+       {
+         RTX_FRAME_RELATED_P (insn) = 1;
+         REG_NOTES (insn) = cfa_restores;
+       }
+      goto done;
+    }
+
+  /* Compute where to start restoring registers.  */
+  start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
+  offset = start_offset;
+
+  if (frame_pointer_needed)
+    fp_copy_regno = next_scratch_regno--;
+
+  /* Restore all callee-saved registers.  */
+  which_scratch = 0;
+  for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
+    if (need_to_save_reg (regno))
+      {
+       rtx r = reg_save_addr[which_scratch];
+       if (r == NULL_RTX)
+         {
+           r = compute_frame_addr (offset, &next_scratch_regno);
+           reg_save_addr[which_scratch] = r;
+         }
+       else
+         {
+           /* Advance to the next stack slot to store this register.  */
+           int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
+           rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+
+       if (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
+         frame_emit_load (fp_copy_regno, r, NULL);
+       else
+         frame_emit_load (regno, r, &cfa_restores);
+
+       offset -= UNITS_PER_WORD;
+       which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
+      }
+
+  if (!tilegx_current_function_is_leaf ())
+    cfa_restores =
+      alloc_reg_note (REG_CFA_RESTORE, stack_pointer_rtx, cfa_restores);
+
+  emit_insn (gen_blockage ());
+
+  if (crtl->calls_eh_return)
+    {
+      rtx r = compute_frame_addr (-total_size + UNITS_PER_WORD,
+                                 &next_scratch_regno);
+      insn = emit_move_insn (gen_lowpart (DImode, stack_pointer_rtx),
+                            gen_frame_mem (DImode, r));
+      RTX_FRAME_RELATED_P (insn) = 1;
+      REG_NOTES (insn) = cfa_restores;
+    }
+  else if (frame_pointer_needed)
+    {
+      /* Restore the old stack pointer by copying from the frame
+         pointer.  */
+      if (TARGET_32BIT)
+       {
+         insn = emit_insn (gen_sp_restore_32bit (stack_pointer_rtx,
+                                                 hard_frame_pointer_rtx));
+       }
+      else
+       {
+         insn = emit_insn (gen_sp_restore (stack_pointer_rtx,
+                                           hard_frame_pointer_rtx));
+       }
+      RTX_FRAME_RELATED_P (insn) = 1;
+      REG_NOTES (insn) = cfa_restores;
+      add_reg_note (insn, REG_CFA_DEF_CFA, stack_pointer_rtx);
+    }
+  else
+    {
+      insn = emit_sp_adjust (total_size, &next_scratch_regno, true,
+                            cfa_restores);
+    }
+
+  /* Restore the old frame pointer.  */
+  if (frame_pointer_needed)
+    {
+      insn = emit_move_insn (gen_lowpart (DImode, hard_frame_pointer_rtx),
+                            gen_rtx_REG (DImode, fp_copy_regno));
+      add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx);
+    }
+
+  /* Mark the pic registers as live outside of the function.  */
+  if (flag_pic)
+    {
+      emit_use (cfun->machine->text_label_rtx);
+      emit_use (cfun->machine->got_rtx);
+    }
+
+done:
+  if (!sibcall_p)
+    {
+      emit_jump_insn (gen__return ());
+    }
+  else
+    {
+      emit_use (gen_rtx_REG (Pmode, TILEGX_LINK_REGNUM));
+    }
+
+  /* Mark all insns we just emitted as frame-related.  */
+  for (; last_insn != NULL_RTX; last_insn = next_insn (last_insn))
+    RTX_FRAME_RELATED_P (last_insn) = 1;
+}
+
+#undef ROUND_ROBIN_SIZE
+
+
+/* Implement INITIAL_ELIMINATION_OFFSET.  */
+int
+tilegx_initial_elimination_offset (int from, int to)
+{
+  int total_size = compute_total_frame_size ();
+
+  if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
+    {
+      return (total_size - crtl->args.pretend_args_size
+             - tilegx_saved_regs_size ());
+    }
+  else if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
+    {
+      return -(crtl->args.pretend_args_size + tilegx_saved_regs_size ());
+    }
+  else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
+    {
+      return STACK_POINTER_OFFSET + total_size;
+    }
+  else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
+    {
+      return STACK_POINTER_OFFSET;
+    }
+  else
+    gcc_unreachable ();
+}
+
+
+/* Return an RTX indicating where the return address to the calling
+   function can be found.  */
+rtx
+tilegx_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
+{
+  if (count != 0)
+    return const0_rtx;
+
+  return get_hard_reg_initial_val (Pmode, TILEGX_LINK_REGNUM);
+}
+
+
+/* Implement EH_RETURN_HANDLER_RTX.  The MEM needs to be volatile to
+   prevent it from being deleted.  */
+rtx
+tilegx_eh_return_handler_rtx (void)
+{
+  rtx tmp = gen_frame_mem (Pmode, hard_frame_pointer_rtx);
+  MEM_VOLATILE_P (tmp) = true;
+  return tmp;
+}
+\f
+
+
+/* Registers  */
+
+/* Implemnet TARGET_CONDITIONAL_REGISTER_USAGE.  */
+static void
+tilegx_conditional_register_usage (void)
+{
+  global_regs[TILEGX_NETORDER_REGNUM] = 1;
+  /* TILEGX_PIC_TEXT_LABEL_REGNUM is conditionally used.  It is a
+     member of fixed_regs, and therefore must be member of
+     call_used_regs, but it is not a member of call_really_used_regs[]
+     because it is not clobbered by a call.  */
+  if (TILEGX_PIC_TEXT_LABEL_REGNUM != INVALID_REGNUM)
+    {
+      fixed_regs[TILEGX_PIC_TEXT_LABEL_REGNUM] = 1;
+      call_used_regs[TILEGX_PIC_TEXT_LABEL_REGNUM] = 1;
+    }
+  if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
+    {
+      fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+      call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+    }
+}
+
+
+/* Implement TARGET_FRAME_POINTER_REQUIRED.  */
+static bool
+tilegx_frame_pointer_required (void)
+{
+  return crtl->calls_eh_return || cfun->calls_alloca;
+}
+\f
+
+
+/* Scheduling and reorg  */
+
+/* Return the length of INSN.  LENGTH is the initial length computed
+   by attributes in the machine-description file.  This is where we
+   account for bundles.  */
+int
+tilegx_adjust_insn_length (rtx insn, int length)
+{
+  enum machine_mode mode = GET_MODE (insn);
+
+  /* A non-termininating instruction in a bundle has length 0.  */
+  if (mode == SImode)
+    return 0;
+
+  /* By default, there is not length adjustment.  */
+  return length;
+}
+
+
+/* Implement TARGET_SCHED_ISSUE_RATE.  */
+static int
+tilegx_issue_rate (void)
+{
+  return 3;
+}
+
+
+/* Return the rtx for the jump target.  */
+static rtx
+get_jump_target (rtx branch)
+{
+  if (CALL_P (branch))
+    {
+      rtx call;
+      call = PATTERN (branch);
+
+      if (GET_CODE (call) == PARALLEL)
+       call = XVECEXP (call, 0, 0);
+
+      if (GET_CODE (call) == SET)
+       call = SET_SRC (call);
+
+      if (GET_CODE (call) == CALL)
+       return XEXP (XEXP (call, 0), 0);
+    }
+  return 0;
+}
+
+/* Implement TARGET_SCHED_ADJUST_COST.  */
+static int
+tilegx_sched_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
+{
+  /* If we have a true dependence, INSN is a call, and DEP_INSN
+     defines a register that is needed by the call (argument or stack
+     pointer) , set its latency to 0 so that it can be bundled with
+     the call.  Explicitly check for and exclude the case when
+     DEP_INSN defines the target of the jump.  */
+  if (CALL_P (insn) && REG_NOTE_KIND (link) == REG_DEP_TRUE)
+    {
+      rtx target = get_jump_target (insn);
+      if (!REG_P (target) || !set_of (target, dep_insn))
+       return 0;
+    }
+
+  return cost;
+}
+
+
+/* Skip over irrelevant NOTEs and such and look for the next insn we
+   would consider bundling.  */
+static rtx
+next_insn_to_bundle (rtx r, rtx end)
+{
+  for (; r != end; r = NEXT_INSN (r))
+    {
+      if (NONDEBUG_INSN_P (r)
+         && GET_CODE (PATTERN (r)) != USE
+         && GET_CODE (PATTERN (r)) != CLOBBER)
+       return r;
+    }
+
+  return NULL_RTX;
+}
+
+
+/* Go through all insns, and use the information generated during
+   scheduling to generate SEQUENCEs to represent bundles of
+   instructions issued simultaneously.  */
+static void
+tilegx_gen_bundles (void)
+{
+  basic_block bb;
+  FOR_EACH_BB (bb)
+  {
+    rtx insn, next;
+    rtx end = NEXT_INSN (BB_END (bb));
+
+    for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
+      {
+       next = next_insn_to_bundle (NEXT_INSN (insn), end);
+
+       /* Never wrap {} around inline asm.  */
+       if (GET_CODE (PATTERN (insn)) != ASM_INPUT)
+         {
+           if (next == NULL_RTX || GET_MODE (next) == TImode
+               /* NOTE: The scheduler incorrectly believes a call
+                  insn can execute in the same cycle as the insn
+                  after the call.  This is of course impossible.
+                  Really we need to fix the scheduler somehow, so
+                  the code after the call gets scheduled
+                  optimally.  */
+               || CALL_P (insn))
+             {
+               /* Mark current insn as the end of a bundle.  */
+               PUT_MODE (insn, QImode);
+             }
+           else
+             {
+               /* Mark it as part of a bundle.  */
+               PUT_MODE (insn, SImode);
+             }
+         }
+      }
+  }
+}
+
+
+/* Replace OLD_INSN with NEW_INSN.  */
+static void
+replace_insns (rtx old_insn, rtx new_insns)
+{
+  if (new_insns)
+    emit_insn_before (new_insns, old_insn);
+
+  delete_insn (old_insn);
+}
+
+
+/* Returns true if INSN is the first instruction of a pc-relative
+   address compuatation.  */
+static bool
+match_pcrel_step1 (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx src;
+
+  if (GET_CODE (pattern) != SET)
+    return false;
+
+  src = SET_SRC (pattern);
+
+  return (GET_CODE (src) == CONST
+         && GET_CODE (XEXP (src, 0)) == UNSPEC
+         && XINT (XEXP (src, 0), 1) == UNSPEC_HW1_LAST_PCREL);
+}
+
+
+/* Do the first replacement step in tilegx_fixup_pcrel_references.  */
+static void
+replace_mov_pcrel_step1 (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx unspec;
+  rtx opnds[2];
+  rtx new_insns;
+
+  gcc_assert (GET_CODE (pattern) == SET);
+  opnds[0] = SET_DEST (pattern);
+
+  gcc_assert (GET_CODE (SET_SRC (pattern)) == CONST);
+
+  unspec = XEXP (SET_SRC (pattern), 0);
+  gcc_assert (GET_CODE (unspec) == UNSPEC);
+  gcc_assert (XINT (unspec, 1) == UNSPEC_HW1_LAST_PCREL);
+  opnds[1] = XVECEXP (unspec, 0, 0);
+
+  /* We only need to replace SYMBOL_REFs, not LABEL_REFs.  */
+  if (GET_CODE (opnds[1]) != SYMBOL_REF)
+    return;
+
+  start_sequence ();
+
+  if (flag_pic != 1)
+    {
+      if (TARGET_32BIT)
+       emit_insn (gen_mov_got32_step1_32bit (opnds[0], opnds[1]));
+      else
+       emit_insn (gen_mov_got32_step1 (opnds[0], opnds[1]));
+    }
+
+  new_insns = get_insns ();
+  end_sequence ();
+
+  replace_insns (insn, new_insns);
+}
+
+
+/* Returns true if INSN is the second instruction of a pc-relative
+   address compuatation.  */
+static bool
+match_pcrel_step2 (rtx insn)
+{
+  rtx src;
+  if (TARGET_32BIT)
+    {
+      if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli_32bit)
+       return false;
+    }
+  else
+    {
+      if (recog_memoized (insn) != CODE_FOR_insn_addr_shl16insli)
+       return false;
+    }
+
+  src = SET_SRC (PATTERN (insn));
+
+  return (GET_CODE (src) == CONST
+         && GET_CODE (XEXP (src, 0)) == UNSPEC
+         && XINT (XEXP (src, 0), 1) == UNSPEC_HW0_PCREL);
+}
+
+
+/* Do the second replacement step in tilegx_fixup_pcrel_references.  */
+static void
+replace_mov_pcrel_step2 (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx unspec;
+  rtx opnds[3];
+  rtx new_insns;
+  rtx got_rtx = tilegx_got_rtx ();
+
+  gcc_assert (GET_CODE (pattern) == SET);
+  opnds[0] = SET_DEST (pattern);
+
+  unspec = XEXP (SET_SRC (pattern), 0);
+  gcc_assert (GET_CODE (unspec) == UNSPEC);
+  gcc_assert (XINT (unspec, 1) == UNSPEC_HW0_PCREL);
+  opnds[1] = XEXP (XEXP (SET_SRC (pattern), 0), 0);
+  opnds[2] = XVECEXP (unspec, 0, 0);
+
+  /* We only need to replace SYMBOL_REFs, not LABEL_REFs.  */
+  if (GET_CODE (opnds[2]) != SYMBOL_REF)
+    return;
+
+  start_sequence ();
+
+  if (flag_pic == 1)
+    {
+      if (TARGET_32BIT)
+       emit_insn (gen_add_got16_32bit (opnds[0], got_rtx, opnds[2]));
+      else
+       emit_insn (gen_add_got16 (opnds[0], got_rtx, opnds[2]));
+    }
+  else
+    {
+      if (TARGET_32BIT)
+       emit_insn (gen_mov_got32_step2_32bit
+                  (opnds[0], opnds[1], opnds[2]));
+      else
+       emit_insn (gen_mov_got32_step2 (opnds[0], opnds[1], opnds[2]));
+    }
+
+  new_insns = get_insns ();
+  end_sequence ();
+
+  replace_insns (insn, new_insns);
+}
+
+
+/* Do the third replacement step in tilegx_fixup_pcrel_references.  */
+static void
+replace_mov_pcrel_step3 (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx unspec;
+  rtx opnds[4];
+  rtx new_insns;
+  rtx got_rtx = tilegx_got_rtx ();
+  rtx text_label_rtx = tilegx_text_label_rtx ();
+
+  gcc_assert (GET_CODE (pattern) == SET);
+  opnds[0] = SET_DEST (pattern);
+
+  unspec = SET_SRC (pattern);
+  gcc_assert (GET_CODE (unspec) == UNSPEC);
+  gcc_assert (XINT (unspec, 1) == UNSPEC_MOV_PCREL_STEP3);
+
+  opnds[1] = got_rtx;
+
+  if (XVECEXP (unspec, 0, 0) == text_label_rtx)
+    opnds[2] = XVECEXP (unspec, 0, 1);
+  else
+    {
+      gcc_assert (XVECEXP (unspec, 0, 1) == text_label_rtx);
+      opnds[2] = XVECEXP (unspec, 0, 0);
+    }
+
+  opnds[3] = XVECEXP (unspec, 0, 2);
+
+  /* We only need to replace SYMBOL_REFs, not LABEL_REFs.  */
+  if (GET_CODE (opnds[3]) != SYMBOL_REF)
+    return;
+
+  start_sequence ();
+
+  if (flag_pic == 1)
+    {
+      emit_move_insn (opnds[0], gen_const_mem (Pmode, opnds[2]));
+    }
+  else
+    {
+      emit_move_insn (opnds[0], gen_rtx_PLUS (Pmode, opnds[1], opnds[2]));
+      emit_move_insn (opnds[0], gen_const_mem (Pmode, opnds[0]));
+    }
+
+  new_insns = get_insns ();
+  end_sequence ();
+
+  replace_insns (insn, new_insns);
+}
+
+
+/* We generate PC relative SYMBOL_REFs as an optimization, to avoid
+   going through the GOT when the symbol is local to the compilation
+   unit.  But such a symbol requires that the common text_label that
+   we generate at the beginning of the function be in the same section
+   as the reference to the SYMBOL_REF.  This may not be true if we
+   generate hot/cold sections.  This function looks for such cases and
+   replaces such references with the longer sequence going through the
+   GOT.
+
+   We expect following instruction sequence:
+   moveli      tmp1, hw1_last(x-.L_PICLNK)          [1]
+   shl16insli  tmp2, tmp1, hw0(x-.L_PICLNK)         [2]
+   add<x>      tmp3, txt_label_reg, tmp2            [3]
+
+   If we're compiling -fpic, we replace with the following sequence
+   (the numbers in brackets match the instructions they're replacing
+   above).
+
+   add<x>li    tmp2, got_reg, hw0_last_got(x)       [2]
+   ld<4>       tmp3, tmp2                           [3]
+
+   If we're compiling -fPIC, we replace the first instruction with:
+
+   moveli      tmp1, hw1_last_got(x)                [1]
+   shl16insli  tmp2, tmp1, hw0_got(x)               [2]
+   add<x>      tmp3, got_reg, tmp2                  [3]
+   ld<4>       tmp3, tmp3                           [3]
+
+   Note that we're careful to disturb the instruction sequence as
+   little as possible, since it's very late in the compilation
+   process.  */
+static void
+tilegx_fixup_pcrel_references (void)
+{
+  rtx insn, next_insn;
+  bool same_section_as_entry = true;
+
+  for (insn = get_insns (); insn; insn = next_insn)
+    {
+      next_insn = NEXT_INSN (insn);
+
+      if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
+       {
+         same_section_as_entry = !same_section_as_entry;
+         continue;
+       }
+
+      if (same_section_as_entry)
+       continue;
+
+      if (!(INSN_P (insn)
+           && GET_CODE (PATTERN (insn)) != USE
+           && GET_CODE (PATTERN (insn)) != CLOBBER))
+       continue;
+
+      if (TARGET_32BIT)
+       {
+         if (match_pcrel_step1 (insn))
+           replace_mov_pcrel_step1 (insn);
+         else if (match_pcrel_step2 (insn))
+           replace_mov_pcrel_step2 (insn);
+         else if (recog_memoized (insn) == CODE_FOR_mov_pcrel_step3_32bit)
+           replace_mov_pcrel_step3 (insn);
+       }
+      else
+       {
+         if (match_pcrel_step1 (insn))
+           replace_mov_pcrel_step1 (insn);
+         else if (match_pcrel_step2 (insn))
+           replace_mov_pcrel_step2 (insn);
+         else if (recog_memoized (insn) == CODE_FOR_mov_pcrel_step3)
+           replace_mov_pcrel_step3 (insn);
+       }
+    }
+}
+
+
+/* Ensure that no var tracking notes are emitted in the middle of a
+   three-instruction bundle.  */
+static void
+reorder_var_tracking_notes (void)
+{
+  basic_block bb;
+  FOR_EACH_BB (bb)
+  {
+    rtx insn, next;
+    rtx queue = NULL_RTX;
+    bool in_bundle = false;
+
+    for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = next)
+      {
+       next = NEXT_INSN (insn);
+
+       if (INSN_P (insn))
+         {
+           /* Emit queued up notes at the last instruction of a
+              bundle.  */
+           if (GET_MODE (insn) == QImode)
+             {
+               while (queue)
+                 {
+                   rtx next_queue = PREV_INSN (queue);
+                   PREV_INSN (NEXT_INSN (insn)) = queue;
+                   NEXT_INSN (queue) = NEXT_INSN (insn);
+                   NEXT_INSN (insn) = queue;
+                   PREV_INSN (queue) = insn;
+                   queue = next_queue;
+                 }
+               in_bundle = false;
+             }
+           else if (GET_MODE (insn) == SImode)
+             in_bundle = true;
+         }
+       else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
+         {
+           if (in_bundle)
+             {
+               rtx prev = PREV_INSN (insn);
+               PREV_INSN (next) = prev;
+               NEXT_INSN (prev) = next;
+
+               PREV_INSN (insn) = queue;
+               queue = insn;
+             }
+         }
+      }
+  }
+}
+
+
+/* Perform machine dependent operations on the rtl chain INSNS.  */
+static void
+tilegx_reorg (void)
+{
+  /* We are freeing block_for_insn in the toplev to keep compatibility
+     with old MDEP_REORGS that are not CFG based.  Recompute it
+     now.  */
+  compute_bb_for_insn ();
+
+  if (flag_reorder_blocks_and_partition)
+    {
+      tilegx_fixup_pcrel_references ();
+    }
+
+  if (flag_schedule_insns_after_reload)
+    {
+      split_all_insns ();
+
+      timevar_push (TV_SCHED2);
+      schedule_insns ();
+      timevar_pop (TV_SCHED2);
+
+      /* Examine the schedule to group into bundles.  */
+      tilegx_gen_bundles ();
+    }
+
+  df_analyze ();
+
+  if (flag_var_tracking)
+    {
+      timevar_push (TV_VAR_TRACKING);
+      variable_tracking_main ();
+      reorder_var_tracking_notes ();
+      timevar_pop (TV_VAR_TRACKING);
+    }
+
+  df_finish_pass (false);
+}
+\f
+
+
+/* Assembly  */
+
+/* Select a format to encode pointers in exception handling data.
+   CODE is 0 for data, 1 for code labels, 2 for function pointers.
+   GLOBAL is true if the symbol may be affected by dynamic
+   relocations.  */
+int
+tilegx_asm_preferred_eh_data_format (int code ATTRIBUTE_UNUSED, int global)
+{
+  if (flag_pic)
+    {
+      int type = TARGET_32BIT ? DW_EH_PE_sdata4 : DW_EH_PE_sdata8;
+      return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
+    }
+  else
+    return DW_EH_PE_absptr;
+}
+
+
+/* Implement TARGET_ASM_OUTPUT_MI_THUNK.  */
+static void
+tilegx_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
+                       HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
+                       tree function)
+{
+  rtx this_rtx, insn, funexp, addend;
+
+  /* Pretend to be a post-reload pass while generating rtl.  */
+  reload_completed = 1;
+
+  /* Mark the end of the (empty) prologue.  */
+  emit_note (NOTE_INSN_PROLOGUE_END);
+
+  /* Find the "this" pointer.  If the function returns a structure,
+     the structure return pointer is in $1.  */
+  if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
+    this_rtx = gen_rtx_REG (Pmode, 1);
+  else
+    this_rtx = gen_rtx_REG (Pmode, 0);
+
+  /* Add DELTA to THIS_RTX.  */
+  if (!(delta >= -32868 && delta <= 32767))
+    {
+      addend = gen_rtx_REG (Pmode, 29);
+      emit_move_insn (addend, GEN_INT (delta));
+    }
+  else
+    addend = GEN_INT (delta);
+
+  if (TARGET_32BIT)
+    emit_insn (gen_addsi3 (this_rtx, this_rtx, addend));
+  else
+    emit_insn (gen_adddi3 (this_rtx, this_rtx, addend));
+
+  /* If needed, add *(*THIS_RTX + VCALL_OFFSET) to THIS_RTX.  */
+  if (vcall_offset)
+    {
+      rtx tmp;
+
+      tmp = gen_rtx_REG (Pmode, 29);
+      emit_move_insn (tmp, gen_rtx_MEM (Pmode, this_rtx));
+
+      if (!(vcall_offset >= -32868 && vcall_offset <= 32767))
+       {
+         addend = gen_rtx_REG (Pmode, 28);
+         emit_move_insn (addend, GEN_INT (vcall_offset));
+       }
+      else
+       addend = GEN_INT (vcall_offset);
+
+      if (TARGET_32BIT)
+       emit_insn (gen_addsi3 (tmp, tmp, addend));
+      else
+       emit_insn (gen_adddi3 (tmp, tmp, addend));
+
+      emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
+
+      if (TARGET_32BIT)
+       emit_insn (gen_addsi3 (this_rtx, this_rtx, tmp));
+      else
+       emit_insn (gen_adddi3 (this_rtx, this_rtx, tmp));
+    }
+
+  /* Generate a tail call to the target function.  */
+  if (!TREE_USED (function))
+    {
+      assemble_external (function);
+      TREE_USED (function) = 1;
+    }
+  funexp = XEXP (DECL_RTL (function), 0);
+  funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
+  insn = emit_call_insn (gen_sibcall (funexp, const0_rtx));
+  SIBLING_CALL_P (insn) = 1;
+
+  /* Run just enough of rest_of_compilation to get the insns emitted.
+     There's not really enough bulk here to make other passes such as
+     instruction scheduling worth while.  Note that use_thunk calls
+     assemble_start_function and assemble_end_function.
+
+     We don't currently bundle, but the instruciton sequence is all
+     serial except for the tail call, so we're only wasting one cycle.
+   */
+  insn = get_insns ();
+  insn_locators_alloc ();
+  shorten_branches (insn);
+  final_start_function (insn, file, 1);
+  final (insn, file, 1);
+  final_end_function ();
+
+  /* Stop pretending to be a post-reload pass.  */
+  reload_completed = 0;
+}
+
+
+/* Implement TARGET_ASM_TRAMPOLINE_TEMPLATE.  */
+static void
+tilegx_asm_trampoline_template (FILE *file)
+{
+  int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
+  if (TARGET_32BIT)
+    {
+      fprintf (file, "\tlnk      r10\n");
+      fprintf (file, "\taddxi    r10, r10, 32\n");
+      fprintf (file, "\tld4s_add r11, r10, %d\n", ptr_mode_size);
+      fprintf (file, "\tld4s     r10, r10\n");
+      fprintf (file, "\tjr       r11\n");
+      fprintf (file, "\t.word 0 # <function address>\n");
+      fprintf (file, "\t.word 0 # <static chain value>\n");
+    }
+  else
+    {
+      fprintf (file, "\tlnk      r10\n");
+      fprintf (file, "\taddi     r10, r10, 32\n");
+      fprintf (file, "\tld_add   r11, r10, %d\n", ptr_mode_size);
+      fprintf (file, "\tld       r10, r10\n");
+      fprintf (file, "\tjr       r11\n");
+      fprintf (file, "\t.quad 0 # <function address>\n");
+      fprintf (file, "\t.quad 0 # <static chain value>\n");
+    }
+}
+
+
+/* Implement TARGET_TRAMPOLINE_INIT.  */
+static void
+tilegx_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
+{
+  rtx fnaddr, chaddr;
+  rtx mem;
+  rtx begin_addr, end_addr;
+  int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
+
+  fnaddr = copy_to_reg (XEXP (DECL_RTL (fndecl), 0));
+  chaddr = copy_to_reg (static_chain);
+
+  emit_block_move (m_tramp, assemble_trampoline_template (),
+                  GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
+
+  mem = adjust_address (m_tramp, ptr_mode,
+                       TRAMPOLINE_SIZE - 2 * ptr_mode_size);
+  emit_move_insn (mem, fnaddr);
+  mem = adjust_address (m_tramp, ptr_mode,
+                       TRAMPOLINE_SIZE - ptr_mode_size);
+  emit_move_insn (mem, chaddr);
+
+  /* Get pointers to the beginning and end of the code block.  */
+  begin_addr = force_reg (Pmode, XEXP (m_tramp, 0));
+  end_addr = force_reg (Pmode, plus_constant (XEXP (m_tramp, 0),
+                                             TRAMPOLINE_SIZE));
+
+  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
+                    LCT_NORMAL, VOIDmode, 2, begin_addr, Pmode,
+                    end_addr, Pmode);
+}
+
+
+/* Implement TARGET_PRINT_OPERAND.  */
+static void
+tilegx_print_operand (FILE *file, rtx x, int code)
+{
+  switch (code)
+    {
+    case 'c':
+      /* Print the compare operator opcode for conditional moves. */
+      switch (GET_CODE (x))
+       {
+       case EQ:
+         fputs ("z", file);
+         break;
+       case NE:
+         fputs ("nz", file);
+         break;
+       default:
+         output_operand_lossage ("invalid %%c operand");
+       }
+      return;
+
+    case 'C':
+      /* Print the compare operator opcode for conditional moves. */
+      switch (GET_CODE (x))
+       {
+       case EQ:
+         fputs ("nz", file);
+         break;
+       case NE:
+         fputs ("z", file);
+         break;
+       default:
+         output_operand_lossage ("invalid %%C operand");
+       }
+      return;
+
+    case 'd':
+      {
+       /* Print the compare operator opcode for conditional moves. */
+       switch (GET_CODE (x))
+         {
+         case EQ:
+           fputs ("eq", file);
+           break;
+         case NE:
+           fputs ("ne", file);
+           break;
+         default:
+           output_operand_lossage ("invalid %%d operand");
+         }
+       return;
+      }
+
+    case 'D':
+      {
+       /* Print the compare operator opcode for conditional moves. */
+       switch (GET_CODE (x))
+         {
+         case EQ:
+           fputs ("ne", file);
+           break;
+         case NE:
+           fputs ("eq", file);
+           break;
+         default:
+           output_operand_lossage ("invalid %%D operand");
+         }
+       return;
+      }
+
+    case 'H':
+      {
+      if (GET_CODE (x) == CONST
+         && GET_CODE (XEXP (x, 0)) == UNSPEC)
+       {
+         rtx addr = XVECEXP (XEXP (x, 0), 0, 0);
+         int unspec = XINT (XEXP (x, 0), 1);
+         const char *opstr = NULL;
+         switch (unspec)
+           {
+           case UNSPEC_HW0:
+           case UNSPEC_HW0_PCREL:
+             opstr = "hw0";
+             break;
+           case UNSPEC_HW1:
+             opstr = "hw1";
+             break;
+           case UNSPEC_HW2:
+             opstr = "hw2";
+             break;
+           case UNSPEC_HW3:
+             opstr = "hw3";
+             break;
+           case UNSPEC_HW0_LAST:
+             opstr = "hw0_last";
+             break;
+           case UNSPEC_HW1_LAST:
+           case UNSPEC_HW1_LAST_PCREL:
+             opstr = "hw1_last";
+             break;
+           case UNSPEC_HW2_LAST:
+             opstr = "hw2_last";
+             break;
+           case UNSPEC_HW0_GOT:
+             opstr = "hw0_got";
+             break;
+           case UNSPEC_HW0_LAST_GOT:
+             opstr = "hw0_last_got";
+             break;
+           case UNSPEC_HW1_LAST_GOT:
+             opstr = "hw1_last_got";
+             break;
+           case UNSPEC_HW0_TLS_GD:
+             opstr = "hw0_tls_gd";
+             break;
+           case UNSPEC_HW1_LAST_TLS_GD:
+             opstr = "hw1_last_tls_gd";
+             break;
+           case UNSPEC_HW0_TLS_IE:
+             opstr = "hw0_tls_ie";
+             break;
+           case UNSPEC_HW1_LAST_TLS_IE:
+             opstr = "hw1_last_tls_ie";
+             break;
+           case UNSPEC_HW0_TLS_LE:
+             opstr = "hw0_tls_le";
+             break;
+           case UNSPEC_HW1_LAST_TLS_LE:
+             opstr = "hw1_last_tls_le";
+             break;
+           default:
+             output_operand_lossage ("invalid %%H specifier");
+           }
+
+         fputs (opstr, file);
+         fputc ('(', file);
+         output_addr_const (file, addr);
+
+         if (unspec == UNSPEC_HW0_PCREL
+             || unspec == UNSPEC_HW1_LAST_PCREL)
+           {
+             rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
+             fputs (" - " , file);
+             output_addr_const (file, addr2);
+           }
+
+         fputc (')', file);
+         return;
+       }
+      else if (symbolic_operand (x, VOIDmode))
+       {
+         output_addr_const (file, x);
+         return;
+       }
+      }
+      /* FALLTHRU */
+
+    case 'h':
+      {
+       /* Print the low 16 bits of a constant.  */
+       HOST_WIDE_INT i;
+       if (CONST_INT_P (x))
+         i = INTVAL (x);
+       else if (GET_CODE (x) == CONST_DOUBLE)
+         i = CONST_DOUBLE_LOW (x);
+       else
+         {
+           output_operand_lossage ("invalid %%h operand");
+           return;
+         }
+       i = trunc_int_for_mode (i, HImode);
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+
+    case 'I':
+      /* Print an auto-inc memory operand.  */
+      if (!MEM_P (x))
+       {
+         output_operand_lossage ("invalid %%I operand");
+         return;
+       }
+
+      output_memory_reference_mode = GET_MODE (x);
+      output_memory_autoinc_first = true;
+      output_address (XEXP (x, 0));
+      output_memory_reference_mode = VOIDmode;
+      return;
+
+    case 'i':
+      /* Print an auto-inc memory operand.  */
+      if (!MEM_P (x))
+       {
+         output_operand_lossage ("invalid %%i operand");
+         return;
+       }
+
+      output_memory_reference_mode = GET_MODE (x);
+      output_memory_autoinc_first = false;
+      output_address (XEXP (x, 0));
+      output_memory_reference_mode = VOIDmode;
+      return;
+
+    case 'j':
+      {
+       /* Print the low 8 bits of a constant.  */
+       HOST_WIDE_INT i;
+       if (CONST_INT_P (x))
+         i = INTVAL (x);
+       else if (GET_CODE (x) == CONST_DOUBLE)
+         i = CONST_DOUBLE_LOW (x);
+       else if (GET_CODE (x) == CONST_VECTOR
+                && CONST_INT_P (CONST_VECTOR_ELT (x, 0)))
+         i = INTVAL (CONST_VECTOR_ELT (x, 0));
+       else
+         {
+           output_operand_lossage ("invalid %%j operand");
+           return;
+         }
+       i = trunc_int_for_mode (i, QImode);
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+
+    case 'P':
+      {
+       /* Print a constant plus one.  */
+       if (!CONST_INT_P (x))
+         {
+           output_operand_lossage ("invalid %%P operand");
+           return;
+         }
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) + 1);
+       return;
+      }
+
+    case 'm':
+    case 'M':
+      {
+       /* Print a bfextu-style bit range.  */
+       int first_bit, last_bit;
+       HOST_WIDE_INT flip = (code == 'm') ? ~0 : 0;
+
+       if (!CONST_INT_P (x)
+           || !tilegx_bitfield_operand_p (INTVAL (x) ^ flip,
+                                          &first_bit, &last_bit))
+         {
+           output_operand_lossage ("invalid %%%c operand", code);
+           return;
+         }
+
+       fprintf (file, "%d, %d", first_bit, last_bit);
+       return;
+      }
+
+    case 'N':
+      {
+       const char *reg = NULL;
+
+       /* Print a network register.  */
+       if (!CONST_INT_P (x))
+         {
+           output_operand_lossage ("invalid %%N operand");
+           return;
+         }
+
+       switch (INTVAL (x))
+         {
+         case TILEGX_NETREG_IDN0: reg = "idn0"; break;
+         case TILEGX_NETREG_IDN1: reg = "idn1"; break;
+         case TILEGX_NETREG_UDN0: reg = "udn0"; break;
+         case TILEGX_NETREG_UDN1: reg = "udn1"; break;
+         case TILEGX_NETREG_UDN2: reg = "udn2"; break;
+         case TILEGX_NETREG_UDN3: reg = "udn3"; break;
+         default:
+           gcc_unreachable ();
+         }
+
+       fprintf (file, reg);
+       return;
+      }
+
+    case 'p':
+      if (GET_CODE (x) == SYMBOL_REF)
+       {
+         if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
+           fprintf (file, "plt(");
+         output_addr_const (file, x);
+         if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
+           fprintf (file, ")");
+       }
+      else
+       output_addr_const (file, x);
+      return;
+
+    case 'r':
+      /* In this case we need a register.  Use 'zero' if the operand
+         is const0_rtx.  */
+      if (x == const0_rtx
+         || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
+       {
+         fputs ("zero", file);
+         return;
+       }
+      else if (!REG_P (x))
+       {
+         output_operand_lossage ("invalid operand for 'r' specifier");
+         return;
+       }
+      /* FALLTHRU */
+
+    case 0:
+      if (REG_P (x))
+       {
+         fprintf (file, "%s", reg_names[REGNO (x)]);
+         return;
+       }
+      else if (MEM_P (x))
+       {
+         output_memory_reference_mode = VOIDmode;
+         output_address (XEXP (x, 0));
+         return;
+       }
+      else
+       {
+         output_addr_const (file, x);
+         return;
+       }
+    }
+
+  debug_rtx (x);
+  output_operand_lossage ("unable to print out operand yet; code == %d (%c)",
+                         code, code);
+}
+
+
+/* Implement TARGET_PRINT_OPERAND_ADDRESS.  */
+static void
+tilegx_print_operand_address (FILE *file, rtx addr)
+{
+  if (GET_CODE (addr) == POST_DEC
+      || GET_CODE (addr) == POST_INC)
+    {
+      int offset = GET_MODE_SIZE (output_memory_reference_mode);
+
+      gcc_assert (output_memory_reference_mode != VOIDmode);
+
+      if (output_memory_autoinc_first)
+       fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
+      else
+       fprintf (file, "%d",
+                GET_CODE (addr) == POST_DEC ? -offset : offset);
+    }
+  else if (GET_CODE (addr) == POST_MODIFY)
+    {
+      gcc_assert (output_memory_reference_mode != VOIDmode);
+
+      gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
+
+      if (output_memory_autoinc_first)
+       fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
+      else
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+                INTVAL (XEXP (XEXP (addr, 1), 1)));
+    }
+  else
+    tilegx_print_operand (file, addr, 'r');
+}
+
+
+/* Machine mode of current insn, for determining curly brace
+   placement.  */
+static enum machine_mode insn_mode;
+
+
+/* Implement FINAL_PRESCAN_INSN.  This is used to emit bundles.  */
+void
+tilegx_final_prescan_insn (rtx insn)
+{
+  /* Record this for tilegx_asm_output_opcode to examine.  */
+  insn_mode = GET_MODE (insn);
+}
+
+
+/* While emitting asm, are we currently inside '{' for a bundle? */
+static bool tilegx_in_bundle = false;
+
+/* Implement ASM_OUTPUT_OPCODE.  Prepend/append curly braces as
+   appropriate given the bundling information recorded by
+   tilegx_gen_bundles.  */
+const char *
+tilegx_asm_output_opcode (FILE *stream, const char *code)
+{
+  bool pseudo = !strcmp (code, "pseudo");
+
+  if (!tilegx_in_bundle && insn_mode == SImode)
+    {
+      /* Start a new bundle.  */
+      fprintf (stream, "{\n\t");
+      tilegx_in_bundle = true;
+    }
+
+  if (tilegx_in_bundle && insn_mode == QImode)
+    {
+      /* Close an existing bundle.  */
+      static char buf[100];
+
+      gcc_assert (strlen (code) + 3 + 1 < sizeof (buf));
+
+      strcpy (buf, pseudo ? "" : code);
+      strcat (buf, "\n\t}");
+      tilegx_in_bundle = false;
+
+      return buf;
+    }
+  else
+    {
+      return pseudo ? "" : code;
+    }
+}
+
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+void
+tilegx_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
+{
+  if (tilegx_in_bundle)
+    {
+      fprintf (file, "\t}\n");
+    }
+
+  if (flag_pic)
+    {
+      fprintf (file,
+              "\t{\n"
+              "\tmove\tr10, lr\n"
+              "\tjal\t%s@plt\n"
+              "\t}\n", MCOUNT_NAME);
+    }
+  else
+    {
+      fprintf (file,
+              "\t{\n"
+              "\tmove\tr10, lr\n"
+              "\tjal\t%s\n"
+              "\t}\t\n", MCOUNT_NAME);
+    }
+
+  tilegx_in_bundle = false;
+}
+
+
+/* Implement TARGET_ASM_FILE_END.  */
+static void
+tilegx_file_end (void)
+{
+  if (NEED_INDICATE_EXEC_STACK)
+    file_end_indicate_exec_stack ();
+}
+
+
+
+#undef  TARGET_HAVE_TLS
+#define TARGET_HAVE_TLS HAVE_AS_TLS
+
+#undef  TARGET_OPTION_OVERRIDE
+#define TARGET_OPTION_OVERRIDE tilegx_option_override
+
+#undef  TARGET_SCALAR_MODE_SUPPORTED_P
+#define TARGET_SCALAR_MODE_SUPPORTED_P tilegx_scalar_mode_supported_p
+
+#undef  TARGET_VECTOR_MODE_SUPPORTED_P
+#define TARGET_VECTOR_MODE_SUPPORTED_P tilegx_vector_mode_supported_p
+
+#undef  TARGET_CANNOT_FORCE_CONST_MEM
+#define TARGET_CANNOT_FORCE_CONST_MEM tilegx_cannot_force_const_mem
+
+#undef  TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL tilegx_function_ok_for_sibcall
+
+#undef  TARGET_PASS_BY_REFERENCE
+#define TARGET_PASS_BY_REFERENCE tilegx_pass_by_reference
+
+#undef  TARGET_RETURN_IN_MEMORY
+#define TARGET_RETURN_IN_MEMORY tilegx_return_in_memory
+
+#undef  TARGET_MODE_REP_EXTENDED
+#define TARGET_MODE_REP_EXTENDED tilegx_mode_rep_extended
+
+#undef  TARGET_FUNCTION_ARG_BOUNDARY
+#define TARGET_FUNCTION_ARG_BOUNDARY tilegx_function_arg_boundary
+
+#undef  TARGET_FUNCTION_ARG
+#define TARGET_FUNCTION_ARG tilegx_function_arg
+
+#undef  TARGET_FUNCTION_ARG_ADVANCE
+#define TARGET_FUNCTION_ARG_ADVANCE tilegx_function_arg_advance
+
+#undef  TARGET_FUNCTION_VALUE
+#define TARGET_FUNCTION_VALUE tilegx_function_value
+
+#undef  TARGET_LIBCALL_VALUE
+#define TARGET_LIBCALL_VALUE tilegx_libcall_value
+
+#undef  TARGET_FUNCTION_VALUE_REGNO_P
+#define TARGET_FUNCTION_VALUE_REGNO_P tilegx_function_value_regno_p
+
+#undef  TARGET_PROMOTE_FUNCTION_MODE
+#define TARGET_PROMOTE_FUNCTION_MODE default_promote_function_mode_always_promote
+
+#undef  TARGET_PROMOTE_PROTOTYPES
+#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false
+
+#undef  TARGET_BUILD_BUILTIN_VA_LIST
+#define TARGET_BUILD_BUILTIN_VA_LIST tilegx_build_builtin_va_list
+
+#undef  TARGET_EXPAND_BUILTIN_VA_START
+#define TARGET_EXPAND_BUILTIN_VA_START tilegx_va_start
+
+#undef  TARGET_SETUP_INCOMING_VARARGS
+#define TARGET_SETUP_INCOMING_VARARGS tilegx_setup_incoming_varargs
+
+#undef  TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR tilegx_gimplify_va_arg_expr
+
+#undef  TARGET_RTX_COSTS
+#define TARGET_RTX_COSTS tilegx_rtx_costs
+
+#undef  TARGET_SHIFT_TRUNCATION_MASK
+#define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
+
+#undef  TARGET_INIT_LIBFUNCS
+#define TARGET_INIT_LIBFUNCS tilegx_init_libfuncs
+
+/* Limit to what we can reach in one addli.  */
+#undef  TARGET_MIN_ANCHOR_OFFSET
+#define TARGET_MIN_ANCHOR_OFFSET -32768
+#undef  TARGET_MAX_ANCHOR_OFFSET
+#define TARGET_MAX_ANCHOR_OFFSET 32767
+
+#undef  TARGET_LEGITIMATE_CONSTANT_P
+#define TARGET_LEGITIMATE_CONSTANT_P tilegx_legitimate_constant_p
+
+#undef  TARGET_LEGITIMATE_ADDRESS_P
+#define TARGET_LEGITIMATE_ADDRESS_P tilegx_legitimate_address_p
+
+#undef  TARGET_LEGITIMIZE_ADDRESS
+#define TARGET_LEGITIMIZE_ADDRESS tilegx_legitimize_address
+
+#undef  TARGET_DELEGITIMIZE_ADDRESS
+#define TARGET_DELEGITIMIZE_ADDRESS tilegx_delegitimize_address
+
+#undef  TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS  tilegx_init_builtins
+
+#undef  TARGET_BUILTIN_DECL
+#define TARGET_BUILTIN_DECL tilegx_builtin_decl
+
+#undef   TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN tilegx_expand_builtin
+
+#undef  TARGET_CONDITIONAL_REGISTER_USAGE
+#define TARGET_CONDITIONAL_REGISTER_USAGE tilegx_conditional_register_usage
+
+#undef  TARGET_FRAME_POINTER_REQUIRED
+#define TARGET_FRAME_POINTER_REQUIRED tilegx_frame_pointer_required
+
+#undef  TARGET_DELAY_SCHED2
+#define TARGET_DELAY_SCHED2 true
+
+#undef  TARGET_DELAY_VARTRACK
+#define TARGET_DELAY_VARTRACK true
+
+#undef  TARGET_SCHED_ISSUE_RATE
+#define TARGET_SCHED_ISSUE_RATE tilegx_issue_rate
+
+#undef  TARGET_SCHED_ADJUST_COST
+#define TARGET_SCHED_ADJUST_COST tilegx_sched_adjust_cost
+
+#undef  TARGET_MACHINE_DEPENDENT_REORG
+#define TARGET_MACHINE_DEPENDENT_REORG tilegx_reorg
+
+#undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
+  hook_bool_const_tree_hwi_hwi_const_tree_true
+
+#undef  TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK tilegx_output_mi_thunk
+
+#undef  TARGET_ASM_TRAMPOLINE_TEMPLATE
+#define TARGET_ASM_TRAMPOLINE_TEMPLATE tilegx_asm_trampoline_template
+
+#undef  TARGET_TRAMPOLINE_INIT
+#define TARGET_TRAMPOLINE_INIT tilegx_trampoline_init
+
+#undef  TARGET_PRINT_OPERAND
+#define TARGET_PRINT_OPERAND tilegx_print_operand
+
+#undef  TARGET_PRINT_OPERAND_ADDRESS
+#define TARGET_PRINT_OPERAND_ADDRESS tilegx_print_operand_address
+
+#undef  TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END tilegx_file_end
+
+#undef  TARGET_ASM_ALIGNED_DI_OP
+#define TARGET_ASM_ALIGNED_DI_OP "\t.quad\t"
+
+
+struct gcc_target targetm = TARGET_INITIALIZER;
+
+#include "gt-tilegx.h"
diff --git a/gcc/config/tilegx/tilegx.h b/gcc/config/tilegx/tilegx.h
new file mode 100644 (file)
index 0000000..081ecc1
--- /dev/null
@@ -0,0 +1,505 @@
+/* Definitions of target machine for GNU compiler for TILE-Gx.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is used by tilegx_cpu_cpp_builtins to indicate the byte order
+   we're compiling for.  */
+#define TILEGX_CPU_CPP_ENDIAN_BUILTINS()       \
+  do                                           \
+    {                                          \
+      if (TARGET_BIG_ENDIAN)                   \
+       builtin_define ("__BIG_ENDIAN__");      \
+      else                                     \
+       builtin_define ("__LITTLE_ENDIAN__");   \
+    }                                          \
+  while (0)
+
+
+/* Target CPU builtins.  */
+#define TARGET_CPU_CPP_BUILTINS() \
+  tilegx_cpu_cpp_builtins (pfile)
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE (TARGET_32BIT ? "int" : "long int")
+
+#undef SIZE_TYPE
+#define SIZE_TYPE (TARGET_32BIT ? "unsigned int" : "long unsigned int")
+
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "int"
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE 32
+\f
+
+/* Target machine storage layout */
+
+#define TARGET_BIG_ENDIAN 0
+#define BITS_BIG_ENDIAN 0
+#define BYTES_BIG_ENDIAN TARGET_BIG_ENDIAN
+#define WORDS_BIG_ENDIAN TARGET_BIG_ENDIAN
+
+#define UNITS_PER_WORD 8
+#define PARM_BOUNDARY BITS_PER_WORD
+#define STACK_BOUNDARY 64
+#define FUNCTION_BOUNDARY 64
+#define BIGGEST_ALIGNMENT 64
+#define STRICT_ALIGNMENT 1
+
+#define INT_TYPE_SIZE         32
+#define LONG_TYPE_SIZE        (TARGET_32BIT ? 32 : 64)
+#define LONG_LONG_TYPE_SIZE   64
+#define FLOAT_TYPE_SIZE       32
+#define DOUBLE_TYPE_SIZE      64
+#define LONG_DOUBLE_TYPE_SIZE 64
+#define POINTER_SIZE          LONG_TYPE_SIZE
+
+#define PCC_BITFIELD_TYPE_MATTERS 1
+#define FASTEST_ALIGNMENT 64
+#define BIGGEST_FIELD_ALIGNMENT 64
+#define WIDEST_HARDWARE_FP_SIZE 64
+
+/* Unaligned moves trap and are very slow.  */
+#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
+
+/* Make strings word-aligned so strcpy from constants will be
+   faster.  */
+#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
+  ((TREE_CODE (EXP) == STRING_CST      \
+    && (ALIGN) < FASTEST_ALIGNMENT)    \
+   ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make arrays of chars word-aligned for the same reasons.  */
+#define DATA_ALIGNMENT(TYPE, ALIGN)            \
+  (TREE_CODE (TYPE) == ARRAY_TYPE              \
+   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode   \
+   && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make local arrays of chars word-aligned for the same reasons.  */
+#define LOCAL_ALIGNMENT(TYPE, ALIGN) DATA_ALIGNMENT (TYPE, ALIGN)
+\f
+
+/* Standard register usage.  */
+
+#define FIRST_PSEUDO_REGISTER (64 + 4)
+
+#define FIXED_REGISTERS \
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1, 1}
+#define CALL_USED_REGISTERS \
+ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1, 1}
+
+#define CALL_REALLY_USED_REGISTERS \
+ CALL_USED_REGISTERS
+
+#define REG_ALLOC_ORDER {                              \
+      10, 11, 12, 13, 14, /* call used */              \
+      15, 16, 17, 18, 19,                              \
+      20, 21, 22, 23, 24,                              \
+      25, 26, 27, 28, 29,                              \
+                                                       \
+      9, 8, 7, 6, 5,      /* argument */               \
+      4, 3, 2, 1, 0,                                   \
+                                                       \
+      55,                /* return address */          \
+                                                       \
+      30, 31, 32, 33, 34, /* call saved registers */   \
+      35, 36, 37, 38, 39,                              \
+      40, 41, 42, 43, 44,                              \
+      45, 46, 47, 48, 49,                              \
+      50, 51,                                          \
+                                                       \
+      52,                /* hard frame pointer */      \
+      53, 54,            /* tp, sp */                  \
+                                                       \
+      56, 57, 58, 59, 60, /* special purpose */                \
+      61, 62, 63, 64, 65, /* or fake registers */      \
+      66, 67                                           \
+}
+
+#define HARD_REGNO_NREGS(REGNO, MODE)  \
+  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
+
+#define MODES_TIEABLE_P(MODE1, MODE2)  1
+
+/* Register that holds an address into the text segment that can be
+   used by pic code.  */
+#define TILEGX_PIC_TEXT_LABEL_REGNUM (flag_pic ? 50 : INVALID_REGNUM)
+#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 51 : INVALID_REGNUM)
+#define HARD_FRAME_POINTER_REGNUM 52
+#define THREAD_POINTER_REGNUM 53
+#define STACK_POINTER_REGNUM 54
+#define TILEGX_LINK_REGNUM 55
+#define FRAME_POINTER_REGNUM 64
+#define ARG_POINTER_REGNUM 65
+/* SPR storing the comparison value for compare and exchange.  */
+#define TILEGX_CMPEXCH_REGNUM 66
+/* Pseudo registers used to enforce order between instructions that
+   touch the networks.  */
+#define TILEGX_NETORDER_REGNUM 67
+#define STATIC_CHAIN_REGNUM 10
+\f
+
+enum reg_class
+{
+  NO_REGS,
+  R0_REGS,
+  R1_REGS,
+  R2_REGS,
+  R3_REGS,
+  R4_REGS,
+  R5_REGS,
+  R6_REGS,
+  R7_REGS,
+  R8_REGS,
+  R9_REGS,
+  R10_REGS,
+  ALL_REGS,
+  LIM_REG_CLASSES
+};
+
+#define N_REG_CLASSES (int) LIM_REG_CLASSES
+
+/* Since GENERAL_REGS is the same class as ALL_REGS, don't give it a 
+   different class number; just make it an alias.  */
+#define GENERAL_REGS ALL_REGS
+
+#define REG_CLASS_NAMES        \
+  { \
+    "NO_REGS", \
+    "R0_REGS", \
+    "R1_REGS", \
+    "R2_REGS", \
+    "R3_REGS", \
+    "R4_REGS", \
+    "R5_REGS", \
+    "R6_REGS", \
+    "R7_REGS", \
+    "R8_REGS", \
+    "R9_REGS", \
+    "R10_REGS", \
+    "ALL_REGS" \
+  }
+
+#define REG_CLASS_CONTENTS \
+  { \
+    { 0 }, \
+    { 1 << 0 }, \
+    { 1 << 1 }, \
+    { 1 << 2 }, \
+    { 1 << 3 }, \
+    { 1 << 4 }, \
+    { 1 << 5 }, \
+    { 1 << 6 }, \
+    { 1 << 7 }, \
+    { 1 << 8 }, \
+    { 1 << 9 }, \
+    { 1 << 10 }, \
+    { 0xffffffff, 0xffffffff } \
+  }
+
+#define REGNO_REG_CLASS(REGNO) \
+  ((unsigned)(REGNO) <= 10 ? \
+   (enum reg_class)(R0_REGS + (REGNO)) : ALL_REGS)
+
+#define INDEX_REG_CLASS NO_REGS
+#define BASE_REG_CLASS ALL_REGS
+
+#define PREFERRED_RELOAD_CLASS(X,CLASS)  (CLASS)
+
+#define CLASS_MAX_NREGS(CLASS, MODE)   \
+ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+\f
+
+/* Stack layout; function entry, exit and calling.  */
+
+#define STACK_GROWS_DOWNWARD
+#define FRAME_GROWS_DOWNWARD 1
+#define STARTING_FRAME_OFFSET 0
+
+#define DYNAMIC_CHAIN_ADDRESS(FRAME) plus_constant ((FRAME), UNITS_PER_WORD)
+
+#define FIRST_PARM_OFFSET(FNDECL) 0
+
+#define ACCUMULATE_OUTGOING_ARGS 1
+
+#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
+
+#define INCOMING_FRAME_SP_OFFSET 0
+
+#define STACK_POINTER_OFFSET (2 * UNITS_PER_WORD)
+
+#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
+
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* The first 10 registers may hold return value.  */
+#define TILEGX_NUM_RETURN_REGS 10
+
+/* The first 10 registers hold function arguments.  */
+#define TILEGX_NUM_ARG_REGS 10
+
+#define FUNCTION_ARG_REGNO_P(N) ((N) < TILEGX_NUM_ARG_REGS)
+
+/* The type used to store the number of words of arguments scanned so
+   far during argument scanning.  This includes any space that is
+   skipped.  */
+#define CUMULATIVE_ARGS int
+
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+ ((CUM) = 0)
+\f
+
+#define ELIMINABLE_REGS                                        \
+  {{ARG_POINTER_REGNUM,         STACK_POINTER_REGNUM},         \
+  {ARG_POINTER_REGNUM,  HARD_FRAME_POINTER_REGNUM},    \
+  {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},                \
+  {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
+
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
+  ((OFFSET) = tilegx_initial_elimination_offset((FROM),(TO)))
+
+#define FUNCTION_PROFILER(FILE, LABELNO) \
+  tilegx_function_profiler (FILE, LABELNO)
+
+#define TRAMPOLINE_SIZE (TARGET_32BIT ? 48 : 56)
+#define TRAMPOLINE_ALIGNMENT 64
+#define TRAMPOLINE_SECTION text_section
+\f
+
+/* Call frame debugging information.  */
+
+#define INCOMING_RETURN_ADDR_RTX  gen_rtx_REG (Pmode, TILEGX_LINK_REGNUM)
+
+#define RETURN_ADDR_RTX tilegx_return_addr
+
+#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (TILEGX_LINK_REGNUM)
+
+#define DWARF_ZERO_REG 63
+
+#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N + 12) : INVALID_REGNUM)
+#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 11)
+#define EH_RETURN_HANDLER_RTX tilegx_eh_return_handler_rtx ()
+
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
+  tilegx_asm_preferred_eh_data_format ((CODE), (GLOBAL))
+\f
+
+/* Addressing modes, and classification of registers for them.  */
+
+#define HAVE_POST_INCREMENT 1
+#define HAVE_POST_DECREMENT 1
+#define HAVE_POST_MODIFY_DISP 1
+
+#define REGNO_OK_FOR_INDEX_P(regno) 0
+#define REGNO_OK_FOR_BASE_P(regno)     \
+  ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
+
+#define MAX_REGS_PER_ADDRESS 1
+
+#define CONSTANT_ADDRESS_P(X) 0
+
+#define LEGITIMATE_PIC_OPERAND_P(X) tilegx_legitimate_pic_operand_p (X)
+\f
+
+#define CASE_VECTOR_MODE Pmode
+#define CASE_VECTOR_PC_RELATIVE 0
+#define JUMP_TABLES_IN_TEXT_SECTION 0
+
+#define DEFAULT_SIGNED_CHAR 1
+
+#define MOVE_MAX UNITS_PER_WORD
+
+/* Use a value of 11 for MOVE_RATIO and friends, because TILEPro
+   returns structs as large as 10 words in registers.  Because of some
+   some code generation inefficiency, we never get smaller code for
+   turning that into a memcpy, so pick a value that guarantees this
+   doesn't happen.  */
+#define TILEGX_CALL_RATIO 11
+#define MOVE_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
+#define CLEAR_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
+#define SET_RATIO(speed) ((speed) ? 15 : TILEGX_CALL_RATIO)
+
+#define WORD_REGISTER_OPERATIONS
+
+#define LOAD_EXTEND_OP(MODE) ((MODE) == SImode ? SIGN_EXTEND : ZERO_EXTEND)
+
+#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)    \
+  if (GET_MODE_CLASS (MODE) == MODE_INT                \
+      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
+    {                                           \
+      if ((MODE) == SImode)                     \
+        (UNSIGNEDP) = 0;                        \
+      (MODE) = DImode;                          \
+    }
+
+/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode
+   register.  */
+#define SLOW_BYTE_ACCESS 1
+
+#define SHIFT_COUNT_TRUNCATED 0
+
+#define SHORT_IMMEDIATES_SIGN_EXTEND
+
+/* We represent all SI values as sign-extended DI values in
+   registers.  */
+#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) \
+  ((INPREC) <= 32 || (OUTPREC) > 32)
+
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1)
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 64, 1)
+
+#define Pmode (TARGET_32BIT ? SImode : DImode)
+
+#define STACK_SIZE_MODE Pmode
+
+#define STORE_FLAG_VALUE 1
+
+#define FUNCTION_MODE DImode
+
+#define NO_FUNCTION_CSE 1
+
+#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
+  ((LENGTH) = tilegx_adjust_insn_length ((INSN), (LENGTH)))
+
+#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
+
+#define BRANCH_COST(speed_p, predictable_p) ((predictable_p) ? 2 : 6)
+\f
+
+/* Control the assembler format that we output.  */
+
+#undef NO_DOLLAR_IN_LABEL
+
+#define ASM_COMMENT_START "##"
+
+#define TEXT_SECTION_ASM_OP "\t.text"
+
+#define DATA_SECTION_ASM_OP "\t.data"
+
+#undef READONLY_DATA_SECTION_ASM_OP
+#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata, \"a\""
+
+#undef BSS_SECTION_ASM_OP
+#define BSS_SECTION_ASM_OP     "\t.section\t.bss, \"wa\""
+
+#undef INIT_SECTION_ASM_OP
+#define INIT_SECTION_ASM_OP    "\t.section\t.init, \"ax\""
+
+#undef FINI_SECTION_ASM_OP
+#define FINI_SECTION_ASM_OP    "\t.section\t.fini, \"ax\""
+
+#define GLOBAL_ASM_OP ".global "
+
+#define SUPPORTS_WEAK 1
+
+#define USER_LABEL_PREFIX ""
+
+#define REGISTER_PREFIX ""
+#define REGISTER_NAMES                                                  \
+  { "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",       \
+    "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",      \
+    "r16",  "r17",  "r18",  "r19",  "r20",  "r21",  "r22",  "r23",      \
+    "r24",  "r25",  "r26",  "r27",  "r28",  "r29",  "r30",  "r31",      \
+    "r32",  "r33",  "r34",  "r35",  "r36",  "r37",  "r38",  "r39",      \
+    "r40",  "r41",  "r42",  "r43",  "r44",  "r45",  "r46",  "r47",      \
+    "r48",  "r49",  "r50",  "r51",  "r52",  "tp",   "sp",   "lr",       \
+    "?r56?","idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero",     \
+    "?FRAME?", "?ARG?", "?CMPEXCH?", "?NET?" }
+
+#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
+  tilegx_final_prescan_insn (insn)
+
+#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
+  (PTR = tilegx_asm_output_opcode (STREAM, PTR))
+
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)                   \
+  do                                                           \
+    {                                                          \
+      char label[256];                                         \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));       \
+      fprintf (FILE, "\t%s ",                                  \
+               integer_asm_op (GET_MODE_SIZE (Pmode), TRUE));  \
+      assemble_name (FILE, label);                             \
+      fprintf (FILE, "\n");                                    \
+    }                                                          \
+  while (0)
+
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)       \
+  do                                                           \
+    {                                                          \
+      char label[256];                                         \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));       \
+      fprintf (FILE, "\t%s ",                                  \
+               integer_asm_op (GET_MODE_SIZE (Pmode), TRUE));  \
+      assemble_name (FILE, label);                             \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL));         \
+      fprintf (FILE, "-");                                     \
+      assemble_name (FILE, label);                             \
+      fprintf (FILE, "\n");                                    \
+    }                                                          \
+  while (0)
+
+#define ASM_OUTPUT_ALIGN(FILE,LOG)  \
+  do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
+
+#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)   \
+  ( fputs (".comm ", (FILE)),                          \
+    assemble_name ((FILE), (NAME)),                    \
+    fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
+
+#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)    \
+  ( fputs (".lcomm ", (FILE)),                         \
+    assemble_name ((FILE), (NAME)),                    \
+    fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
+
+\f
+
+#define INIT_EXPANDERS tilegx_init_expanders ()
+
+/* A C structure for machine-specific, per-function data.  This is
+   added to the cfun structure.  */
+typedef struct GTY(()) machine_function
+{
+  /* Symbol for the text label used for pic.  */
+  rtx text_label_symbol;
+
+  /* Register for the text label.  */
+  rtx text_label_rtx;
+
+  /* Register for the pic offset table.  */
+  rtx got_rtx;
+
+  /* The function calls tls_get_addr.  */
+  int calls_tls_get_addr;
+} machine_function;
+
+#ifndef HAVE_AS_TLS
+#define HAVE_AS_TLS 0
+#endif
diff --git a/gcc/config/tilegx/tilegx.md b/gcc/config/tilegx/tilegx.md
new file mode 100644 (file)
index 0000000..033d125
--- /dev/null
@@ -0,0 +1,5121 @@
+;; Machine description for Tilera TILE-Gx chip for GCC.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_constants [
+  ;;
+  ;; The following represent intrinsic insns, organized by latency.
+  ;;
+
+  ;; single cycle
+  (UNSPEC_INSN_ADDR_SHL16INSLI         1)
+  (UNSPEC_INSN_BFEXTS                  2)
+  (UNSPEC_INSN_BFEXTU                  3)
+  (UNSPEC_INSN_BFINS                   4)
+  (UNSPEC_INSN_CRC32_32                5)
+  (UNSPEC_INSN_CRC32_8                 6)
+  (UNSPEC_INSN_DBLALIGN                7)
+  (UNSPEC_INSN_DBLALIGN2               8)
+  (UNSPEC_INSN_DBLALIGN4               9)
+  (UNSPEC_INSN_DBLALIGN6               10)
+  (UNSPEC_INSN_DRAIN                   11)
+  (UNSPEC_INSN_DTLBPR                  12)
+  (UNSPEC_INSN_FINV                    13)
+  (UNSPEC_INSN_FLUSH                   14)
+  (UNSPEC_INSN_FLUSHWB                 15)
+  (UNSPEC_INSN_FNOP                    16)
+  (UNSPEC_INSN_ICOH                    17)
+  (UNSPEC_INSN_ILL                     18)
+  (UNSPEC_INSN_INFO                    19)
+  (UNSPEC_INSN_INFOL                   20)
+  (UNSPEC_INSN_INV                     21)
+  (UNSPEC_INSN_LNK                     22)
+  (UNSPEC_INSN_MFSPR                   23)
+  (UNSPEC_INSN_MM                      24)
+  (UNSPEC_INSN_MTSPR                   25)
+  (UNSPEC_INSN_NAP                     26)
+  (UNSPEC_INSN_PREFETCH_L1_FAULT       27)
+  (UNSPEC_INSN_PREFETCH_L2_FAULT       28)
+  (UNSPEC_INSN_PREFETCH_L3_FAULT       29)
+  (UNSPEC_INSN_REVBITS                 30)
+  (UNSPEC_INSN_SHUFFLEBYTES            31)
+  (UNSPEC_INSN_TBLIDXB0                32)
+  (UNSPEC_INSN_TBLIDXB1                33)
+  (UNSPEC_INSN_TBLIDXB2                34)
+  (UNSPEC_INSN_TBLIDXB3                35)
+  (UNSPEC_INSN_V1AVGU                  36)
+  (UNSPEC_INSN_V2AVGS                  37)
+  (UNSPEC_INSN_WH64                    38)
+
+  ;; 2 cycles
+  (UNSPEC_INSN_CMUL                    100)
+  (UNSPEC_INSN_CMULA                   101)
+  (UNSPEC_INSN_CMULAF                  102)
+  (UNSPEC_INSN_CMULFR                  103)
+  (UNSPEC_INSN_CMULHR                  104)
+  (UNSPEC_INSN_CMULF                   105)
+  (UNSPEC_INSN_CMULH                   106)
+  (UNSPEC_INSN_EXCH                    107)
+  (UNSPEC_INSN_FDOUBLE_ADDSUB          108)
+  (UNSPEC_INSN_FDOUBLE_ADD_FLAGS       109)
+  (UNSPEC_INSN_FDOUBLE_MUL_FLAGS       110)
+  (UNSPEC_INSN_FDOUBLE_PACK1           111)
+  (UNSPEC_INSN_FDOUBLE_PACK2           112)
+  (UNSPEC_INSN_FDOUBLE_SUB_FLAGS       113)
+  (UNSPEC_INSN_FDOUBLE_UNPACK_MAX      114)
+  (UNSPEC_INSN_FDOUBLE_UNPACK_MIN      115)
+  (UNSPEC_INSN_FETCHADDGEZ             116)
+  (UNSPEC_INSN_FSINGLE_ADD1            117)
+  (UNSPEC_INSN_FSINGLE_ADDSUB2         118)
+  (UNSPEC_INSN_FSINGLE_MUL1            119)
+  (UNSPEC_INSN_FSINGLE_MUL2            120)
+  (UNSPEC_INSN_FSINGLE_PACK1           121)
+  (UNSPEC_INSN_FSINGLE_PACK2           122)
+  (UNSPEC_INSN_FSINGLE_SUB1            123)
+  (UNSPEC_INSN_MULAX                   124)
+  (UNSPEC_INSN_MULA_HS_HS              125)
+  (UNSPEC_INSN_MULA_HS_HU              126)
+  (UNSPEC_INSN_MULA_HS_LS              127)
+  (UNSPEC_INSN_MULA_HS_LU              128)
+  (UNSPEC_INSN_MULA_HU_HU              129)
+  (UNSPEC_INSN_MULA_HU_LS              130)
+  (UNSPEC_INSN_MULA_HU_LU              131)
+  (UNSPEC_INSN_MULA_LS_LS              132)
+  (UNSPEC_INSN_MULA_LS_LU              133)
+  (UNSPEC_INSN_MULA_LU_LU              134)
+  (UNSPEC_INSN_MUL_HS_HS               135)
+  (UNSPEC_INSN_MUL_HS_HU               136)
+  (UNSPEC_INSN_MUL_HS_LS               137)
+  (UNSPEC_INSN_MUL_HS_LU               138)
+  (UNSPEC_INSN_MUL_HU_HU               139)
+  (UNSPEC_INSN_MUL_HU_LS               140)
+  (UNSPEC_INSN_MUL_HU_LU               141)
+  (UNSPEC_INSN_MUL_LS_LS               142)
+  (UNSPEC_INSN_MUL_LS_LU               143)
+  (UNSPEC_INSN_MUL_LU_LU               144)
+  (UNSPEC_INSN_V1ADIFFU                145)
+  (UNSPEC_INSN_V1DDOTPU                146)
+  (UNSPEC_INSN_V1DDOTPUA               147)
+  (UNSPEC_INSN_V1DDOTPUS               148)
+  (UNSPEC_INSN_V1DDOTPUSA              149)
+  (UNSPEC_INSN_V1DOTP                  150)
+  (UNSPEC_INSN_V1DOTPA                 151)
+  (UNSPEC_INSN_V1DOTPU                 152)
+  (UNSPEC_INSN_V1DOTPUA                153)
+  (UNSPEC_INSN_V1DOTPUS                154)
+  (UNSPEC_INSN_V1DOTPUSA               155)
+  (UNSPEC_INSN_V1SADAU                 156)
+  (UNSPEC_INSN_V1SADU                  157)
+  (UNSPEC_INSN_V2ADIFFS                158)
+  (UNSPEC_INSN_V2DOTP                  159)
+  (UNSPEC_INSN_V2DOTPA                 160)
+  (UNSPEC_INSN_V2MULFSC                161)
+  (UNSPEC_INSN_V2SADAS                 162)
+  (UNSPEC_INSN_V2SADAU                 163)
+  (UNSPEC_INSN_V2SADS                  164)
+  (UNSPEC_INSN_V2SADU                  165)
+
+  ;; 11 cycles
+  (UNSPEC_INSN_CMPEXCH                 200)
+
+  ;;
+  ;; The following are special insns.
+  ;;
+
+  ;; Blockage
+  (UNSPEC_BLOCKAGE                     201)
+
+  ;; Lnk and its label
+  (UNSPEC_LNK_AND_LABEL                202)
+
+  ;; Memory fence
+  (UNSPEC_MF                          203)
+
+  ;; Insns generating difference of two labels
+  (UNSPEC_MOV_PCREL_STEP3              204)
+
+  ;; Latency specifying loads.
+  (UNSPEC_LATENCY_L2                   205)
+  (UNSPEC_LATENCY_MISS                 206)
+
+  ;; A pseudo-op that prevents network operations from being ordered.
+  (UNSPEC_NETWORK_BARRIER              207)
+
+  ;; Operations that access network registers.
+  (UNSPEC_NETWORK_RECEIVE              208)
+  (UNSPEC_NETWORK_SEND                 209)
+
+  ;; Stack protector operations
+  (UNSPEC_SP_SET                       210)
+  (UNSPEC_SP_TEST                      211)
+
+  ;; This is used to move a value to a SPR.
+  (UNSPEC_SPR_MOVE                     212)
+
+  ;; A call to __tls_get_addr
+  (UNSPEC_TLS_GD_CALL                  213)
+
+  ;; An opaque TLS "add" operation for TLS general dynamic model
+  ;; access.
+  (UNSPEC_TLS_GD_ADD                   214)
+
+  ;; An opaque TLS "load" operation for TLS initial exec model access.
+  (UNSPEC_TLS_IE_LOAD                  215)
+
+  ;; An opaque TLS "add" operation for TLS access.
+  (UNSPEC_TLS_ADD                      216)
+
+  ;; Atomics
+  (UNSPEC_ATOMIC                       217)
+  (UNSPEC_CMPXCHG                      218)
+  (UNSPEC_XCHG                         219)
+
+  ;;
+  ;; The following are operands.
+  ;;
+  (UNSPEC_HW0                          300)
+  (UNSPEC_HW1                          301)
+  (UNSPEC_HW2                          302)
+  (UNSPEC_HW3                          303)
+  (UNSPEC_HW0_LAST                     304)
+  (UNSPEC_HW1_LAST                     305)
+  (UNSPEC_HW2_LAST                     306)
+
+  (UNSPEC_HW0_PCREL                    307)
+  (UNSPEC_HW1_LAST_PCREL               308)
+
+  (UNSPEC_HW0_GOT                      309)
+  (UNSPEC_HW0_LAST_GOT                 310)
+  (UNSPEC_HW1_LAST_GOT                 311)
+
+  (UNSPEC_HW0_TLS_GD                   312)
+  (UNSPEC_HW1_LAST_TLS_GD              313)
+
+  (UNSPEC_HW0_TLS_IE                   314)
+  (UNSPEC_HW1_LAST_TLS_IE              315)
+
+  (UNSPEC_HW0_TLS_LE                   316)
+  (UNSPEC_HW1_LAST_TLS_LE              317)
+
+  ;; This is used to wrap around the addresses of non-temporal load/store
+  ;; intrinsics.
+  (UNSPEC_NON_TEMPORAL                 318)
+])
+
+;; Mark the last instruction of various latencies, used to
+;; determine the rtx costs of unspec insns.
+(define_constants [
+  (TILEGX_LAST_LATENCY_1_INSN           99)
+  (TILEGX_LAST_LATENCY_2_INSN          199)
+  (TILEGX_LAST_LATENCY_INSN            299)
+])
+
+(define_constants [
+  (TILEGX_NETREG_IDN0 0)
+  (TILEGX_NETREG_IDN1 1)
+  (TILEGX_NETREG_UDN0 2)
+  (TILEGX_NETREG_UDN1 3)
+  (TILEGX_NETREG_UDN2 4)
+  (TILEGX_NETREG_UDN3 5)
+])
+
+(define_constants [
+  (TILEGX_CMPEXCH_REG  66)
+  (TILEGX_NETORDER_REG 67)
+])
+
+
+;; Operand and operator predicates and constraints
+
+(include "predicates.md")
+(include "constraints.md")
+(include "tilegx-generic.md")
+
+;; Define an insn type attribute.  This defines what pipes things can go in.
+(define_attr "type"
+  "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_miss,X01,Y0,Y0_2cycle,Y1,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing"
+  (const_string "Y01"))
+
+(define_attr "length" ""
+   (cond [(eq_attr "type" "X1_branch")
+         (if_then_else
+          (and (le (minus (match_dup 0) (pc)) (const_int 524280))
+               (le (minus (pc) (match_dup 0)) (const_int 524288)))
+          (const_int 8)
+          (const_int 16))
+         ]
+        (const_int 8)))
+
+
+;; Define some iterators.
+(define_mode_iterator IVMODE [SI DI V8QI V4HI V2SI])
+(define_mode_iterator IVNMODE [SI V8QI V4HI V2SI])
+(define_mode_iterator I48MODE [SI DI])
+(define_mode_iterator I48MODE2 [SI DI])
+(define_mode_iterator I124MODE [QI HI SI])
+(define_mode_iterator FI48MODE [SF DF SI DI])
+(define_mode_iterator VEC48MODE [V8QI V4HI])
+(define_mode_iterator VEC248MODE [V8QI V4HI V2SI])
+
+(define_mode_attr n [(QI "1") (HI "2") (SI "4") (DI "")
+                    (V8QI "1") (V4HI "2") (V2SI "4")])
+(define_mode_attr x [(SI "x") (DI "")])
+(define_mode_attr bitsuffix [(SI "_32bit") (DI "")])
+(define_mode_attr four_if_si [(SI "4") (DI "")])
+(define_mode_attr four_s_if_si [(SI "4s") (DI "")])
+(define_mode_attr nbits [(SI "5") (DI "6")])
+(define_mode_attr shift_pipe [(SI "X01") (DI "*")])
+
+;; Code iterator for either extend.
+(define_code_iterator any_extend [sign_extend zero_extend])
+
+;; Code iterator for all three shifts.
+(define_code_iterator any_shift [ashift ashiftrt lshiftrt])
+
+;; Code iterator for all byte ops without immediate variants.
+(define_code_iterator v1op [us_minus us_plus minus ne le leu mult])
+
+;; Code iterator for all 2-byte vector ops without immediate variants.
+(define_code_iterator v2op [ss_minus ss_plus minus ne le leu])
+
+;; Code iterator for all 4-byte vector ops without immediate variants.
+(define_code_iterator v4op [ss_minus ss_plus minus plus])
+
+;; Code iterator for all byte vector ops with immediate variants.
+(define_code_iterator v1op_immed [plus umax umin eq lt ltu])
+
+;; Code iterator for all 2-byte vector ops with immediate variants.
+(define_code_iterator v2op_immed [plus smax smin eq lt ltu])
+
+;; Code iterator for all 2-byte vector shifts without immediate variants.
+(define_code_iterator v2shift [ss_ashift])
+
+;; Code iterator for all 4-byte vector shifts without immediate variants.
+(define_code_iterator v4shift [ashift ashiftrt lshiftrt ss_ashift])
+
+;; <optab> expands to the name of the optab for a particular code.
+(define_code_attr optab [(ashift "ashl")
+                        (ashiftrt "ashr")
+                        (lshiftrt "lshr")
+                        (ss_ashift "ssashl")
+                        (eq "seq")
+                        (ne "sne")
+                        (lt "slt")
+                        (ltu "sltu")
+                        (le "sle")
+                        (leu "sleu")
+                        (minus "sub")
+                        (plus "add")
+                        (mult "mul")
+                        (smax "smax")
+                        (smin "smin")
+                        (ss_minus "sssub")
+                        (ss_plus "ssadd")
+                        (umax "umax")
+                        (umin "umin")
+                        (us_minus "ussub")
+                        (us_plus "usadd")
+                        ])
+
+;; <insn> expands to the name of the insn that implements a particular
+;; code.
+(define_code_attr insn [(ashift "shl")
+                       (ashiftrt "shrs")
+                       (lshiftrt "shru")
+                       (ss_ashift "shlsc")
+                       (eq "cmpeq")
+                       (ne "cmpne")
+                       (lt "cmplts")
+                       (ltu "cmpltu")
+                       (le "cmples")
+                       (leu "cmpleu")
+                       (minus "sub")
+                       (plus "add")
+                       (mult "multu")
+                       (smax "maxs")
+                       (smin "mins")
+                       (umax "maxu")
+                       (umin "minu")
+                       (ss_minus "subsc")
+                       (ss_plus  "addsc")
+                        (us_minus "subuc")
+                        (us_plus  "adduc")
+                       ])
+
+;; <pipe> expands to the pipeline resource that contains the
+;; particular code.
+(define_code_attr pipe [(ashift "X01")
+                       (ashiftrt "X01")
+                       (lshiftrt "X01")
+                       (ss_ashift "X01")
+                       (eq "X01")
+                       (ne "X01")
+                       (lt "X01")
+                       (ltu "X01")
+                       (le "X01")
+                       (leu "X01")
+                       (minus "X01")
+                       (plus "X01")
+                       (mult "X0_2cycle")
+                       (smax "X01")
+                       (smin "X01")
+                       (umax "X01")
+                       (umin "X01")
+                       (ss_minus "X01")
+                       (ss_plus  "X01")
+                        (us_minus "X01")
+                        (us_plus  "X01")
+                       ])
+
+;; <comm> indicates whether a particular code is commutative, using
+;; the "%" commutative opterator constraint.
+(define_code_attr comm [(ashift "")
+                       (ashiftrt "")
+                       (lshiftrt "")
+                       (ss_ashift "")
+                       (eq "%")
+                       (ne "%")
+                       (lt "")
+                       (ltu "")
+                       (le "")
+                       (leu "")
+                       (minus "")
+                       (plus "%")
+                       (mult "%")
+                       (smin "%")
+                       (umin "%")
+                       (smax "%")
+                       (umax "%")
+                       (ss_plus "%")
+                       (us_plus "%")
+                       (ss_minus "")
+                       (us_minus "")
+                       ])
+;; <s> is the load/store extension suffix.
+(define_code_attr s [(zero_extend "u")
+                    (sign_extend "s")])
+
+;; Code for packing two 2-byte vectors.
+(define_code_iterator v2pack [truncate us_truncate])
+
+;; <pack_optab> expands to the part of the optab name describing how
+;; two vectors are packed.
+(define_code_attr pack_optab [(truncate "trunc")
+                             (us_truncate "usat")
+                             (ss_truncate "ssat")])
+
+;; <pack_insn> expands to the insn that implements a particular vector
+;; packing code.
+(define_code_attr pack_insn [(truncate "packl")
+                            (us_truncate "packuc")
+                            (ss_truncate "packsc")])
+\f
+;;
+;; The basic data move insns.
+;;
+
+(define_expand "movqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "")
+       (match_operand:QI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilegx_expand_mov (QImode, operands))
+    DONE;
+})
+
+(define_insn "*movqi_insn"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,U,m")
+       (match_operand:QI 1 "move_operand"         "r,I,U,m,rO,rO"))]
+  "(register_operand (operands[0], QImode)
+    || reg_or_0_operand (operands[1], QImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   ld1u\t%0, %1
+   ld1u_add\t%0, %I1, %i1
+   st1\t%0, %r1
+   st1_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "")
+       (match_operand:HI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilegx_expand_mov (HImode, operands))
+    DONE;
+})
+
+(define_insn "*movhi_insn"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,U,m")
+       (match_operand:HI 1 "move_operand"         "r,I,JT,U,m,rO,rO"))]
+  "(register_operand (operands[0], HImode)
+    || reg_or_0_operand (operands[1], HImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   moveli\t%0, %H1
+   ld2u\t%0, %1
+   ld2u_add\t%0, %I1, %i1
+   st2\t%0, %r1
+   st2_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movsi"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
+       (match_operand:SI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilegx_expand_mov (SImode, operands))
+    DONE;
+})
+
+(define_insn "*movsi_insn"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,U,m")
+       (match_operand:SI 1 "move_operand"         "r,I,JT,K,U,m,rO,rO"))]
+  "(register_operand (operands[0], SImode)
+    || reg_or_0_operand (operands[1], SImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   moveli\t%0, %H1
+   shl16insli\t%0, zero, %h1
+   ld4s\t%0, %1
+   ld4s_add\t%0, %I1, %i1
+   st4\t%0, %r1
+   st4_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movdi"
+  [(set (match_operand:DI 0 "nonimmediate_operand" "")
+       (match_operand:DI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilegx_expand_mov (DImode, operands))
+    DONE;
+})
+
+(define_insn "*movdi_insn"
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,r,U,m")
+       (match_operand:DI 1 "move_operand"         "r,I,JT,K,N,P,U,m,rO,rO"))]
+  "(register_operand (operands[0], DImode)
+    || reg_or_0_operand (operands[1], DImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   moveli\t%0, %H1
+   shl16insli\t%0, zero, %h1
+   v1addi\t%0, zero, %j1
+   v2addi\t%0, zero, %h1
+   ld\t%0, %1
+   ld_add\t%0, %I1, %i1
+   st\t%0, %r1
+   st_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,X01,X01,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movmisalign<mode>"
+  [(set (match_operand:VEC248MODE 0 "nonautoincmem_nonimmediate_operand" "")
+        (match_operand:VEC248MODE 1 "nonautoincmem_general_operand" ""))]
+  ""
+{
+  tilegx_expand_movmisalign (<MODE>mode, operands);
+  DONE;
+})
+
+(define_expand "movsf"
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
+       (match_operand:SF 1 "general_operand" ""))]
+  ""
+{
+  /* Materialize immediates using clever SImode code, but don't
+     do this after reload starts, since gen_lowpart will choke
+     during reload if given an illegitimate address. */
+  if (immediate_operand (operands[1], SFmode)
+      && operands[1] != const0_rtx
+      && (register_operand (operands[0], SFmode)
+          || (!reload_in_progress && !reload_completed)))
+    {
+      emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
+                            gen_lowpart (SImode, operands[1])));
+      DONE;
+    }
+})
+
+(define_insn "*movsf"
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,U,m")
+       (match_operand:SF 1 "general_operand" "rO,U,m,rO,rO"))]
+  ""
+  "@
+   move\t%0, %r1
+   ld4s\t%0, %1
+   ld4s_add\t%0, %I1, %i1
+   st4\t%0, %r1
+   st4_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movdf"
+  [(set (match_operand:DF 0 "nonimmediate_operand" "")
+       (match_operand:DF 1 "general_operand" ""))]
+  ""
+{
+  /* Materialize immediates using clever DImode code, but don't
+     do this after reload starts, since gen_lowpart will choke
+     during reload if given an illegitimate address. */
+  if (immediate_operand (operands[1], DFmode)
+      && operands[1] != const0_rtx
+      && (register_operand (operands[0], DFmode)
+          || (!reload_in_progress && !reload_completed)))
+    {
+      emit_insn (gen_movdi (gen_lowpart (DImode, operands[0]),
+                            gen_lowpart (DImode, operands[1])));
+      DONE;
+    }
+})
+
+(define_insn "*movdf"
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,r,U,m")
+       (match_operand:DF 1 "general_operand" "rO,U,m,rO,rO"))]
+  ""
+  "@
+   move\t%0, %r1
+   ld\t%0, %1
+   ld_add\t%0, %I1, %i1
+   st\t%0, %r1
+   st_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "mov<mode>"
+  [(set (match_operand:VEC248MODE 0 "nonimmediate_operand" "")
+        (match_operand:VEC248MODE 1 "general_operand" ""))]
+  ""
+{
+  /* Materialize immediates using clever DImode code, but don't
+     do this after reload starts, since gen_lowpart will choke
+     during reload if given an illegitimate address. */
+  if (immediate_operand (operands[1], <MODE>mode)
+      && operands[1] != const0_rtx
+      && (register_operand (operands[0], <MODE>mode)
+          || (!reload_in_progress && !reload_completed)))
+    {
+      emit_insn (gen_movdi (gen_lowpart (DImode, operands[0]),
+                            gen_lowpart (DImode, operands[1])));
+      DONE;
+    }
+})
+
+(define_insn "*mov<mode>"
+  [(set (match_operand:VEC248MODE 0 "nonimmediate_operand" "=r,r,r,U,m")
+       (match_operand:VEC248MODE 1 "general_operand" "rO,U,m,rO,rO"))]
+  ""
+  "@
+   move\t%0, %r1
+   ld\t%0, %1
+   ld_add\t%0, %I1, %i1
+   st\t%0, %r1
+   st_add\t%I0, %r1, %i0"
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_insn "movstrictqi"
+  [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
+       (match_operand:QI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "bfins\t%0, %r1, 0, 7"
+  [(set_attr "type" "X0")])
+  
+(define_insn "movstricthi"
+  [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
+       (match_operand:HI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "bfins\t%0, %r1, 0, 15"
+  [(set_attr "type" "X0")])
+  
+(define_insn "movstrictsi"
+  [(set (strict_low_part (match_operand:SI 0 "register_operand" "+r"))
+       (match_operand:SI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "bfins\t%0, %r1, 0, 31"
+  [(set_attr "type" "X0")])
+
+\f
+;;
+;; Bit-field extracts/inserts
+;;
+
+(define_expand "insv"
+  [(set (zero_extract:DI (match_operand:DI 0 "register_operand" "")
+                        (match_operand:DI 1 "u6bit_cint_operand" "")
+                        (match_operand:DI 2 "u6bit_cint_operand" ""))
+       (match_operand:DI 3 "reg_or_cint_operand" ""))]
+  ""
+{
+  rtx first_rtx = operands[2];
+  HOST_WIDE_INT first = INTVAL (first_rtx);
+  HOST_WIDE_INT width = INTVAL (operands[1]);
+  rtx v = operands[3];
+
+  if (CONST_INT_P (v))
+    {
+      /* Which bits are we affecting? */
+      HOST_WIDE_INT mask = ((((HOST_WIDE_INT) 1) << width) - 1) << first;
+
+      /* Extract just the bits we need, sign extending them to make the
+         constant easier to materialize in a register. */
+      int shift = sizeof(HOST_WIDE_INT) * 8 - width;
+      HOST_WIDE_INT n = (INTVAL (v) << shift) >> shift;
+
+      if (n == 0)
+        {
+         /* We are setting every bit in the bitfield to zero. Try to use
+             andi instead, since that is more efficient. */
+         rtx mask_rtx = GEN_INT (~mask);
+         if (satisfies_constraint_I (mask_rtx))
+            {
+             emit_insn (gen_anddi3 (operands[0], operands[0], mask_rtx));
+             DONE;
+            }
+
+         operands[3] = const0_rtx;
+       }
+      else
+        {
+         if (n == -1)
+           {
+             /* We are setting every bit in the bitfield to one. Try to use
+                ori instead, since that is more efficient. */
+             rtx mask_rtx = GEN_INT (mask);
+             if (satisfies_constraint_I (mask_rtx))
+               {
+                 emit_insn (gen_iordi3 (operands[0], operands[0], mask_rtx));
+                 DONE;
+               }
+           }
+
+         if (!can_create_pseudo_p ())
+            FAIL;
+
+         operands[3] = force_reg (DImode, GEN_INT (n));
+       }
+    }
+})
+
+(define_insn "*insv_tblidxb0"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (match_operand:DI 1 "register_operand" "rO"))]
+  ""
+  "tblidxb0\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb1"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:DI
+        (const_int 8)
+        (const_int 8)
+       (match_operand:DI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb1\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb2"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:DI
+        (const_int 8)
+        (const_int 16)
+       (match_operand:DI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb2\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb3"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:DI
+        (const_int 8)
+        (const_int 24)
+       (match_operand:DI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb3\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_bfins"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (match_operand:DI 1 "u6bit_cint_operand" "n")
+        (match_operand:DI 2 "u6bit_cint_operand" "n"))
+       (match_operand:DI 3 "reg_or_cint_operand" "rO"))]
+  ""
+  "bfins\t%0, %r3, %2, %2+%1-1"
+  [(set_attr "type" "X0")])
+
+(define_insn "*insv_mm"
+  [(set (zero_extract:DI
+        (match_operand:DI 0 "register_operand" "+r")
+        (match_operand:DI 1 "u6bit_cint_operand" "n")
+        (match_operand:DI 2 "u6bit_cint_operand" "n"))
+       (zero_extract:DI
+        (match_operand:DI 3 "register_operand" "rO")
+        (match_dup 1)
+        (match_dup 2)))]
+  ""
+{
+  int n;
+
+  operands[1] = GEN_INT (INTVAL (operands[1]) + INTVAL (operands[2]));
+
+  n = INTVAL (operands[2]);
+  n = (n == 0) ? 63 : n - 1;
+  operands[2] = GEN_INT (n);
+
+  return "mm\t%0, %r3, %1, %2";
+}
+  [(set_attr "type" "X0")])
+
+(define_expand "extv"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (sign_extract:DI (match_operand 1 "nonautoincmem_general_operand" "")
+                        (match_operand:DI 2 "immediate_operand" "")
+                        (match_operand:DI 3 "immediate_operand" "")))]
+  ""
+{
+  if (MEM_P (operands[1]))
+    {
+      HOST_WIDE_INT bit_offset, bit_width;
+      HOST_WIDE_INT first_byte_offset, last_byte_offset;
+
+      if (GET_MODE (operands[1]) != QImode)
+        FAIL;
+
+      bit_width = INTVAL (operands[2]);
+      bit_offset = INTVAL (operands[3]);
+
+      /* Reject bitfields that can be done with a normal load */
+      if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
+        FAIL;
+
+      /* The value in memory cannot span more than 8 bytes. */
+      first_byte_offset = bit_offset / BITS_PER_UNIT;
+      last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
+      if (last_byte_offset - first_byte_offset > 7)
+        FAIL;
+
+      tilegx_expand_unaligned_load (operands[0], operands[1],
+                                    bit_width, bit_offset, 1);
+
+      DONE;
+    }
+
+  operands[1] = force_reg (DImode, operands[1]);
+})
+
+(define_expand "extzv"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (zero_extract:DI (match_operand 1 "nonautoincmem_general_operand" "")
+                        (match_operand:DI 2 "immediate_operand" "")
+                        (match_operand:DI 3 "immediate_operand" "")))]
+  ""
+{
+  HOST_WIDE_INT bit_width = INTVAL (operands[2]);
+  HOST_WIDE_INT bit_offset = INTVAL (operands[3]);
+
+
+  if (MEM_P (operands[1]))
+    {
+      HOST_WIDE_INT first_byte_offset, last_byte_offset;
+
+      if (GET_MODE (operands[1]) != QImode)
+        FAIL;
+
+      /* Reject bitfields that can be done with a normal load */
+      if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
+        FAIL;
+
+      /* The value in memory cannot span more than 8 bytes. */
+      first_byte_offset = bit_offset / BITS_PER_UNIT;
+      last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
+      if (last_byte_offset - first_byte_offset > 7)
+        FAIL;
+
+      tilegx_expand_unaligned_load (operands[0], operands[1],
+                                    bit_width, bit_offset, 0);
+
+      DONE;
+    }
+
+    operands[1] = force_reg (DImode, operands[1]);
+
+    if (bit_offset == 0)
+      {
+        /* Extracting the low bits is just a bitwise AND. */
+        HOST_WIDE_INT mask = ((HOST_WIDE_INT)1 << bit_width) - 1;
+        emit_insn (gen_anddi3 (operands[0], operands[1], GEN_INT (mask)));
+        DONE;
+      }
+})
+
+\f
+;;
+;; Addresses
+;;
+
+;; First step of the 3-insn sequence to materialize a symbolic
+;; address.
+(define_expand "mov_address_step1"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (const:DI (unspec:DI [(match_operand:DI 1 "symbolic_operand" "")]
+                            UNSPEC_HW2_LAST)))])
+  
+;; Second step of the 3-insn sequence to materialize a symbolic
+;; address.
+(define_expand "mov_address_step2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (unspec:DI
+        [(match_operand:DI 1 "reg_or_0_operand" "")
+         (const:DI (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
+                              UNSPEC_HW1))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))])
+  
+;; Third step of the 3-insn sequence to materialize a symbolic
+;; address.
+(define_expand "mov_address_step3"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (unspec:DI
+        [(match_operand:DI 1 "reg_or_0_operand" "")
+         (const:DI (unspec:DI [(match_operand:DI 2 "symbolic_operand" "")]
+                              UNSPEC_HW0))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))])
+
+;; First step of the 2-insn sequence to materialize a 32-bit symbolic
+;; address.
+(define_expand "mov_address_32bit_step1"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (const:SI (unspec:SI [(match_operand:SI 1 "symbolic_operand" "")]
+                            UNSPEC_HW1_LAST)))])
+  
+;; Second step of the 2-insn sequence to materialize a 32-bit symbolic
+;; address.
+(define_expand "mov_address_32bit_step2"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (unspec:SI
+        [(match_operand:SI 1 "reg_or_0_operand" "")
+         (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
+                              UNSPEC_HW0))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))])
+
+\f
+;;
+;; pic related instructions
+;;
+
+;; NOTE: We compute the label in this unusual way because if we place
+;; the label after the lnk, whether it is at the same address as the
+;; lnk will vary depending on whether the optimization level chooses
+;; to insert bundling braces.
+(define_insn "insn_lnk_and_label<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec_volatile:I48MODE
+         [(match_operand:I48MODE 1 "symbolic_operand" "")]
+         UNSPEC_LNK_AND_LABEL))]
+  ""
+  "%1 = . + 8\n\tlnk\t%0"
+  [(set_attr "type" "Y1")])
+
+;; First step of the 3-insn sequence to materialize a position
+;; independent address by adding the difference of two labels to a
+;; base label in the text segment, assuming that the difference fits
+;; in 32 signed bits.
+(define_expand "mov_pcrel_step1<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (const:I48MODE (unspec:I48MODE
+                       [(match_operand:I48MODE 1 "symbolic_operand" "")
+                        (match_operand:I48MODE 2 "symbolic_operand" "")]
+                        UNSPEC_HW1_LAST_PCREL)))]
+  "flag_pic")
+  
+;; Second step of the 3-insn sequence to materialize a position
+;; independent address by adding the difference of two labels to a
+;; base label in the text segment, assuming that the difference fits
+;; in 32 signed bits.
+(define_expand "mov_pcrel_step2<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "")
+         (const:I48MODE
+          (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")
+                           (match_operand:I48MODE 3 "symbolic_operand" "")]
+                          UNSPEC_HW0_PCREL))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  "flag_pic")
+  
+;; Third step of the 3-insn sequence to materialize a position
+;; independent address by adding the difference of two labels to a base
+;; label in the text segment, assuming that the difference fits in 32
+;; signed bits.
+(define_insn "mov_pcrel_step3<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec:I48MODE [(match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+                        (match_operand:I48MODE 2 "reg_or_0_operand" "rO")
+                        (match_operand:I48MODE 3 "symbolic_operand" "in")
+                        (match_operand:I48MODE 4 "symbolic_operand" "in")]
+                        UNSPEC_MOV_PCREL_STEP3))]
+  "flag_pic"
+  "add<x>\t%0, %r1, %r2")
+
+(define_expand "add_got16<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+        (plus:I48MODE
+        (match_operand:I48MODE 1 "reg_or_0_operand" "")
+        (const:I48MODE
+         (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")]
+                         UNSPEC_HW0_LAST_GOT))))]
+  "flag_pic == 1")
+
+(define_expand "mov_got32_step1<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (const:I48MODE
+        (unspec:I48MODE [(match_operand:I48MODE 1 "symbolic_operand" "")]
+                        UNSPEC_HW1_LAST_GOT)))]
+  "flag_pic == 2")
+
+(define_expand "mov_got32_step2<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "")
+         (const:I48MODE
+          (unspec:I48MODE [(match_operand:I48MODE 2 "symbolic_operand" "")]
+                          UNSPEC_HW0_GOT))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  "flag_pic == 2")
+
+\f
+;;
+;; TLS
+;;
+(define_expand "mov_tls_gd_step1<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (const:I48MODE
+        (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
+                        UNSPEC_HW1_LAST_TLS_GD)))]
+  "HAVE_AS_TLS")
+
+(define_expand "mov_tls_gd_step2<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "")
+         (const:I48MODE
+          (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
+                          UNSPEC_HW0_TLS_GD))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  "HAVE_AS_TLS")
+
+(define_expand "mov_tls_ie_step1<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (const:I48MODE
+        (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
+                        UNSPEC_HW1_LAST_TLS_IE)))]
+  "HAVE_AS_TLS")
+
+(define_expand "mov_tls_ie_step2<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "")
+         (const:I48MODE
+          (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
+                          UNSPEC_HW0_TLS_IE))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  "HAVE_AS_TLS")
+
+(define_expand "mov_tls_le_step1<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (const:I48MODE
+        (unspec:I48MODE [(match_operand:I48MODE 1 "tls_symbolic_operand" "")]
+                        UNSPEC_HW1_LAST_TLS_LE)))]
+  "HAVE_AS_TLS")
+
+(define_expand "mov_tls_le_step2<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "")
+         (const:I48MODE
+          (unspec:I48MODE [(match_operand:I48MODE 2 "tls_symbolic_operand" "")]
+                          UNSPEC_HW0_TLS_LE))]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_gd_call<bitsuffix>"
+  [(parallel
+    [(set (reg:I48MODE 0)
+         (unspec:I48MODE [(match_operand:I48MODE 0 "tls_symbolic_operand" "")
+                          (reg:I48MODE 0)]
+                          UNSPEC_TLS_GD_CALL))
+     (clobber (reg:I48MODE 25))
+     (clobber (reg:I48MODE 26))
+     (clobber (reg:I48MODE 27))
+     (clobber (reg:I48MODE 28))
+     (clobber (reg:I48MODE 29))
+     (clobber (reg:I48MODE 55))])]
+   ""
+{
+  cfun->machine->calls_tls_get_addr = true;
+})
+
+(define_insn "*tls_gd_call<bitsuffix>"
+  [(set (reg:I48MODE 0)
+       (unspec:I48MODE [(match_operand:I48MODE 0 "tls_symbolic_operand" "")
+                        (reg:I48MODE 0)]
+                       UNSPEC_TLS_GD_CALL))
+   (clobber (reg:I48MODE 25))
+   (clobber (reg:I48MODE 26))
+   (clobber (reg:I48MODE 27))
+   (clobber (reg:I48MODE 28))
+   (clobber (reg:I48MODE 29))
+   (clobber (reg:I48MODE 55))]
+  ""
+  "jal\ttls_gd_call(%0)"
+  [(set_attr "type" "X1")])
+
+(define_insn "tls_gd_add<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
+                        (match_operand:I48MODE 2 "tls_symbolic_operand" "")]
+                       UNSPEC_TLS_GD_ADD))]
+  "HAVE_AS_TLS"
+  "add<x>i\t%0, %1, tls_gd_add(%2)")
+
+(define_insn "tls_add<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
+                        (match_operand:I48MODE 2 "register_operand" "0")
+                        (match_operand:I48MODE 3 "tls_symbolic_operand" "")]
+                       UNSPEC_TLS_ADD))]
+  "HAVE_AS_TLS"
+  "add<x>i\t%0, %1, tls_add(%3)")
+
+(define_insn "tls_ie_load<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (unspec:I48MODE [(match_operand:I48MODE 1 "register_operand" "r")
+                        (match_operand:I48MODE 2 "tls_symbolic_operand" "")]
+                       UNSPEC_TLS_IE_LOAD))]
+  "HAVE_AS_TLS"
+  "ld<four_s_if_si>_tls\t%0, %1, tls_ie_load(%2)"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "*zero_extract<mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (zero_extract:I48MODE
+         (match_operand:I48MODE 1 "reg_or_0_operand" "r")
+         (match_operand:I48MODE 2 "u6bit_cint_operand" "n")
+         (match_operand:I48MODE 3 "u6bit_cint_operand" "n")))]
+  ""
+  "bfextu\t%0, %r1, %3, %3+%2-1"
+  [(set_attr "type" "X0")])
+
+(define_insn "*sign_extract_low32"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (sign_extract:DI
+         (match_operand:DI 1 "reg_or_0_operand" "r")
+         (match_operand:DI 2 "u6bit_cint_operand" "n")
+         (match_operand:DI 3 "u6bit_cint_operand" "n")))]
+  "INTVAL (operands[3]) == 0 && INTVAL (operands[2]) == 32"
+  "addxi\t%0, %r1, 0")
+
+(define_insn "*sign_extract"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (sign_extract:I48MODE
+         (match_operand:I48MODE 1 "reg_or_0_operand" "r")
+         (match_operand:I48MODE 2 "u6bit_cint_operand" "n")
+         (match_operand:I48MODE 3 "u6bit_cint_operand" "n")))]
+  ""
+  "bfexts\t%0, %r1, %3, %3+%2-1"
+  [(set_attr "type" "X0")])
+
+\f
+;;
+;; Arithmetic ops
+;;
+
+(define_insn "add<mode>3"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
+       (plus:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "%rO,rO,rO")
+                     (match_operand:I48MODE 2 "add_operand" "r,I,JT")))]
+  ""
+  "@
+   add<x>\t%0, %r1, %r2
+   add<x>i\t%0, %r1, %2
+   add<x>li\t%0, %r1, %H2"
+  [(set_attr "type" "*,*,X01")])
+
+(define_insn "*addsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+       (sign_extend:DI
+        (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO")
+                 (match_operand:SI 2 "add_operand" "r,I,JT"))))]
+  ""
+  "@
+   addx\t%0, %r1, %r2
+   addxi\t%0, %r1, %2
+   addxli\t%0, %r1, %H2"
+  [(set_attr "type" "*,*,X01")])
+
+(define_insn "sub<mode>3"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (minus:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+                       (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
+  ""
+  "sub<x>\t%0, %r1, %r2")
+
+(define_insn "*subsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (sign_extend:DI
+        (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                  (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "subx\t%0, %r1, %r2")
+
+(define_insn "neg<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (neg:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO")))]
+  ""
+  "sub<x>\t%0, zero, %r1")
+
+(define_insn "*negsi2_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (sign_extend:DI
+        (neg:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))))]
+  ""
+  "subx\t%0, zero, %r1")
+
+(define_insn "ssaddsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "addxsc\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*ssaddsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (sign_extend:DI
+        (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "addxsc\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "sssubsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                     (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "subxsc\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*sssubsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (sign_extend:DI
+        (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                     (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "subxsc\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_expand "addsf3"
+  [(set (match_operand:SF 0 "register_operand" "")
+        (plus:SF (match_operand:SF 1 "register_operand" "")
+                 (match_operand:SF 2 "register_operand" "")))]
+  ""
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx tmp = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  emit_insn (gen_insn_fsingle_add1 (tmp, a, b));
+  emit_insn (gen_insn_fsingle_addsub2 (tmp, tmp, a, b));
+  emit_insn (gen_insn_fsingle_pack1 (flags, tmp));
+  emit_insn (gen_insn_fsingle_pack2 (result, tmp, flags));
+
+  DONE;
+})
+
+(define_expand "subsf3"
+  [(set (match_operand:SF 0 "register_operand" "")
+        (minus:SF (match_operand:SF 1 "register_operand" "")
+                  (match_operand:SF 2 "register_operand" "")))]
+  ""
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx tmp = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  emit_insn (gen_insn_fsingle_sub1 (tmp, a, b));
+  emit_insn (gen_insn_fsingle_addsub2 (tmp, tmp, a, b));
+  emit_insn (gen_insn_fsingle_pack1 (flags, tmp));
+  emit_insn (gen_insn_fsingle_pack2 (result, tmp, flags));
+
+  DONE;
+})
+
+(define_expand "mulsf3"
+  [(set (match_operand:SF 0 "register_operand" "")
+        (mult:SF (match_operand:SF 1 "register_operand" "")
+                 (match_operand:SF 2 "register_operand" "")))]
+  ""
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx tmp1 = gen_reg_rtx (DImode);
+  rtx tmp2 = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  emit_insn (gen_insn_fsingle_mul1 (tmp1, a, b));
+  emit_insn (gen_insn_fsingle_mul2 (tmp2, tmp1, b));
+  emit_insn (gen_insn_fsingle_pack1 (flags, tmp2));
+  emit_insn (gen_insn_fsingle_pack2 (result, tmp2, flags));
+
+  DONE;
+})
+
+(define_expand "adddf3"
+  [(set (match_operand:DF 0 "register_operand" "")
+        (plus:DF (match_operand:DF 1 "register_operand" "")
+                 (match_operand:DF 2 "register_operand" "")))]
+  ""
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx min = gen_reg_rtx (DImode);
+  rtx max = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  emit_insn (gen_insn_fdouble_unpack_min (min, a, b));
+  emit_insn (gen_insn_fdouble_unpack_max (max, a, b));
+  emit_insn (gen_insn_fdouble_add_flags (flags, a, b));
+  emit_insn (gen_insn_fdouble_addsub (max, max, min, flags));
+  emit_insn (gen_insn_fdouble_pack1 (result, max, flags));
+  emit_insn (gen_insn_fdouble_pack2 (result, result, max, const0_rtx));
+
+  DONE;
+})
+
+
+(define_expand "subdf3"
+  [(set (match_operand:DF 0 "register_operand" "")
+        (minus:DF (match_operand:DF 1 "register_operand" "")
+                  (match_operand:DF 2 "register_operand" "")))]
+  ""
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx min = gen_reg_rtx (DImode);
+  rtx max = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  emit_insn (gen_insn_fdouble_unpack_min (min, a, b));
+  emit_insn (gen_insn_fdouble_unpack_max (max, a, b));
+  emit_insn (gen_insn_fdouble_sub_flags (flags, a, b));
+  emit_insn (gen_insn_fdouble_addsub (max, max, min, flags));
+  emit_insn (gen_insn_fdouble_pack1 (result, max, flags));
+  emit_insn (gen_insn_fdouble_pack2 (result, result, max, const0_rtx));
+
+  DONE;
+})
+
+(define_expand "muldf3"
+  [(set (match_operand:DF 0 "register_operand" "")
+        (mult:DF (match_operand:DF 1 "register_operand" "")
+                 (match_operand:DF 2 "register_operand" "")))]
+  ""
+  ;; TODO: Decide if we should not inline this with -Os.
+  ;; "optimize_function_for_speed_p (cfun)"
+{
+  rtx result = gen_lowpart (DImode, operands[0]);
+  rtx a = gen_lowpart (DImode, operands[1]);
+  rtx b = gen_lowpart (DImode, operands[2]);
+
+  rtx a_unpacked = gen_reg_rtx (DImode);
+  rtx b_unpacked = gen_reg_rtx (DImode);
+  rtx flags = gen_reg_rtx (DImode);
+
+  rtx low1 = gen_reg_rtx (DImode);
+  rtx low = gen_reg_rtx (DImode);
+  rtx low_carry = gen_reg_rtx (DImode);
+
+  rtx mid = gen_reg_rtx (DImode);
+  rtx mid_l32 = gen_reg_rtx (DImode);
+  rtx mid_r32 = gen_reg_rtx (DImode);
+
+  rtx high1 = gen_reg_rtx (DImode);
+  rtx high = gen_reg_rtx (DImode);
+  rtx high1_plus_mid_r32 = gen_reg_rtx (DImode);
+
+  /* NOTE: We compute using max(a, 0) and max(b, 0) rather than
+     min(a, b) and max(a, b) because for multiply we just need to unpack,
+     we don't actually care which is min and which is max. And this
+     formulation gives the scheduler more freedom in case one of a or b
+     would stall at the start of this code sequence. */
+  emit_insn (gen_insn_fdouble_unpack_max (a_unpacked, a, const0_rtx));
+  emit_insn (gen_insn_fdouble_unpack_max (b_unpacked, b, const0_rtx));
+  emit_insn (gen_insn_fdouble_mul_flags (flags, a, b));
+
+  /* This depends on the fact that the high few bits of the unpacked
+     mantissa are zero, so we can't have a carry out from the mid sum. */
+  emit_insn (gen_insn_mul_lu_lu (low1, a_unpacked, b_unpacked));
+  emit_insn (gen_insn_mul_hu_lu (mid, a_unpacked, b_unpacked));
+  emit_insn (gen_insn_mula_hu_lu (mid, mid, b_unpacked, a_unpacked));
+  emit_insn (gen_insn_mul_hu_hu (high1, a_unpacked, b_unpacked));
+
+  emit_insn (gen_ashldi3 (mid_l32, mid, GEN_INT (32)));
+  emit_insn (gen_lshrdi3 (mid_r32, mid, GEN_INT (32)));
+
+  emit_insn (gen_adddi3 (high1_plus_mid_r32, high1, mid_r32));
+
+  emit_insn (gen_adddi3 (low, low1, mid_l32));
+  emit_insn (gen_insn_cmpltu_didi (low_carry, low, mid_l32));
+
+  emit_insn (gen_adddi3 (high, high1_plus_mid_r32, low_carry));
+
+  emit_insn (gen_insn_fdouble_pack1 (result, high, flags));
+  emit_insn (gen_insn_fdouble_pack2 (result, result, high, low));
+
+  DONE;
+})
+
+\f
+;;
+;; Shifts
+;;
+
+(define_insn "ashl<mode>3"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
+       (ashift:I48MODE
+        (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
+  ""
+  "@
+  shl<x>i\t%0, %r1, %2
+  shl<x>\t%0, %r1, %r2"
+  [(set_attr "type" "<shift_pipe>,<shift_pipe>")])
+
+(define_insn "*ashlsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (sign_extend:DI
+        (ashift:SI
+         (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+         (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
+  ""
+  "@
+  shlxi\t%0, %r1, %2
+  shlx\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_insn "ashr<mode>3"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
+       (ashiftrt:I48MODE
+        (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
+  ""
+  "@
+  shrsi\t%0, %r1, %2
+  shrs\t%0, %r1, %r2")
+
+(define_insn "*ashrsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (sign_extend:DI
+        (ashiftrt:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+                     (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
+  ""
+  "@
+  shrsi\t%0, %r1, %2
+  shrs\t%0, %r1, %r2")
+
+(define_insn "lshr<mode>3"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r")
+       (lshiftrt:I48MODE
+        (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:SI 2 "reg_or_u<nbits>bit_operand" "I,rO")))]
+  ""
+  "@
+  shru<x>i\t%0, %r1, %2
+  shru<x>\t%0, %r1, %r2"
+  [(set_attr "type" "<shift_pipe>,<shift_pipe>")])
+  
+(define_insn "*lshrsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (sign_extend:DI
+        (lshiftrt:SI
+         (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+         (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO"))))]
+  ""
+  "@
+  shruxi\t%0, %r1, %2
+  shrux\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+  
+(define_insn "rotldi3"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (rotate:DI (match_operand:DI 1 "reg_or_0_operand" "rO,rO")
+                   (match_operand:SI 2 "reg_or_u6bit_operand" "I,rO")))]
+  ""
+  "@
+  rotli\t%0, %r1, %2
+  rotl\t%0, %r1, %r2")
+
+(define_insn "insn_shl16insli"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+        (ior:DI
+         (ashift:DI
+         (match_operand:DI 1 "reg_or_0_operand" "rO,rO")
+         (const_int 16))
+         (match_operand:DI 2 "u16bit_or_const_symbolic_operand" "O,KT")))]
+  ""
+  "@
+   shli\t%0, %r1, 16
+   shl16insli\t%0, %r1, %H2"
+  [(set_attr "type" "*,X01")])
+
+(define_insn "insn_addr_shl16insli<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (unspec:I48MODE
+        [(match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+         (match_operand:I48MODE 2 "const_symbolic_operand" "T")]
+        UNSPEC_INSN_ADDR_SHL16INSLI))]
+  ""
+  "shl16insli\t%0, %r1, %H2"
+  [(set_attr "type" "X01")])
+
+\f
+;;
+;; Compares
+;;
+
+(define_expand "cstore<mode>4"
+  [(set (match_operand:DI 0 "register_operand" "")
+      (match_operator:DI 1 "ordered_comparison_operator"
+         [(match_operand:FI48MODE 2 "reg_or_cint_operand" "")
+          (match_operand:FI48MODE 3 "reg_or_cint_operand" "")]))]
+  ""
+{
+  if (!tilegx_emit_setcc (operands, GET_MODE (operands[2])))
+    FAIL;
+  else
+    DONE;
+})
+
+(define_insn "insn_cmpne_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r")
+       (ne:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+                    (match_operand:I48MODE 2 "reg_or_cint_operand" "rO")))]
+  ""
+  "cmpne\t%0, %r1, %r2")
+(define_insn "insn_cmpeq_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
+       (eq:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "%rO,rO")
+                    (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   cmpeqi\t%0, %r1, %2
+   cmpeq\t%0, %r1, %r2")
+
+(define_insn "insn_cmplts_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
+       (lt:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+                    (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   cmpltsi\t%0, %r1, %2
+   cmplts\t%0, %r1, %r2")
+
+(define_insn "insn_cmpltu_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
+       (ltu:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+                     (match_operand:I48MODE 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   cmpltui\t%0, %r1, %2
+   cmpltu\t%0, %r1, %r2"
+  [(set_attr "type" "X01,*")])
+
+(define_insn "insn_cmples_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
+       (le:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+                    (match_operand:I48MODE 2 "reg_or_cint_operand" "L,rO")))]
+  ""
+  "@
+   cmpltsi\t%0, %r1, %P2
+   cmples\t%0, %r1, %r2")
+
+(define_insn "insn_cmpleu_<I48MODE:mode><I48MODE2:mode>"
+  [(set (match_operand:I48MODE2 0 "register_operand" "=r,r")
+       (leu:I48MODE2 (match_operand:I48MODE 1 "reg_or_0_operand" "rO,rO")
+                     (match_operand:I48MODE 2 "reg_or_cint_operand" "Q,rO")))]
+  ""
+  "@
+   cmpltui\t%0, %r1, %P2
+   cmpleu\t%0, %r1, %r2"
+  [(set_attr "type" "X01,*")])
+
+\f
+;;
+;; Logical ops
+;;
+
+(define_insn "and<mode>3"
+  [(set (match_operand:IVNMODE 0 "register_operand" "=r,r,r,r")
+       (and:IVNMODE (match_operand:IVNMODE 1 "reg_or_0_operand" "%rO,rO,0,rO")
+                    (match_operand:IVNMODE 2 "and_operand" "I,S,M,rO")))]
+  ""
+  "@
+   andi\t%0, %r1, %2
+   bfextu\t%0, %r1, %M2
+   bfins\t%0, zero, %m2
+   and\t%0, %r1, %r2"
+  [(set_attr "type" "*,X0,X0,*")])
+  
+(define_insn "*andsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r,r")
+       (sign_extend:DI
+        (and:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,0,rO")
+                (match_operand:SI 2 "and_operand" "I,S,M,rO"))))]
+  ""
+  "@
+   andi\t%0, %r1, %2
+   bfextu\t%0, %r1, %M2
+   bfins\t%0, zero, %m2
+   and\t%0, %r1, %r2"
+  [(set_attr "type" "*,X0,X0,*")])
+  
+(define_insn "anddi3"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r,r,r,r")
+       (and:DI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO,rO,0,rO")
+                    (match_operand:DI 2 "and_operand" "I,Z0,Z1,S,M,rO")))]
+  ""
+  "@
+   andi\t%0, %r1, %2
+   v4int_l\t%0, zero, %r1
+   v4int_h\t%0, %r1, zero
+   bfextu\t%0, %r1, %M2
+   bfins\t%0, zero, %m2
+   and\t%0, %r1, %r2"
+  [(set_attr "type" "*,X01,X01,X0,X0,*")])
+  
+(define_insn "ior<mode>3"
+  [(set (match_operand:IVMODE 0 "register_operand" "=r,r")
+       (ior:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "%rO,rO")
+                    (match_operand:IVMODE 2 "reg_or_s8bit_operand" "rO,I")))]
+  ""
+  "@
+   or\t%0, %r1, %r2
+   ori\t%0, %r1, %2"
+  [(set_attr "type" "*,X01")])
+  
+(define_insn "*iorsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (sign_extend:DI
+        (ior:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
+                (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I"))))]
+  ""
+  "@
+   or\t%0, %r1, %r2
+   ori\t%0, %r1, %2"
+  [(set_attr "type" "*,X01")])
+  
+(define_insn "xor<mode>3"
+  [(set (match_operand:IVMODE 0 "register_operand" "=r,r")
+       (xor:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "%rO,rO")
+                    (match_operand:IVMODE 2 "reg_or_s8bit_operand" "rO,I")))]
+  ""
+  "@
+   xor\t%0, %r1, %r2
+   xori\t%0, %r1, %2"
+  [(set_attr "type" "*,X01")])
+
+(define_insn "*xorsi3_sext"
+  [(set (match_operand:DI 0 "register_operand" "=r,r")
+       (sign_extend:DI
+        (xor:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
+                (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I"))))]
+  ""
+  "@
+   xor\t%0, %r1, %r2
+   xori\t%0, %r1, %2"
+  [(set_attr "type" "*,X01")])
+
+(define_insn "clzdi2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (clz:DI (match_operand:DI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "clz\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_expand "clzsi2"
+  [(set (match_dup 2)
+        (ashift:DI (match_operand:SI 1 "reg_or_0_operand" "")
+                   (const_int 32)))
+   (set (subreg:DI (match_operand:SI 0 "register_operand" "") 0)
+       (clz:DI (match_dup 2)))]
+   ""
+   {
+     operands[1] = simplify_gen_subreg (DImode, operands[1], SImode, 0);
+     operands[2] = gen_reg_rtx (DImode);
+   })
+
+(define_insn "ctz<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (ctz:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "ctz\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+
+(define_insn "popcount<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (popcount:I48MODE (match_operand:DI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "pcnt\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_expand "parity<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (parity:I48MODE (match_operand:DI 1 "reg_or_0_operand" "")))]
+  ""
+  {
+    rtx tmp = gen_reg_rtx (<MODE>mode);
+    emit_insn (gen_popcount<mode>2 (tmp, operands[1]));
+    emit_insn (gen_and<mode>3 (operands[0], tmp, const1_rtx));
+    DONE;
+  })
+
+(define_insn "bswapdi2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (bswap:DI (match_operand:DI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "revbytes\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_expand "bswapsi2"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (bswap:SI (match_operand:SI 1 "reg_or_0_operand" "")))]
+  ""
+  {
+    rtx tmp = gen_reg_rtx (DImode);
+    emit_insn (gen_bswapdi2 (tmp, gen_lowpart (DImode, operands[1])));
+    emit_insn (gen_ashrdi3 (gen_lowpart (DImode, operands[0]),
+                           tmp, GEN_INT (32)));
+    DONE;
+  })
+
+(define_insn "one_cmpl<mode>2"
+  [(set (match_operand:IVMODE 0 "register_operand" "=r")
+       (not:IVMODE (match_operand:IVMODE 1 "reg_or_0_operand" "rO")))]
+  ""
+  "nor\t%0, %r1, zero")
+
+\f
+;;
+;; Conditional moves
+;;
+
+(define_expand "mov<mode>cc"
+  [(set (match_operand:I48MODE 0 "register_operand" "")
+       (if_then_else:I48MODE
+         (match_operand 1 "comparison_operator" "")
+         (match_operand:I48MODE 2 "reg_or_0_operand" "")
+         (match_operand:I48MODE 3 "reg_or_0_operand" "")))]
+  ""
+  { operands[1] = tilegx_emit_conditional_move (operands[1]); })
+
+(define_insn "movcc_insn_<I48MODE2:mode><I48MODE:mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r,r")
+       (if_then_else:I48MODE
+        (match_operator 4 "eqne_operator"
+         [(match_operand:I48MODE2 1 "reg_or_0_operand" "rO,rO,rO,rO")
+          (const_int 0)])
+        (match_operand:I48MODE 2 "reg_or_0_operand"    "rO,O,rO,0")
+        (match_operand:I48MODE 3 "reg_or_0_operand"    "O,rO,0,rO")))]
+  ""
+  "@
+   m%c4\t%0, %r1, %r2
+   m%C4\t%0, %r1, %r3
+   cmov%d4z\t%0, %r1, %r2
+   cmov%D4z\t%0, %r1, %r3"
+  [(set_attr "type" "*,*,Y0,Y0")])
+
+(define_expand "insn_mz"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:DI
+         (eq (match_operand:DI 1 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:DI 2 "reg_or_0_operand" "")
+         (const_int 0)))])
+
+(define_expand "insn_mnz"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:DI
+         (ne (match_operand:DI 1 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:DI 2 "reg_or_0_operand" "")
+         (const_int 0)))])
+
+(define_expand "insn_cmoveqz"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:DI
+         (eq (match_operand:DI 2 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:DI 3 "reg_or_0_operand" "")
+         (match_operand:DI 1 "reg_or_0_operand" "")))])
+
+(define_expand "insn_cmovnez"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:DI
+         (ne (match_operand:DI 2 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:DI 3 "reg_or_0_operand" "")
+         (match_operand:DI 1 "reg_or_0_operand" "")))])
+
+\f
+;;
+;; Conversions
+;;
+
+(define_insn "zero_extendqi<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
+       (zero_extend:I48MODE (match_operand:QI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   bfextu\t%0, %r1, 0, 7
+   ld1u\t%0, %1
+   ld1u_add\t%0, %I1, %i1"
+  [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
+  
+(define_insn "zero_extendhi<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
+       (zero_extend:I48MODE (match_operand:HI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   bfextu\t%0, %r1, 0, 15
+   ld2u\t%0, %1
+   ld2u_add\t%0, %I1, %i1"
+  [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
+
+(define_insn "zero_extendsidi2"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+       (zero_extend:DI (match_operand:SI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   v4int_l\t%0, zero, %r1
+   ld4u\t%0, %1
+   ld4u_add\t%0, %I1, %i1"
+  [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
+
+(define_insn "extendqi<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
+       (sign_extend:I48MODE (match_operand:QI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   bfexts\t%0, %r1, 0, 7
+   ld1s\t%0, %1
+   ld1s_add\t%0, %I1, %i1"
+  [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
+
+(define_insn "extendhi<mode>2"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r,r,r")
+       (sign_extend:I48MODE (match_operand:HI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   bfexts\t%0, %r1, 0, 15
+   ld2s\t%0, %1
+   ld2s_add\t%0, %I1, %i1"
+  [(set_attr "type" "X0,Y2_2cycle,X1_2cycle")])
+
+;; All SImode integer registers should already be in sign-extended
+;; form (see TRULY_NOOP_TRUNCATION and truncdisi2).  We can therefore
+;; get rid of register->register instructions if we constrain the
+;; source to be in the same register as the destination.
+(define_insn_and_split "extendsidi2"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+        (sign_extend:DI (match_operand:SI 1 "nonimmediate_operand" "0,U,m")))]
+  ""
+  "@
+   #
+   ld4s\t%0, %1
+   ld4s_add\t%0, %I1, %i1"
+  "&& reload_completed && register_operand (operands[1], VOIDmode)"
+  [(const_int 0)]
+{
+  emit_note (NOTE_INSN_DELETED);
+  DONE;
+}
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle")])
+
+;; Integer truncation patterns.  Truncating SImode values to smaller
+;; modes is a no-op, as it is for most other GCC ports.  Truncating
+;; DImode values to SImode is not a no-op since we
+;; need to make sure that the lower 32 bits are properly sign-extended
+;; (see TRULY_NOOP_TRUNCATION).  Truncating DImode values into modes
+;; smaller than SImode is equivalent to two separate truncations:
+;;
+;;                        A       B
+;;    DI ---> HI  ==  DI ---> SI ---> HI
+;;    DI ---> QI  ==  DI ---> SI ---> QI
+;;
+;; Step A needs a real instruction but step B does not.
+
+(define_insn "truncdisi2"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,U,m")
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
+  ""
+  "@
+   addxi\t%0, %r1, 0
+   st4\t%0, %r1
+   st4_add\t%I0, %r1, %i0"
+  [(set_attr "type" "Y01,Y2,X1")])
+
+(define_insn "truncdihi2"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,U,m")
+        (truncate:HI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
+  ""
+  "@
+   addxi\t%0, %r1, 0
+   st2\t%0, %r1
+   st2_add\t%I0, %r1, %i0"
+  [(set_attr "type" "Y01,Y2,X1")])
+
+(define_insn "truncdiqi2"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r,U,m")
+        (truncate:QI (match_operand:DI 1 "reg_or_0_operand" "rO,rO,rO")))]
+  ""
+  "@
+   addxi\t%0, %r1, 0
+   st1\t%0, %r1
+   st1_add\t%I0, %r1, %i0"
+  [(set_attr "type" "Y01,Y2,X1")])
+
+;; Combiner patterns to optimize away unnecessary truncates.
+
+(define_insn "*zero_extendsidi_truncdisi"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (zero_extend:DI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "0"))))]
+  ""
+  "v4int_l\t%0, zero, %r1"
+  [(set_attr "type" "X01")])
+
+(define_insn "*addsi_truncdisi"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (plus:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO"))
+        (match_operand:SI 2 "add_operand" "r,I,JT")))]
+  ""
+  "@
+   addx\t%0, %r1, %r2
+   addxi\t%0, %r1, %2
+   addxli\t%0, %r1, %H2"
+  [(set_attr "type" "*,*,X01")])
+
+(define_insn "*addsi_truncdisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
+        (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "addx\t%0, %r1, %r2")
+
+(define_insn "*ashldi_truncdisi"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (ashift:DI
+        (match_operand:DI 1 "reg_or_0_operand" "rO")
+        (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
+  ""
+  "shl\t%0, %r1, %r2")
+
+(define_insn "*ashlsi_truncdisi"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (ashift:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO"))
+        (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+  shlxi\t%0, %r1, %2
+  shlx\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_insn "*ashlsi_truncdisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ashift:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
+        (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "shlx\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*ashrdi3_truncdisi"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (ashiftrt:DI
+        (match_operand:DI 1 "reg_or_0_operand" "rO")
+        (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
+  ""
+  "shrs\t%0, %r1, %r2")
+
+(define_insn "*lshrsi_truncdisi"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (lshiftrt:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO,rO"))
+        (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+  shruxi\t%0, %r1, %2
+  shrux\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+  
+(define_insn "*lshrsi_truncdisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (lshiftrt:SI
+        (truncate:SI (match_operand:DI 1 "reg_or_0_operand" "rO"))
+        (truncate:SI (match_operand:DI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "shrux\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*lshrdi_truncdisi"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (lshiftrt:DI
+        (match_operand:DI 1 "reg_or_0_operand" "rO")
+        (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
+  ""
+  "shru\t%0, %r1, %r2")
+
+(define_insn "*rotldi_truncdisi"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (rotate:DI
+        (match_operand:DI 1 "reg_or_0_operand" "rO")
+        (truncate:SI (match_operand:DI 2 "reg_or_u6bit_operand" "rO"))))]
+  ""
+  "rotl\t%0, %r1, %r2")
+
+\f
+;;
+;; Multiplies
+;;
+
+(define_insn "mulsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mult:SI (match_operand:SI 1 "reg_or_0_operand" "%rO")
+                 (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "mulx\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "mulsidi3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (mult:DI (sign_extend:DI
+                  (match_operand:SI 1 "reg_or_0_operand" "%rO"))
+                (sign_extend:DI
+                  (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mul_ls_ls\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "umulsidi3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (mult:DI (zero_extend:DI
+                  (match_operand:SI 1 "reg_or_0_operand" "%rO"))
+                (zero_extend:DI
+                  (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mul_lu_lu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_expand "muldi3"
+  [(set (match_operand:DI 0 "register_operand" "")
+        (unspec:DI [(match_operand:DI 1 "nonmemory_operand" "")
+                    (match_operand:DI 2 "nonmemory_operand" "")]
+                   UNSPEC_INSN_MUL_HU_LU))
+   (set (match_dup 0)
+        (unspec:DI [(match_dup 0) (match_dup 2) (match_dup 1)]
+                   UNSPEC_INSN_MULA_HU_LU))
+   (set (match_dup 0)
+        (ashift:DI (match_dup 0) (const_int 32)))
+   (set (match_dup 0)
+        (unspec:DI [(match_dup 0) (match_dup 2) (match_dup 1)]
+                   UNSPEC_INSN_MULA_LU_LU))]
+  ""
+  {
+    operands[1] = force_reg (DImode, operands[1]);
+    operands[1] = make_safe_from (operands[1], operands[0]);
+
+    if (tilegx_expand_muldi (operands[0], operands[1], operands[2]))
+      DONE;
+    else
+      {
+        operands[2] = force_reg (DImode, operands[2]);
+        operands[2] = make_safe_from (operands[2], operands[0]);
+      }
+  })
+
+(define_insn "usmulsidi3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (mult:DI (zero_extend:DI
+                 (match_operand:SI 1 "reg_or_0_operand" "rO"))
+                (sign_extend:DI
+                 (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mul_ls_lu\t%0, %r2, %r1"
+  [(set_attr "type" "X0_2cycle")])
+  
+(define_insn "maddsidi4"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (plus:DI
+         (mult:DI (sign_extend:DI
+                   (match_operand:SI 1 "reg_or_0_operand" "rO"))
+                  (sign_extend:DI
+                   (match_operand:SI 2 "reg_or_0_operand" "rO")))
+         (match_operand:DI 3 "register_operand" "0")))]
+  ""
+  "mula_ls_ls\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "umaddsidi4"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (plus:DI
+         (mult:DI (zero_extend:DI
+                   (match_operand:SI 1 "reg_or_0_operand" "rO"))
+                  (zero_extend:DI
+                   (match_operand:SI 2 "reg_or_0_operand" "rO")))
+         (match_operand:DI 3 "register_operand" "0")))]
+  ""
+  "mula_lu_lu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_expand "smulsi3_highpart"
+  [(set (match_dup 3)
+        (mult:DI (sign_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
+                 (sign_extend:DI (match_operand:SI 2 "reg_or_0_operand" ""))))
+   (set (match_dup 4)
+        (ashiftrt:DI (match_dup 3) (const_int 32)))
+   (set (match_operand:SI 0 "register_operand" "")
+       (truncate:SI (match_dup 4)))]
+  ""
+  {
+    operands[3] = gen_reg_rtx (DImode);
+    operands[4] = gen_reg_rtx (DImode);
+  })
+
+(define_expand "umulsi3_highpart"
+  [(set (match_dup 3)
+        (mult:DI (zero_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
+                 (zero_extend:DI (match_operand:SI 2 "reg_or_0_operand" ""))))
+   (set (match_dup 4)
+        (lshiftrt:DI (match_dup 3) (const_int 32)))
+   (set (match_operand:SI 0 "register_operand" "")
+       (truncate:SI (match_dup 4)))]
+  ""
+  {
+    operands[3] = gen_reg_rtx (DImode);
+    operands[4] = gen_reg_rtx (DImode);
+  })
+
+(define_expand "smuldi3_highpart"
+  [(set (match_operand:DI 0 "register_operand" "")
+        (truncate:DI
+         (ashiftrt:TI 
+          (mult:TI (sign_extend:TI (match_operand:DI 1 "reg_or_0_operand" ""))
+                   (sign_extend:TI (match_operand:DI 2 "reg_or_0_operand" "")))
+          (const_int 64))))]
+  ""
+  {
+    tilegx_expand_smuldi3_highpart (operands[0], operands[1], operands[2]);
+    DONE;
+  })
+
+(define_expand "umuldi3_highpart"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (truncate:DI
+        (lshiftrt:TI
+         (mult:TI (zero_extend:TI (match_operand:DI 1 "reg_or_0_operand" ""))
+                  (zero_extend:TI (match_operand:DI 2 "reg_or_0_operand" "")))
+         (const_int 64))))]
+  ""
+{
+  tilegx_expand_umuldi3_highpart (operands[0], operands[1], operands[2]);
+  DONE;
+})
+
+\f
+;;
+;; Divide stubs.  These exist to work around a bug in expmed.c, which
+;; will not attempt to convert a divide by constant into a multiply
+;; unless there is a pattern for a divide of the same mode.  The end
+;; result is a 32-bit divide turns into 64-bit multiply.
+;;
+
+(define_expand "divsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (div:SI (match_operand:SI 1 "reg_or_0_operand" "")
+                (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  FAIL;
+})
+
+(define_expand "udivsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (udiv:SI (match_operand:SI 1 "reg_or_0_operand" "")
+                 (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  FAIL;
+})
+
+\f
+;;
+;; Loops
+;;
+
+;; Define the subtract-one-and-jump insns so loop.c knows what to generate.
+(define_expand "doloop_end"
+  [(use (match_operand 0 "" ""))    ;; loop pseudo
+   (use (match_operand 1 "" ""))    ;; iterations; zero if unknown
+   (use (match_operand 2 "" ""))    ;; max iterations
+   (use (match_operand 3 "" ""))    ;; loop level
+   (use (match_operand 4 "" ""))]   ;; label
+   ""
+{
+  if (optimize > 0 && flag_modulo_sched)
+  {
+     rtx s0;
+     rtx bcomp;
+     rtx loc_ref;
+     enum machine_mode mode = GET_MODE (operands[0]);
+
+     /* only do inner loop  */
+     if (INTVAL (operands[3]) > 1)
+       FAIL;
+     /* only deal with loop counters in SImode or DImode  */
+     if (mode != SImode && mode != DImode)
+       FAIL;
+
+     s0 = operands [0];
+     emit_move_insn (s0, gen_rtx_PLUS (mode, s0, GEN_INT (-1)));
+     bcomp = gen_rtx_NE(mode, s0, const0_rtx);
+     loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [4]);
+     emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
+                                  gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
+                                                        loc_ref, pc_rtx)));
+     DONE;
+  }
+  else
+     FAIL;
+
+})
+
+;;
+;; Prologue/epilogue
+;;
+(define_expand "prologue"
+  [(const_int 0)]
+  ""
+{
+  tilegx_expand_prologue ();
+  DONE;
+})
+
+(define_expand "epilogue"
+  [(const_int 0)]
+  ""
+{
+  tilegx_expand_epilogue (false);
+  DONE;
+})
+
+(define_expand "sibcall_epilogue"
+  [(const_int 0)]
+  ""
+{
+  tilegx_expand_epilogue (true);
+  DONE;
+})
+;;
+;; Stack manipulations
+;;
+
+;; An insn to allocate new stack space for dynamic use (e.g., alloca).
+(define_expand "allocate_stack"
+  [(set (match_operand 0 "register_operand" "")
+       (minus (reg 54) (match_operand 1 "nonmemory_operand" "")))
+   (set (reg 54)
+       (minus (reg 54) (match_dup 1)))]
+  ""
+  "tilegx_allocate_stack (operands[0], operands[1]); DONE;")
+
+;;
+;; Branches
+;;
+
+(define_expand "call"
+  [(parallel [(call (match_operand:DI 0 "call_operand" "")
+                   (match_operand 1 "" ""))
+              (use (reg:DI 54))
+             (clobber (reg:DI 55))])]
+  ""
+  "")
+
+(define_insn "*call_insn"
+  [(call (mem:DI (match_operand:I48MODE 0 "call_address_operand" "rO,i"))
+        (match_operand 1 "" ""))
+   (use (reg:DI 54))
+   (clobber (reg:DI 55))]
+  ""
+  "@
+   jalr\t%r0
+   jal\t%p0"
+  [(set_attr "type" "Y1,X1")])
+
+(define_expand "call_value"
+  [(parallel [(set (match_operand 0 "register_operand" "")
+                  (call (match_operand:DI 1 "call_operand" "")
+                        (match_operand 2 "" "")))
+              (use (reg:DI 54))
+             (clobber (reg:DI 55))])]
+  "")
+
+(define_insn "*call_value_insn"
+  [(set (match_operand 0 "register_operand" "=r,r")
+       (call (mem:DI (match_operand:I48MODE 1 "call_address_operand" "rO,i"))
+             (match_operand 2 "" "")))
+   (use (reg:DI 54))
+   (clobber (reg:DI 55))]
+  ""
+  "@
+   jalr\t%r1
+   jal\t%p1"
+  [(set_attr "type" "Y1,X1")])
+
+(define_expand "sibcall"
+  [(parallel [(call (match_operand:DI 0 "call_operand" "")
+                   (match_operand 1 "" ""))
+             (use (reg:DI 54))])]
+  ""
+  "")
+
+(define_insn "*sibcall_insn"
+  [(call (mem:DI (match_operand:I48MODE 0 "call_address_operand" "rO,i"))
+        (match_operand 1 "" ""))
+   (use (reg:DI 54))]
+  "SIBLING_CALL_P(insn)"
+  "@
+   jr\t%r0
+   j\t%p0"
+  [(set_attr "type" "X1,X1")])
+
+(define_expand "sibcall_value"
+  [(parallel [(set (match_operand 0 "" "")
+                  (call (match_operand:DI 1 "call_operand" "")
+                        (match_operand 2 "" "")))
+             (use (reg:DI 54))])]
+  ""
+  "")
+
+(define_insn "*sibcall_value"
+  [(set (match_operand 0 "" "")
+       (call (mem:DI (match_operand:I48MODE 1 "call_address_operand" "rO,i"))
+             (match_operand 2 "" "")))
+   (use (reg:DI 54))]
+  "SIBLING_CALL_P(insn)"
+  "@
+   jr\t%r1
+   j\t%p1"
+  [(set_attr "type" "X1,X1")])
+
+(define_insn "jump"
+  [(set (pc) (label_ref (match_operand 0 "" "")))]
+  ""
+  "j\t%l0"
+  [(set_attr "type" "X1")])
+
+(define_insn "indirect_jump"
+  [(set (pc) (match_operand 0 "pointer_operand" "rO"))]
+  ""
+  "jr\t%r0"
+  [(set_attr "type" "Y1")])
+
+(define_expand "return"
+  [(parallel
+    [(return)
+     (use (reg:DI 55))])]
+  "tilegx_can_use_return_insn_p ()"
+  "")
+
+(define_insn "_return"
+  [(return)
+   (use (reg:DI 55))]
+  "reload_completed"
+  "jrp\tlr"
+  [(set_attr "type" "Y1")])
+
+(define_expand "tablejump"
+  [(set (pc) (match_operand 0 "pointer_operand" ""))
+   (use (label_ref (match_operand 1 "" "")))]
+  ""
+{
+  tilegx_expand_tablejump (operands[0], operands[1]);
+  DONE;
+})
+
+(define_insn "tablejump_aux"
+  [(set (pc) (match_operand 0 "pointer_operand" "rO"))
+   (use (label_ref (match_operand 1 "" "")))]
+  ""
+  "jr\t%r0"
+  [(set_attr "type" "Y1")])
+
+;; Call subroutine returning any type.
+(define_expand "untyped_call"
+  [(parallel [(call (match_operand 0 "" "")
+                   (const_int 0))
+             (match_operand 1 "" "")
+             (match_operand 2 "" "")])]
+  ""
+{
+  int i;
+
+  emit_call_insn (GEN_CALL (operands[0], const0_rtx, NULL, const0_rtx));
+
+  for (i = 0; i < XVECLEN (operands[2], 0); i++)
+    {
+      rtx set = XVECEXP (operands[2], 0, i);
+      emit_move_insn (SET_DEST (set), SET_SRC (set));
+    }
+
+  /* The optimizer does not know that the call sets the function value
+     registers we stored in the result block.  We avoid problems by
+     claiming that all hard registers are used and clobbered at this
+     point.  */
+  emit_insn (gen_blockage ());
+
+  DONE;
+})
+
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers
+;; and all of memory.  This blocks insns from being moved across this
+;; point.
+(define_insn "blockage"
+  [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)]
+  ""
+  "pseudo"
+  [(set_attr "type" "nothing")
+   (set_attr "length" "0")])
+
+;; Internal expanders to prevent memory ops from moving around frame
+;; allocation/deallocation.
+;;
+;; TODO: really this clobber should just clobber the frame memory.  Is
+;; this possibly by clobbering memory @ the sp reg (as alpha does?)
+;; or by explicitly setting the alias set to the frame?
+(define_insn "sp_adjust"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+        (plus:DI
+         (match_operand:DI 1 "register_operand" "%r,r,r")
+         (match_operand:DI 2 "add_operand" "r,I,JT")))
+   (clobber (mem:BLK (scratch)))]
+ ""
+ "@
+  add\t%0, %1, %2
+  addi\t%0, %1, %2
+  addli\t%0, %1, %H2"
+ [(set_attr "type" "*,*,X01")])
+
+(define_insn "sp_adjust_32bit"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+        (plus:SI
+         (match_operand:SI 1 "register_operand" "%r,r,r")
+         (match_operand:SI 2 "add_operand" "r,I,JT")))
+   (clobber (mem:BLK (scratch)))]
+ ""
+ "@
+  addx\t%0, %1, %2
+  addxi\t%0, %1, %2
+  addxli\t%0, %1, %H2"
+ [(set_attr "type" "*,*,X01")])
+
+;; Used for move sp, r52, to pop a stack frame.  We need to make sure
+;; that stack frame memory operations have been issued before we do this.
+;; TODO: see above TODO.
+(define_insn "sp_restore<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (match_operand:I48MODE 1 "register_operand" "r"))
+   (clobber (mem:BLK (scratch)))]
+ ""
+ "move\t%0, %1")
+
+(define_insn "nop"
+  [(const_int 0)]
+  ""
+  "nop"
+  [(set_attr "type" "Y01")])
+
+\f
+;;
+;; Conditional branches
+;;
+
+(define_expand "cbranch<mode>4"
+  [(set (pc)
+      (if_then_else (match_operator 0 "ordered_comparison_operator"
+                     [(match_operand:FI48MODE 1 "reg_or_cint_operand")
+                        (match_operand:FI48MODE 2 "reg_or_cint_operand")])
+                      (label_ref (match_operand 3 ""))
+                    (pc)))]
+   ""
+{
+  tilegx_emit_conditional_branch (operands, GET_MODE (operands[1]));
+  DONE;
+})
+
+(define_insn "*bcc_normal<mode>"
+  [(set (pc)
+       (if_then_else
+        (match_operator 1 "signed_comparison_operator"
+                        [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
+                         (const_int 0)])
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilegx_output_cbranch (insn, operands, false); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*bcc_reverse<mode>"
+  [(set (pc)
+       (if_then_else
+        (match_operator 1 "signed_comparison_operator"
+                        [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
+                         (const_int 0)])
+        (pc)
+        (label_ref (match_operand 0 "" ""))))]
+  ""
+  { return tilegx_output_cbranch (insn, operands, true); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*blbs_normal<mode>"
+  [(set (pc)
+       (if_then_else
+        (ne (zero_extract:I48MODE
+              (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+              (const_int 1)
+              (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilegx_output_cbranch_with_opcode (insn, operands, "blbs", "blbc",
+                                             1); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*blbc_normal<mode>"
+  [(set (pc)
+       (if_then_else
+        (eq (zero_extract:I48MODE
+              (match_operand:I48MODE 1 "reg_or_0_operand" "rO")
+              (const_int 1)
+              (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilegx_output_cbranch_with_opcode (insn, operands, "blbc", "blbs",
+                                             1); }
+  [(set_attr "type" "X1_branch")])
+
+;; Note that __insn_mf() expands to this.
+(define_expand "memory_barrier"
+  [(set (match_dup 0)
+       (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
+  ""
+{
+  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
+  MEM_VOLATILE_P (operands[0]) = 1;
+})
+
+(define_insn "*memory_barrier"
+  [(set (match_operand:BLK 0 "" "")
+       (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
+  ""
+  "mf"
+  [(set_attr "type" "X1")])
+
+(define_insn "prefetch"
+  [(prefetch (match_operand 0 "address_operand" "rO")
+             (match_operand 1 "const_int_operand" "")
+             (match_operand 2 "const_int_operand" ""))]
+  ""
+{
+  switch (INTVAL (operands[2]))
+    {
+      case 0:
+      case 1: return "prefetch_l3\t%r0";
+      case 2: return "prefetch_l2\t%r0";
+      case 3: return "prefetch_l1\t%r0";
+      default: gcc_unreachable ();
+    }
+}
+  [(set_attr "type" "Y2")])
+
+\f
+;;
+;; "__insn" Intrinsics (some expand directly to normal patterns above).
+;;
+
+(define_insn "insn_bfexts"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "u6bit_cint_operand" "n")
+                    (match_operand:DI 3 "u6bit_cint_operand" "n")]
+                   UNSPEC_INSN_BFEXTS))]
+  ""
+  "bfexts\t%0, %r1, %2, %3"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_bfextu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "u6bit_cint_operand" "n")
+                    (match_operand:DI 3 "u6bit_cint_operand" "n")]
+                   UNSPEC_INSN_BFEXTU))]
+  ""
+  "bfextu\t%0, %r1, %2, %3"
+  [(set_attr "type" "X0")])
+
+(define_insn "*bfins"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "u6bit_cint_operand" "n")
+                    (match_operand:DI 4 "u6bit_cint_operand" "n")]
+                   UNSPEC_INSN_BFINS))]
+   ""
+   "bfins\t%0, %r2, %3, %4"
+   [(set_attr "type" "X0")])
+
+(define_expand "insn_bfins"
+  [(set (match_operand:DI 0 "register_operand" "")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "")
+                    (match_operand:DI 2 "reg_or_0_operand" "")
+                    (match_operand:DI 3 "u6bit_cint_operand" "")
+                    (match_operand:DI 4 "u6bit_cint_operand" "")]
+                   UNSPEC_INSN_BFINS))]
+  "INTVAL (operands[3]) != 64"
+{
+  HOST_WIDE_INT first = INTVAL (operands[3]);
+  HOST_WIDE_INT last = INTVAL (operands[4]);
+
+  if (last >= first)
+    {
+      /* This is not a wacky wraparound case, so we can express this
+         as a standard insv. */
+      if (operands[0] != operands[1])
+        {
+         operands[2] = make_safe_from (operands[2], operands[0]);
+         emit_move_insn (operands[0], operands[1]);
+       }
+
+      emit_insn (gen_insv (operands[0],
+                          GEN_INT (last - first + 1), operands[3],
+                          operands[2]));
+
+      DONE;
+    }
+})
+
+(define_insn "insn_cmpexch<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (mem:I48MODE (match_operand 1 "pointer_operand" "rO")))
+   (set (mem:I48MODE (match_dup 1))
+        (unspec_volatile:I48MODE
+        [(mem:I48MODE (match_dup 1))
+         (reg:I48MODE TILEGX_CMPEXCH_REG)
+         (match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
+        UNSPEC_INSN_CMPEXCH))]
+  ""
+  "cmpexch<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_cmul"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMUL))]
+  ""
+  "cmul\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmula"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULA))]
+  ""
+  "cmula\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmulaf"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULAF))]
+  ""
+  "cmulaf\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmulf"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULF))]
+  ""
+  "cmulf\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmulfr"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULFR))]
+  ""
+  "cmulfr\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmulh"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULH))]
+  ""
+  "cmulh\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_cmulhr"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CMULHR))]
+  ""
+  "cmulhr\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_crc32_32"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CRC32_32))]
+  ""
+  "crc32_32\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_crc32_8"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_CRC32_8))]
+  ""
+  "crc32_8\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_dblalign"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand 3 "pointer_operand" "rO")]
+                   UNSPEC_INSN_DBLALIGN))]
+  ""
+  "dblalign\t%0, %r2, %r3"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_dblalign2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_DBLALIGN2))]
+  ""
+  "dblalign2\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_dblalign4"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_DBLALIGN4))]
+  ""
+  "dblalign4\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_dblalign6"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_DBLALIGN6))]
+  ""
+  "dblalign6\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_dtlbpr"
+  [(unspec_volatile:VOID [(match_operand:DI 0 "reg_or_0_operand" "rO")]
+                         UNSPEC_INSN_DTLBPR)]
+  ""
+  "dtlbpr\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_exch<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (mem:I48MODE (match_operand 1 "pointer_operand" "rO")))
+   (set (mem:I48MODE (match_dup 1))
+       (unspec_volatile:I48MODE
+        [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")]
+        UNSPEC_INSN_EXCH))]
+  ""
+  "exch<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_fdouble_add_flags"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_ADD_FLAGS))]
+  ""
+  "fdouble_add_flags\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_addsub"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_ADDSUB))]
+  ""
+  "fdouble_addsub\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_mul_flags"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_MUL_FLAGS))]
+  ""
+  "fdouble_mul_flags\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_pack1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_PACK1))]
+  ""
+  "fdouble_pack1\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_pack2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_PACK2))]
+  ""
+  "fdouble_pack2\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_sub_flags"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_SUB_FLAGS))]
+  ""
+  "fdouble_sub_flags\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_unpack_max"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_UNPACK_MAX))]
+  ""
+  "fdouble_unpack_max\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fdouble_unpack_min"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FDOUBLE_UNPACK_MIN))]
+  ""
+  "fdouble_unpack_min\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fetchadd<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec_volatile:I48MODE
+        [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
+        UNSPEC_ATOMIC))
+   (set (mem:I48MODE (match_dup 1))
+        (plus:I48MODE (mem:I48MODE (match_dup 1))
+                      (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
+  ""
+  "fetchadd<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_fetchaddgez<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec_volatile:I48MODE
+        [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
+        UNSPEC_ATOMIC))
+   (set (mem:I48MODE (match_dup 1))
+        (unspec:I48MODE [(match_operand:I48MODE 2 "reg_or_0_operand" "rO")
+                         (mem:I48MODE (match_dup 1))]
+                        UNSPEC_INSN_FETCHADDGEZ))]
+  ""
+  "fetchaddgez<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_fetchand<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec_volatile:I48MODE
+        [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
+        UNSPEC_ATOMIC))
+   (set (mem:I48MODE (match_dup 1))
+        (and:I48MODE (mem:I48MODE (match_dup 1))
+                     (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
+  ""
+  "fetchand<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_fetchor<four_if_si>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+        (unspec_volatile:I48MODE
+        [(mem:I48MODE (match_operand 1 "pointer_operand" "rO"))]
+        UNSPEC_ATOMIC))
+   (set (mem:I48MODE (match_dup 1))
+        (ior:I48MODE (mem:I48MODE (match_dup 1))
+                     (match_operand:I48MODE 2 "reg_or_0_operand" "rO")))]
+  ""
+  "fetchor<four_if_si>\t%0, %r1, %r2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_finv"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_FINV)]
+  ""
+  "finv\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_flush"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_FLUSH)]
+  ""
+  "flush\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_flushwb"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FLUSHWB)]
+  ""
+  "flushwb"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_fnop"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FNOP)]
+  ""
+  "fnop")
+
+(define_insn "insn_fsingle_add1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_ADD1))]
+  ""
+  "fsingle_add1\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_fsingle_addsub2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_ADDSUB2))]
+  ""
+  "fsingle_addsub2\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fsingle_mul1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_MUL1))]
+  ""
+  "fsingle_mul1\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_fsingle_mul2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_MUL2))]
+  ""
+  "fsingle_mul2\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fsingle_pack1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_PACK1))]
+  ""
+  "fsingle_pack1\t%0, %r1"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_fsingle_pack2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_PACK2))]
+  ""
+  "fsingle_pack2\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_fsingle_sub1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_FSINGLE_SUB1))]
+  ""
+  "fsingle_sub1\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_drain"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_DRAIN)]
+  ""
+  "drain"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_icoh"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")] 
+                         UNSPEC_INSN_ICOH)]
+  ""
+  "icoh\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_ill"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_ILL)]
+  ""
+  "ill"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_info"
+  [(unspec_volatile:VOID [(match_operand:DI 0 "s8bit_cint_operand" "i")]
+                         UNSPEC_INSN_INFO)]
+  ""
+  "info\t%0")
+
+(define_insn "insn_infol"
+  [(unspec_volatile:VOID [(match_operand:DI 0 "s16bit_cint_operand" "i")]
+                         UNSPEC_INSN_INFOL)]
+  ""
+  "infol\t%0"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_inv"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_INV)]
+  ""
+  "inv\t%r0"
+  [(set_attr "type" "X1")])
+
+;; loads
+
+(define_expand "insn_ld"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (mem:DI (match_operand 1 "pointer_operand" "")))]
+  "")
+
+(define_insn "insn_ld_add<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (mem:DI (match_dup 3)))]
+  ""
+  "ld_add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_ldna"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
+                        (const_int -8))))]
+  ""
+  "ldna\t%0, %r1"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_ldna_add<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (mem:DI (and:DI (match_dup 3) (const_int -8))))]
+  ""
+  "ldna_add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_expand "insn_ld<n><s>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (any_extend:DI
+        (mem:I124MODE (match_operand 1 "pointer_operand" ""))))]
+  "")
+
+(define_insn "insn_ld<I124MODE:n><s>_add<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI (mem:I124MODE (match_dup 3))))]
+  ""
+  "ld<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+;; non temporal loads
+
+(define_insn "insn_ldnt"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
+                   UNSPEC_NON_TEMPORAL))]
+  ""
+  "ldnt\t%0, %r1"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_ldnt_add<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(mem:DI (match_dup 3))]
+                   UNSPEC_NON_TEMPORAL))]
+  ""
+  "ldnt_add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_ldnt<n><s>"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (any_extend:DI
+        (unspec:I124MODE
+         [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
+         UNSPEC_NON_TEMPORAL)))]
+  ""
+  "ldnt<n><s>\t%0, %r1"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_ldnt<I124MODE:n><s>_add<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
+                                       UNSPEC_NON_TEMPORAL)))]
+  ""
+  "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+;; L2 hits
+
+(define_insn "insn_ld_L2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "ld\t%0, %r1"
+  [(set_attr "type" "Y2_L2")])
+
+(define_insn "insn_ld_add_L2<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(mem:DI (match_dup 3))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "ld_add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ldna_L2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
+                                   (const_int -8)))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "ldna\t%0, %r1"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ldna_add_L2<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(mem:DI (and:DI (match_dup 3) (const_int -8)))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "ldna_add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ld<n><s>_L2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (any_extend:DI 
+        (unspec:I124MODE
+         [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
+         UNSPEC_LATENCY_L2)))]
+  ""
+  "ld<n><s>\t%0, %r1"
+  [(set_attr "type" "Y2_L2")])
+
+(define_insn "insn_ld<I124MODE:n><s>_add_L2<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_L2)))]
+  ""
+  "ld<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+;; L2 hits, non temporal loads
+
+(define_insn "insn_ldnt_L2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(unspec:DI
+                     [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
+                     UNSPEC_NON_TEMPORAL)]
+                   UNSPEC_LATENCY_L2))]
+  ""
+  "ldnt\t%0, %r1"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ldnt_add_L2<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(unspec:DI
+                     [(mem:DI (match_dup 3))]
+                     UNSPEC_NON_TEMPORAL)]
+                   UNSPEC_LATENCY_L2))]
+                   ""
+  "ldnt_add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ldnt<n><s>_L2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (any_extend:DI
+        (unspec:I124MODE
+         [(unspec:I124MODE
+           [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
+           UNSPEC_NON_TEMPORAL)]
+         UNSPEC_LATENCY_L2)))]
+  ""
+  "ldnt<n><s>\t%0, %r1"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_ldnt<I124MODE:n><s>_add_L2<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI
+        (unspec:I124MODE [(unspec:I124MODE
+                           [(mem:I124MODE (match_dup 3))]
+                           UNSPEC_NON_TEMPORAL)]
+                         UNSPEC_LATENCY_L2)))]
+  ""
+  "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+;; L2 miss
+
+(define_insn "insn_ld_miss"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "ld\t%0, %r1"
+  [(set_attr "type" "Y2_miss")])
+
+(define_insn "insn_ld_add_miss<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(mem:DI (match_dup 3))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "ld_add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ldna_miss"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(mem:DI (and:DI (match_operand 1 "pointer_operand" "rO")
+                                   (const_int -8)))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "ldna\t%0, %r1"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ldna_add_miss<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(mem:DI (and:DI (match_dup 3) (const_int -8)))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "ldna_add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ld<n><s>_miss"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (any_extend:DI 
+        (unspec:I124MODE
+         [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
+         UNSPEC_LATENCY_MISS)))]
+  ""
+  "ld<n><s>\t%0, %r1"
+  [(set_attr "type" "Y2_miss")])
+
+(define_insn "insn_ld<I124MODE:n><s>_add_miss<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI (unspec:I124MODE [(mem:I124MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_MISS)))]
+  ""
+  "ld<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+;; L2 miss, non temporal loads
+
+(define_insn "insn_ldnt_miss"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (unspec:DI [(unspec:DI
+                     [(mem:DI (match_operand 1 "pointer_operand" "rO"))]
+                     UNSPEC_NON_TEMPORAL)]
+                   UNSPEC_LATENCY_MISS))]
+  ""
+  "ldnt\t%0, %r1"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ldnt_add_miss<bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(unspec:DI
+                     [(mem:DI (match_dup 3))]
+                     UNSPEC_NON_TEMPORAL)]
+                   UNSPEC_LATENCY_MISS))]
+                   ""
+  "ldnt_add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ldnt<n><s>_miss"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+       (any_extend:DI
+        (unspec:I124MODE
+         [(unspec:I124MODE
+           [(mem:I124MODE (match_operand 1 "pointer_operand" "rO"))]
+           UNSPEC_NON_TEMPORAL)]
+         UNSPEC_LATENCY_MISS)))]
+  ""
+  "ldnt<n><s>\t%0, %r1"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_ldnt<I124MODE:n><s>_add_miss<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 1 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "1")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:DI 0 "register_operand" "=r")
+        (any_extend:DI
+        (unspec:I124MODE [(unspec:I124MODE
+                      [(mem:I124MODE (match_dup 3))]
+                      UNSPEC_NON_TEMPORAL)]
+                    UNSPEC_LATENCY_MISS)))]
+  ""
+  "ldnt<I124MODE:n><s>_add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+;; end loads
+
+(define_insn "insn_lnk"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(const_int 0)] UNSPEC_INSN_LNK))]
+  ""
+  "lnk\t%0"
+  [(set_attr "type" "Y1")])
+
+(define_insn "insn_mfspr"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec_volatile:DI [(match_operand:DI 1 "u14bit_cint_operand" "i")]
+                            UNSPEC_INSN_MFSPR))
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "mfspr\t%0, %1"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_mtspr"
+  [(unspec_volatile:DI [(match_operand:DI 0 "u14bit_cint_operand" "i")
+                        (match_operand:DI 1 "reg_or_0_operand" "rO")]
+                       UNSPEC_INSN_MTSPR)
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "mtspr\t%0, %r1"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_mm"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "u6bit_cint_operand" "i")
+                    (match_operand:DI 4 "u6bit_cint_operand" "i")]
+                   UNSPEC_INSN_MM))]
+  ""
+  "mm\t%0, %r2, %3, %4"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_mul_hs_hs"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HS_HS))]
+  ""
+  "mul_hs_hs\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mul_hs_hu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HS_HU))]
+  ""
+  "mul_hs_hu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_hs_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HS_LS))]
+  ""
+  "mul_hs_ls\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_hs_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HS_LU))]
+  ""
+  "mul_hs_lu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_hu_hu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HU_HU))]
+  ""
+  "mul_hu_hu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mul_hu_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HU_LS))]
+  ""
+  "mul_hu_ls\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_hu_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_HU_LU))]
+  ""
+  "mul_hu_lu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_ls_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_LS_LS))]
+  ""
+  "mul_ls_ls\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mul_ls_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_LS_LU))]
+  ""
+  "mul_ls_lu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mul_lu_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MUL_LU_LU))]
+  ""
+  "mul_lu_lu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mula_hs_hs"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HS_HS))]
+  ""
+  "mula_hs_hs\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mula_hs_hu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HS_HU))]
+  ""
+  "mula_hs_hu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_hs_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HS_LS))]
+  ""
+  "mula_hs_ls\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_hs_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HS_LU))]
+  ""
+  "mula_hs_lu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_hu_hu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HU_HU))]
+  ""
+  "mula_hu_hu\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mula_hu_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HU_LS))]
+  ""
+  "mula_hu_ls\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_hu_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_HU_LU))]
+  ""
+  "mula_hu_lu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_ls_ls"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_LS_LS))]
+  ""
+  "mula_ls_ls\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mula_ls_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_LS_LU))]
+  ""
+  "mula_ls_lu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mula_lu_lu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULA_LU_LU))]
+  ""
+  "mula_lu_lu\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulax"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_MULAX))]
+  ""
+  "mulax\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_nap"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_NAP)]
+  ""
+  "nap"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_nor_<mode>"
+  [(set (match_operand:I48MODE 0 "register_operand" "=r")
+       (and:I48MODE
+         (not:I48MODE (match_operand:I48MODE 1 "reg_or_0_operand" "rO"))
+         (not:I48MODE (match_operand:I48MODE 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "nor\t%0, %r1, %r2")
+
+(define_expand "insn_prefetch_l1"
+  [(prefetch (match_operand 0 "pointer_operand" "")
+             (const_int 0)
+             (const_int 3))]
+  "")
+
+(define_expand "insn_prefetch_l2"
+  [(prefetch (match_operand 0 "pointer_operand" "")
+             (const_int 0)
+             (const_int 2))]
+  "")
+
+(define_expand "insn_prefetch_l3"
+  [(prefetch (match_operand 0 "pointer_operand" "")
+             (const_int 0)
+             (const_int 1))]
+  "")
+
+(define_insn "insn_prefetch_l1_fault"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_PREFETCH_L1_FAULT)]
+  ""
+  "prefetch_l1_fault\t%r0"
+  [(set_attr "type" "Y2")])
+
+(define_insn "insn_prefetch_l2_fault"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_PREFETCH_L2_FAULT)]
+  ""
+  "prefetch_l2_fault\t%r0"
+  [(set_attr "type" "Y2")])
+
+(define_insn "insn_prefetch_l3_fault"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_PREFETCH_L3_FAULT)]
+  ""
+  "prefetch_l3_fault\t%r0"
+  [(set_attr "type" "Y2")])
+
+(define_insn "insn_revbits"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_REVBITS))]
+  ""
+  "revbits\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_shl1add"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
+                          (const_int 2))
+                 (match_operand:DI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl1add\t%0, %r1, %r2")
+
+(define_insn "insn_shl1addx"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                          (const_int 2))
+                 (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl1addx\t%0, %r1, %r2")
+
+(define_insn "insn_shl2add"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
+                          (const_int 4))
+                 (match_operand:DI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl2add\t%0, %r1, %r2")
+
+(define_insn "insn_shl2addx"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                          (const_int 4))
+                 (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl2addx\t%0, %r1, %r2")
+
+(define_insn "insn_shl3add"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (plus:DI (mult:DI (match_operand:DI 1 "reg_or_0_operand" "rO")
+                          (const_int 8))
+                 (match_operand:DI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl3add\t%0, %r1, %r2")
+
+(define_insn "insn_shl3addx"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                          (const_int 8))
+                 (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "shl3addx\t%0, %r1, %r2")
+
+(define_insn "insn_shufflebytes"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_SHUFFLEBYTES))]
+  ""
+  "shufflebytes\t%0, %r2, %r3"
+  [(set_attr "type" "X0")])
+
+;; stores
+
+(define_expand "insn_st"
+  [(set (mem:DI (match_operand 0 "pointer_operand" ""))
+        (match_operand:DI 1 "reg_or_0_operand" ""))]
+  "")
+
+(define_insn "insn_st_add<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "0")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (mem:DI (match_dup 3))
+        (match_operand:DI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "st_add\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+(define_expand "insn_st<n>"
+  [(set (mem:I124MODE (match_operand 0 "pointer_operand" ""))
+        (match_operand:DI 1 "reg_or_0_operand" ""))]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], DImode, 0);
+})
+
+(define_expand "insn_st<I124MODE:n>_add<I48MODE:bitsuffix>"
+  [(parallel
+    [(set (match_operand:I48MODE 0 "pointer_operand" "")
+         (plus:I48MODE (match_operand 3 "pointer_operand" "")
+                       (match_operand 2 "s8bit_cint_operand" "")))
+     (set (mem:I124MODE (match_dup 3))
+         (match_operand:DI 1 "reg_or_0_operand" ""))])]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<I124MODE:MODE>mode, operands[1],
+                                    DImode, 0);
+})
+
+(define_insn "*insn_st<I124MODE:n>_add<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 0 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "0")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (mem:I124MODE (match_dup 3))
+        (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
+  ""
+  "st<I124MODE:n>_add\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+;; non-temporal stores
+
+(define_insn "insn_stnt"
+  [(set (mem:DI (unspec [(match_operand 0 "pointer_operand" "rO")]
+                       UNSPEC_NON_TEMPORAL))
+        (match_operand:DI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "stnt\t%0, %r1"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_stnt_add<bitsuffix>"
+  [(set (match_operand:I48MODE 0 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "0")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (mem:DI (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
+        (match_operand:DI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "stnt_add\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+(define_expand "insn_stnt<n>"
+  [(set (mem:I124MODE (unspec [(match_operand 0 "pointer_operand" "")]
+                             UNSPEC_NON_TEMPORAL))
+        (match_operand:DI 1 "reg_or_0_operand" ""))]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], DImode, 0);
+})
+
+(define_insn "*insn_stnt<n>"
+  [(set (mem:I124MODE (unspec [(match_operand 0 "pointer_operand" "rO")]
+                             UNSPEC_NON_TEMPORAL))
+       (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
+  ""
+  "stnt<n>\t%0, %r1"
+  [(set_attr "type" "X1")])
+
+(define_expand "insn_stnt<I124MODE:n>_add<I48MODE:bitsuffix>"
+  [(parallel
+    [(set (match_operand:I48MODE 0 "pointer_operand" "")
+         (plus:I48MODE (match_operand 3 "pointer_operand" "")
+                       (match_operand 2 "s8bit_cint_operand" "")))
+     (set (mem:I124MODE (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
+         (match_operand:DI 1 "reg_or_0_operand" "rO"))])]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<I124MODE:MODE>mode, operands[1],
+                                    DImode, 0);
+})
+
+(define_insn "*insn_stnt<I124MODE:n>_add<I48MODE:bitsuffix>"
+  [(set (match_operand:I48MODE 0 "pointer_operand" "=r")
+        (plus:I48MODE (match_operand 3 "pointer_operand" "0")
+                     (match_operand 2 "s8bit_cint_operand" "i")))
+   (set (mem:I124MODE (unspec:I48MODE [(match_dup 3)] UNSPEC_NON_TEMPORAL))
+        (match_operand:I124MODE 1 "reg_or_0_operand" "rO"))]
+  ""
+  "stnt<I124MODE:n>_add\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+;; end stores
+
+(define_insn "insn_tblidxb0"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_TBLIDXB0))]
+  ""
+  "tblidxb0\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb1"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_TBLIDXB1))]
+  ""
+  "tblidxb1\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb2"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_TBLIDXB2))]
+  ""
+  "tblidxb2\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb3"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_TBLIDXB3))]
+  ""
+  "tblidxb3\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+;; insn_v1add
+;; insn_v1addi
+;; insn_v1cmpeq
+;; insn_v1cmpeqi
+;; insn_v1cmplts
+;; insn_v1cmpltsi
+;; insn_v1cmpltu
+;; insn_v1cmpltui
+;; insn_v1maxu
+;; insn_v1maxui
+;; insn_v1minu
+;; insn_v1minui
+(define_insn "<optab>v8qi3"
+  [(set (match_operand:V8QI 0 "register_operand" "=r,r")
+       (v1op_immed:V8QI
+        (match_operand:V8QI 1 "reg_or_0_operand" "<comm>rO,rO")
+        (match_operand:V8QI 2 "reg_or_v8s8bit_operand" "W,rO")))]
+  ""
+  "@
+   v1<insn>i\t%0, %r1, %j2
+   v1<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>,<pipe>")])
+
+(define_expand "insn_v1<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v1op_immed:V8QI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
+                                     V8QImode, operands[1], operands[2], true);
+  DONE;
+})
+
+(define_expand "insn_v1<insn>i"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v1op_immed:V8QI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "s8bit_cint_operand" "")))]
+  ""
+{
+  /* Tile out immediate and expand to general case. */
+  rtx n = tilegx_simd_int (operands[2], QImode);
+  tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
+                                     V8QImode, operands[1], n, true);
+  DONE;
+})
+
+;; insn_v1shl
+;; insn_v1shli
+;; insn_v1shrs
+;; insn_v1shrsi
+;; insn_v1shru
+;; insn_v1shrui
+(define_insn "<optab>v8qi3"
+  [(set (match_operand:V8QI 0 "register_operand" "=r,r")
+       (any_shift:V8QI
+        (match_operand:V8QI 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:DI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+   v1<insn>i\t%0, %r1, %2
+   v1<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>,<pipe>")])
+
+(define_expand "insn_v1<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (any_shift:V8QI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_u5bit_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
+                                     V8QImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_v2add
+;; insn_v2addi
+;; insn_v2maxs
+;; insn_v2maxsi
+;; insn_v2mins
+;; insn_v2minsi
+;; insn_v2cmpeq
+;; insn_v2cmpeqi
+;; insn_v2cmplts
+;; insn_v2cmpltsi
+;; insn_v2cmpltu
+;; insn_v2cmpltui
+(define_insn "<optab>v4hi3"
+  [(set (match_operand:V4HI 0 "register_operand" "=r,r")
+       (v2op_immed:V4HI
+        (match_operand:V4HI 1 "reg_or_0_operand" "<comm>rO,rO")
+        (match_operand:V4HI 2 "reg_or_v4s8bit_operand" "Y,rO")))]
+  ""
+  "@
+   v2<insn>i\t%0, %r1, %j2
+   v2<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>,<pipe>")])
+
+(define_expand "insn_v2<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v2op_immed:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], operands[2], true);
+  DONE;
+})
+
+(define_expand "insn_v2<insn>i"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v2op_immed:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "s8bit_cint_operand" "")))]
+  ""
+{
+  /* Tile out immediate and expand to general case. */
+  rtx n = tilegx_simd_int (operands[2], HImode);
+  tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], n, true);
+  DONE;
+})
+
+;; insn_v2shl
+;; insn_v2shli
+;; insn_v2shrs
+;; insn_v2shrsi
+;; insn_v2shru
+;; insn_v2shrui
+(define_insn "<optab>v4hi3"
+  [(set (match_operand:V4HI 0 "register_operand" "=r,r")
+       (any_shift:V4HI
+        (match_operand:V4HI 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:DI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+   v2<insn>i\t%0, %r1, %2
+   v2<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>,<pipe>")])
+
+(define_expand "insn_v2<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (any_shift:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_u5bit_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_v1adduc
+;; insn_v1subuc
+;; insn_v1sub
+;; insn_v1cmpne
+;; insn_v1cmples
+;; insn_v1cmpleu
+;; insn_v1multu
+(define_insn "<optab>v8qi3"
+  [(set (match_operand:V8QI 0 "register_operand" "=r")
+       (v1op:V8QI
+        (match_operand:V8QI 1 "reg_or_0_operand" "<comm>rO")
+        (match_operand:V8QI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v1<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>")])
+
+(define_expand "insn_v1<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v1op:V8QI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v8qi3, V8QImode, operands[0],
+                                     V8QImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_v2addsc
+;; insn_v2subsc
+;; insn_v2sub
+;; insn_v2cmpne
+;; insn_v2cmples
+;; insn_v2cmpleu
+(define_insn "<optab>v4hi3"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+       (v2op:V4HI
+        (match_operand:V4HI 1 "reg_or_0_operand" "<comm>rO")
+        (match_operand:V4HI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v2<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>")])
+
+(define_expand "insn_v2<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v2op:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_v2mults
+(define_insn "mulv4hi3"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+       (mult:V4HI
+        (match_operand:V4HI 1 "reg_or_0_operand" "%rO")
+        (match_operand:V4HI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v2mults\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_expand "insn_v2mults"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (mult:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_mulv4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_v2shlsc
+(define_insn "<optab>v4hi3"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+       (v2shift:V4HI
+        (match_operand:V4HI 1 "reg_or_0_operand" "rO")
+        (match_operand:DI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v2<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>")])
+
+(define_expand "insn_v2<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v2shift:V4HI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v4hi3, V4HImode, operands[0],
+                                     V4HImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_v4addsc
+;; insn_v4subsc
+;; insn_v4add
+;; insn_v4sub
+(define_insn "<optab>v2si3"
+  [(set (match_operand:V2SI 0 "register_operand" "=r")
+       (v4op:V2SI
+        (match_operand:V2SI 1 "reg_or_0_operand" "<comm>rO")
+        (match_operand:V2SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v4<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>")])
+
+(define_expand "insn_v4<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v4op:V2SI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v2si3, V2SImode, operands[0],
+                                     V2SImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_v4shl
+;; insn_v4shrs
+;; insn_v4shru
+;; insn_v4shlsc
+(define_insn "<optab>v2si3"
+  [(set (match_operand:V2SI 0 "register_operand" "=r")
+       (v4shift:V2SI
+        (match_operand:V2SI 1 "reg_or_0_operand" "rO")
+        (match_operand:DI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v4<insn>\t%0, %r1, %r2"
+  [(set_attr "type" "<pipe>")])
+
+(define_expand "insn_v4<insn>"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (v4shift:V2SI
+        (match_operand:DI 1 "reg_or_0_operand" "")
+        (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_<optab>v2si3, V2SImode, operands[0],
+                                     V2SImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_v1int_h
+;;    {B7,B6,B5,B4,B3,B2,B1,B0} {A7,A6,A5,A4,A3,A2,A1,A0}
+;; => {A7,A6,A5,A4,A3,A2,A1,A0,B7,B6,B5,B4,B3,B2,B1,B0}
+;; => {A7,B7,A6,B6,A5,B5,A4,B4}
+(define_insn "vec_interleave_highv8qi"
+  [(set (match_operand:V8QI 0 "register_operand" "=r")
+       (vec_select:V8QI
+        (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
+                          (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 4) (const_int 12) 
+                   (const_int 5) (const_int 13) 
+                   (const_int 6) (const_int 14) 
+                   (const_int 7) (const_int 15)])))]
+  ""
+  "v1int_h\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v1int_h"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv8qi, V8QImode,
+                                     operands[0], V8QImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v1int_l
+;;    {B7,B6,B5,B4,B3,B2,B1,B0} {A7,A6,A5,A4,A3,A2,A1,A0}
+;; => {A7,A6,A5,A4,A3,A2,A1,A0,B7,B6,B5,B4,B3,B2,B1,B0}
+;; => {A3,B3,A2,B2,A1,B1,A0,B0}
+(define_insn "vec_interleave_lowv8qi"
+  [(set (match_operand:V8QI 0 "register_operand" "=r")
+       (vec_select:V8QI
+        (vec_concat:V16QI (match_operand:V8QI 1 "reg_or_0_operand" "rO")
+                          (match_operand:V8QI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 0) (const_int 8)
+                   (const_int 1) (const_int 9)
+                   (const_int 2) (const_int 10)
+                   (const_int 3) (const_int 11)])))]
+  ""
+  "v1int_l\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v1int_l"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv8qi, V8QImode,
+                                     operands[0], V8QImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v2int_h
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3,A2,A1,A0,B3,B2,B1,B0}
+;; => {A3,B3,A2,B2}
+(define_insn "vec_interleave_highv4hi"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+       (vec_select:V4HI
+        (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 2) (const_int 6)
+                   (const_int 3) (const_int 7)])))]
+  ""
+  "v2int_h\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v2int_h"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv4hi, V4HImode,
+                                      operands[0], V4HImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v2int_l
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3,A2,A1,A0,B3,B2,B1,B0}
+;; => {A1,B1,A0,B0}
+(define_insn "vec_interleave_lowv4hi"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+       (vec_select:V4HI
+        (vec_concat:V8HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V4HI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 0) (const_int 4)
+                   (const_int 1) (const_int 5)])))]
+  ""
+  "v2int_l\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v2int_l"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv4hi, V4HImode,
+                                      operands[0], V4HImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v4int_h
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+;; => {A1,B1}
+(define_insn "vec_interleave_highv2si"
+  [(set (match_operand:V2SI 0 "register_operand" "=r")
+       (vec_select:V2SI
+        (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 1) (const_int 3)])))]
+  ""
+  "v4int_h\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v4int_h"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_highv2si, V2SImode,
+                                      operands[0], V2SImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v4int_l
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+;; => {A0,B0}
+(define_insn "vec_interleave_lowv2si"
+  [(set (match_operand:V2SI 0 "register_operand" "=r")
+       (vec_select:V2SI
+        (vec_concat:V4SI (match_operand:V2SI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V2SI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 0) (const_int 2)])))]
+  ""
+  "v4int_l\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v4int_l"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_interleave_lowv2si, V2SImode,
+                                      operands[0], V2SImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; insn_v1mnz
+;; insn_v1mz
+;; insn_v2mnz
+;; insn_v2mz
+(define_insn "insn_mnz_<mode>"
+  [(set (match_operand:VEC48MODE 0 "register_operand" "=r")
+       (if_then_else:VEC48MODE
+         (ne:VEC48MODE
+         (match_operand:VEC48MODE 1 "reg_or_0_operand" "rO")
+         (const_int 0))
+         (match_operand:VEC48MODE 2 "reg_or_0_operand" "rO")
+         (const_int 0)))]
+  ""
+  "v<n>mnz\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v<n>mnz"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:VEC48MODE
+         (ne:VEC48MODE
+         (match_operand:DI 1 "reg_or_0_operand" "")
+         (const_int 0))
+         (match_operand:DI 2 "reg_or_0_operand" "")
+         (const_int 0)))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_insn_mnz_<mode>, <MODE>mode,
+                                      operands[0], <MODE>mode, operands[1],
+                                     operands[2], true);
+  DONE;
+})
+
+(define_insn "insn_mz_<mode>"
+  [(set (match_operand:VEC48MODE 0 "register_operand" "=r")
+       (if_then_else:VEC48MODE
+         (ne:VEC48MODE
+         (match_operand:VEC48MODE 1 "reg_or_0_operand" "rO")
+         (const_int 0))
+         (const_int 0)
+         (match_operand:VEC48MODE 2 "reg_or_0_operand" "rO")))]
+  ""
+  "v<n>mz\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+(define_expand "insn_v<n>mz"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (if_then_else:VEC48MODE
+         (ne:VEC48MODE
+         (match_operand:DI 1 "reg_or_0_operand" "")
+         (const_int 0))
+         (const_int 0)
+         (match_operand:DI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_insn_mz_<mode>, <MODE>mode,
+                                      operands[0], <MODE>mode, operands[1],
+                                     operands[2], true);
+  DONE;
+})
+
+;; insn_v1mulu
+(define_insn "vec_widen_umult_lo_v8qi"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+        (mult:V4HI
+        (zero_extend:V4HI
+         (vec_select:V4QI
+          (match_operand:V8QI 1 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)
+                     (const_int 2) (const_int 3)])))
+        (zero_extend:V4HI
+         (vec_select:V4QI
+          (match_operand:V8QI 2 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)
+                     (const_int 2) (const_int 3)])))))]
+  ""
+  "v1mulu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_expand "insn_v1mulu"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_vec_widen_umult_lo_v8qi, V4HImode,
+                                      operands[0], V8QImode, operands[1],
+                                     operands[2], true);
+  DONE;
+})
+
+;; insn_v1mulus
+(define_insn "vec_widen_usmult_lo_v8qi"
+  [(set (match_operand:V4HI 0 "register_operand" "=r")
+        (mult:V4HI
+        (zero_extend:V4HI
+         (vec_select:V4QI
+          (match_operand:V8QI 1 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)
+                     (const_int 2) (const_int 3)])))
+        (sign_extend:V4HI
+         (vec_select:V4QI
+          (match_operand:V8QI 2 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)
+                     (const_int 2) (const_int 3)])))))]
+  ""
+  "v1mulus\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_expand "insn_v1mulus"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_vec_widen_usmult_lo_v8qi, V4HImode,
+                                      operands[0], V8QImode, operands[1],
+                                     operands[2], true);
+  DONE;
+})
+
+;; insn_v2muls
+(define_insn "vec_widen_smult_lo_v4qi"
+  [(set (match_operand:V2SI 0 "register_operand" "=r")
+        (mult:V2SI
+        (sign_extend:V2SI
+         (vec_select:V2HI
+          (match_operand:V4HI 1 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)])))
+        (sign_extend:V2SI
+         (vec_select:V2HI
+          (match_operand:V4HI 2 "register_operand" "r")
+          (parallel [(const_int 0) (const_int 1)])))))]
+  ""
+  "v2muls\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_expand "insn_v2muls"
+  [(match_operand:DI 0 "register_operand" "")
+   (match_operand:DI 1 "reg_or_0_operand" "")
+   (match_operand:DI 2 "reg_or_0_operand" "")]
+  ""
+{
+  tilegx_expand_builtin_vector_binop (gen_vec_widen_smult_lo_v4qi, V2SImode,
+                                      operands[0], V4HImode, operands[1],
+                                     operands[2], true);
+  DONE;
+})
+
+;; v2packl
+;; v2packuc
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3,A2,A1,A0,B3,B2,B1,B0}
+(define_insn "vec_pack_<pack_optab>_v4hi"
+  [(set (match_operand:V8QI 0 "reg_or_0_operand" "=r")
+       (vec_concat:V8QI
+        (v2pack:V4QI (match_operand:V4HI 1 "reg_or_0_operand" "rO"))
+        (v2pack:V4QI (match_operand:V4HI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "v2<pack_insn>\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v2<pack_insn>"
+  [(set (match_operand:DI 0 "reg_or_0_operand" "")
+       (vec_concat:V8QI
+        (v2pack:V4QI (match_operand:DI 2 "reg_or_0_operand" ""))
+        (v2pack:V4QI (match_operand:DI 1 "reg_or_0_operand" ""))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_pack_<pack_optab>_v4hi,
+                                     V8QImode, operands[0], V4HImode,
+                                     operands[2], operands[1], true);
+  DONE;
+})
+
+;; v2packh
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3_hi,A2_hi,A1_hi,A0_hi,B3_hi,B2_hi,B1_hi,B0_hi}
+(define_insn "vec_pack_hipart_v4hi"
+  [(set (match_operand:V8QI 0 "reg_or_0_operand" "=r")
+       (vec_concat:V8QI
+        (truncate:V4QI
+         (ashiftrt:V4HI (match_operand:V4HI 1 "reg_or_0_operand" "rO")
+                        (const_int 8)))
+        (truncate:V4QI
+         (ashiftrt:V4HI (match_operand:V4HI 2 "reg_or_0_operand" "rO")
+                        (const_int 8)))))]
+  ""
+  "v2packh\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v2packh"
+  [(set (match_operand:DI 0 "reg_or_0_operand" "")
+       (vec_concat:V8QI
+        (truncate:V4QI
+         (ashiftrt:V4HI (match_operand:DI 2 "reg_or_0_operand" "")
+                        (const_int 8)))
+        (truncate:V4QI
+         (ashiftrt:V4HI (match_operand:DI 1 "reg_or_0_operand" "")
+                        (const_int 8)))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_pack_hipart_v4hi, V8QImode,
+                                      operands[0], V4HImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; v4packsc
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+(define_insn "vec_pack_ssat_v2si"
+  [(set (match_operand:V4HI 0 "reg_or_0_operand" "=r")
+       (vec_concat:V4HI
+        (us_truncate:V2HI (match_operand:V2SI 1 "reg_or_0_operand" "rO"))
+        (us_truncate:V2HI (match_operand:V2SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "v4packsc\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_v4packsc"
+  [(set (match_operand:DI 0 "reg_or_0_operand" "")
+       (vec_concat:V4HI
+        (us_truncate:V2HI (match_operand:DI 2 "reg_or_0_operand" ""))
+        (us_truncate:V2HI (match_operand:DI 1 "reg_or_0_operand" ""))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilegx_expand_builtin_vector_binop (gen_vec_pack_ssat_v2si, V4HImode,
+                                      operands[0], V2SImode, operands[2],
+                                     operands[1], true);
+  DONE;
+})
+
+;; Rest of the vector intrinsics
+(define_insn "insn_v1adiffu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1ADIFFU))]
+  ""
+  "v1adiffu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1avgu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1AVGU))]
+  ""
+  "v1avgu\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_v1ddotpu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DDOTPU))]
+  ""
+  "v1ddotpu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1ddotpua"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DDOTPUA))]
+  ""
+  "v1ddotpua\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1ddotpus"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DDOTPUS))]
+  ""
+  "v1ddotpus\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1ddotpusa"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DDOTPUSA))]
+  ""
+  "v1ddotpusa\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotp"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTP))]
+  ""
+  "v1dotp\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotpa"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTPA))]
+  ""
+  "v1dotpa\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotpu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTPU))]
+  ""
+  "v1dotpu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotpua"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTPUA))]
+  ""
+  "v1dotpua\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotpus"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTPUS))]
+  ""
+  "v1dotpus\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1dotpusa"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1DOTPUSA))]
+  ""
+  "v1dotpusa\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1sadau"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1SADAU))]
+  ""
+  "v1sadau\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v1sadu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1SADU))]
+  ""
+  "v1sadu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*insn_v1sadu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (truncate:SI
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V1SADU)))]
+   ""
+  "v1sadu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2adiffs"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2ADIFFS))]
+  ""
+  "v2adiffs\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2avgs"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2AVGS))]
+  ""
+  "v2avgs\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_v2dotp"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2DOTP))]
+  ""
+  "v2dotp\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2dotpa"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2DOTPA))]
+  ""
+  "v2dotpa\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2mulfsc"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2MULFSC))]
+  ""
+  "v2mulfsc\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2sadas"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADAS))]
+  ""
+  "v2sadas\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2sadau"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "0")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")
+                    (match_operand:DI 3 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADAU))]
+  ""
+  "v2sadau\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2sads"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADS))]
+  ""
+  "v2sads\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*insn_v2sads"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (truncate:SI
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADS)))]
+  ""
+  "v2sads\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_v2sadu"
+  [(set (match_operand:DI 0 "register_operand" "=r")
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADU))]
+  ""
+  "v2sadu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*insn_v2sadu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (truncate:SI
+        (unspec:DI [(match_operand:DI 1 "reg_or_0_operand" "rO")
+                    (match_operand:DI 2 "reg_or_0_operand" "rO")]
+                   UNSPEC_INSN_V2SADU)))]
+  ""
+  "v2sadu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_wh64"
+  [(unspec_volatile:VOID [(match_operand 0 "pointer_operand" "rO")]
+                         UNSPEC_INSN_WH64)
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "wh64\t%r0"
+  [(set_attr "type" "X1")])
+
+\f
+;; Network intrinsics
+
+;; Note the "pseudo" text is handled specially by the
+;; asm_output_opcode routine.  If the output is an empty string, the
+;; instruction would bypass the asm_output_opcode routine, bypassing
+;; the bundle handling code.
+(define_insn "tilegx_network_barrier"
+  [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
+  ""
+  "pseudo"
+  [(set_attr "type" "nothing")
+   (set_attr "length" "0")])
+
+(define_insn "*netreg_receive"
+  [(set (match_operand:DI 0 "nonimmediate_operand" "=r,U,m")
+        (unspec_volatile:DI [(match_operand:DI 1 "netreg_operand" "i,i,i")
+                            (reg:DI TILEGX_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE))
+   (clobber (reg:DI TILEGX_NETORDER_REG))]
+
+  ""
+  "@
+   move\t%0, %N1
+   st\t%0, %N1
+   st_add\t%I0, %N1, %i0"
+  [(set_attr "type" "*,Y2,X1")])
+
+(define_insn "*netreg_send"
+  [(unspec_volatile:DI
+    [(match_operand:DI 0 "netreg_operand"  "i,i,i,i,i,i")
+     (match_operand:DI 1 "reg_or_cint_operand" "r,I,J,K,N,P")
+     (reg:DI TILEGX_NETORDER_REG)]
+     UNSPEC_NETWORK_SEND)
+   (clobber (reg:DI TILEGX_NETORDER_REG))]
+  ""
+  "@
+   move\t%N0, %r1
+   movei\t%N0, %1
+   moveli\t%N0, %1
+   shl16insli\t%N0, zero, %h1
+   v1addi\t%N0, zero, %j1
+   v2addi\t%N0, zero, %h1"
+  [(set_attr "type" "*,*,X01,X01,X01,X01")])
+
+(define_expand "tilegx_idn0_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_IDN0)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_idn1_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_IDN1)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_idn_send"
+  [(parallel
+    [(unspec_volatile:DI [(const_int TILEGX_NETREG_IDN0)
+                         (match_operand:DI 0 "reg_or_cint_operand" "")
+                         (reg:DI TILEGX_NETORDER_REG)]
+                        UNSPEC_NETWORK_SEND)
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_udn0_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN0)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_udn1_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN1)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_udn2_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN2)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_udn3_receive"
+  [(parallel
+    [(set (match_operand:DI 0 "register_operand" "")
+         (unspec_volatile:DI [(const_int TILEGX_NETREG_UDN3)
+                              (reg:DI TILEGX_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_expand "tilegx_udn_send"
+  [(parallel
+    [(unspec_volatile:DI [(const_int TILEGX_NETREG_UDN0)
+                         (match_operand:DI 0 "reg_or_cint_operand" "")
+                         (reg:DI TILEGX_NETORDER_REG)]
+                        UNSPEC_NETWORK_SEND)
+    (clobber (reg:DI TILEGX_NETORDER_REG))])]
+  "")
+
+(define_insn "*netreg_adddi_to_network"
+  [(unspec_volatile:DI
+    [(match_operand:DI 0 "netreg_operand" "i,i,i")
+     (plus:DI (match_operand:DI 1 "reg_or_0_operand" "%rO,rO,rO")
+              (match_operand:DI 2 "add_operand" "r,I,JT"))
+     (reg:DI TILEGX_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:DI TILEGX_NETORDER_REG))]
+  ""
+  "@
+   add\t%N0, %r1, %2
+   addi\t%N0, %r1, %2
+   addli\t%N0, %r1, %H2"
+  [(set_attr "type" "*,*,X01")])
+
+(define_insn "*netreg_adddi_from_network"
+  [(set (match_operand:DI 0 "register_operand" "=r,r,r")
+       (plus:DI (unspec_volatile:DI
+                  [(match_operand:DI 1 "netreg_operand" "%i,i,i")
+                  (reg:DI TILEGX_NETORDER_REG)]
+                  UNSPEC_NETWORK_RECEIVE)
+                (match_operand:DI 2 "add_operand" "rO,I,JT")))
+   (clobber (reg:DI TILEGX_NETORDER_REG))]
+  ""
+  "@
+   add\t%0, %N1, %r2
+   addi\t%0, %N1, %2
+   addli\t%0, %N1, %H2"
+  [(set_attr "type" "*,*,X01")])
+
+\f
+;;
+;; Stack protector instructions.
+;;
+
+(define_expand "stack_protect_set"
+  [(set (match_operand 0 "nonautoincmem_operand" "")
+       (match_operand 1 "nonautoincmem_operand" ""))]
+  ""
+{
+#ifdef TARGET_THREAD_SSP_OFFSET
+  rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
+  rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
+  rtx ssp = gen_reg_rtx (Pmode);
+  
+  emit_insn (gen_rtx_SET (VOIDmode, ssp, ssp_addr));
+
+  operands[1] = gen_rtx_MEM (Pmode, ssp);
+#endif
+
+  if (TARGET_32BIT)
+    emit_insn (gen_stack_protect_setsi (operands[0], operands[1]));
+  else
+    emit_insn (gen_stack_protect_setdi (operands[0], operands[1]));
+
+  DONE;
+})
+
+(define_insn "stack_protect_setsi"
+  [(set (match_operand:SI 0 "nonautoincmem_operand" "=U")
+        (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")]
+                  UNSPEC_SP_SET))
+   (set (match_scratch:SI 2 "=&r") (const_int 0))]
+  ""
+  "ld4s\t%2, %1; { st4\t%0, %2; move\t%2, zero }"
+  [(set_attr "length" "16")
+   (set_attr "type" "cannot_bundle_3cycle")])
+
+(define_insn "stack_protect_setdi"
+  [(set (match_operand:DI 0 "nonautoincmem_operand" "=U")
+        (unspec:DI [(match_operand:DI 1 "nonautoincmem_operand" "U")]
+                  UNSPEC_SP_SET))
+   (set (match_scratch:DI 2 "=&r") (const_int 0))]
+  ""
+  "ld\t%2, %1; { st\t%0, %2; move\t%2, zero }"
+  [(set_attr "length" "16")
+   (set_attr "type" "cannot_bundle_3cycle")])
+
+(define_expand "stack_protect_test"
+  [(match_operand 0 "nonautoincmem_operand" "")
+   (match_operand 1 "nonautoincmem_operand" "")
+   (match_operand 2 "" "")]
+  ""
+{
+  rtx compare_result;
+  rtx bcomp, loc_ref;
+
+#ifdef TARGET_THREAD_SSP_OFFSET
+  rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
+  rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
+  rtx ssp = gen_reg_rtx (Pmode);
+  
+  emit_insn (gen_rtx_SET (VOIDmode, ssp, ssp_addr));
+
+  operands[1] = gen_rtx_MEM (Pmode, ssp);
+#endif
+
+  compare_result = gen_reg_rtx (Pmode);
+
+  if (TARGET_32BIT)
+    emit_insn (gen_stack_protect_testsi (compare_result, operands[0],
+                                        operands[1]));
+  else
+    emit_insn (gen_stack_protect_testdi (compare_result, operands[0],
+                                        operands[1]));
+
+  bcomp = gen_rtx_NE (SImode, compare_result, const0_rtx);
+
+  loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[2]);
+
+  emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
+                              gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
+                                                    loc_ref, pc_rtx)));
+
+  DONE;
+})
+
+(define_insn "stack_protect_testsi"
+  [(set (match_operand:SI 0 "register_operand" "=&r")
+        (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")
+                    (match_operand:SI 2 "nonautoincmem_operand" "U")]
+                   UNSPEC_SP_TEST))
+   (set (match_scratch:SI 3 "=&r") (const_int 0))]
+  ""
+  "ld4s\t%0, %1; ld4s\t%3, %2; { cmpeq\t%0, %0, %3; move\t%3, zero }"
+  [(set_attr "length" "24")
+   (set_attr "type" "cannot_bundle_4cycle")])
+
+(define_insn "stack_protect_testdi"
+  [(set (match_operand:DI 0 "register_operand" "=&r")
+        (unspec:DI [(match_operand:DI 1 "nonautoincmem_operand" "U")
+                    (match_operand:DI 2 "nonautoincmem_operand" "U")]
+                   UNSPEC_SP_TEST))
+   (set (match_scratch:DI 3 "=&r") (const_int 0))]
+  ""
+  "ld\t%0, %1; ld\t%3, %2; { cmpeq\t%0, %0, %3; move\t%3, zero }"
+  [(set_attr "length" "24")
+   (set_attr "type" "cannot_bundle_4cycle")])
+
+(include "sync.md")
diff --git a/gcc/config/tilegx/tilegx.opt b/gcc/config/tilegx/tilegx.opt
new file mode 100644 (file)
index 0000000..5a65eae
--- /dev/null
@@ -0,0 +1,40 @@
+; Options for the TILE-Gx port of the compiler.
+; Copyright (C) 2011, 2012
+; Free Software Foundation, Inc.
+; Contributed by Walter Lee (walt@tilera.com)
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3.  If not see
+; <http://www.gnu.org/licenses/>.
+
+mcpu=
+Target RejectNegative Joined Enum(tilegx_cpu) Var(tilegx_cpu) Init(0)
+-mcpu=CPU      Use features of and schedule code for given CPU
+
+Enum
+Name(tilegx_cpu) Type(int)
+Known TILE-Gx CPUs (for use with the -mcpu= option):
+
+EnumValue
+Enum(tilegx_cpu) String(tilegx) Value(0)
+
+m32
+Target Report RejectNegative Negative(m64) Mask(32BIT)
+Compile with 32 bit longs and pointers.
+
+m64
+Target Report RejectNegative Negative(m32) InverseMask(32BIT, 64BIT)
+Compile with 64 bit longs and pointers.
+
diff --git a/gcc/config/tilepro/constraints.md b/gcc/config/tilepro/constraints.md
new file mode 100644 (file)
index 0000000..868c9ca
--- /dev/null
@@ -0,0 +1,102 @@
+;; Constraint definitions for Tilera TILEPro chip.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_register_constraint "R00" "R0_REGS"  "r0")
+(define_register_constraint "R01" "R1_REGS"  "r1")
+(define_register_constraint "R02" "R2_REGS"  "r2")
+(define_register_constraint "R03" "R3_REGS"  "r3")
+(define_register_constraint "R04" "R4_REGS"  "r4")
+(define_register_constraint "R05" "R5_REGS"  "r5")
+(define_register_constraint "R06" "R6_REGS"  "r6")
+(define_register_constraint "R07" "R7_REGS"  "r7")
+(define_register_constraint "R08" "R8_REGS"  "r8")
+(define_register_constraint "R09" "R9_REGS"  "r9")
+(define_register_constraint "R10" "R10_REGS" "r10")
+
+(define_constraint "I"
+  "A signed 8 bit constant"
+  (and (match_code "const_int")
+       (match_test "ival >= -128 && ival <= 127")))
+
+(define_constraint "J"
+  "Signed 16-bit integer constant"
+  (and (match_code "const_int")
+       (match_test "ival >= -32768 && ival <= 32767")))
+
+(define_constraint "K"
+  "Nonzero integer constant with low 16 bits zero"
+  (and (match_code "const_int")
+       (match_test "ival && (ival & 0xFFFF) == 0")))
+
+(define_constraint "L"
+  "Integer constant that fits in one signed byte when incremented"
+  (and (match_code "const_int")
+       (match_test "ival >= -129 && ival <= 126")))
+
+(define_constraint "M"
+  "A bit mask suitable for 'mm'"
+  (and (match_code "const_int")
+       (match_test "tilepro_bitfield_operand_p (ival, NULL, NULL)")))
+
+(define_constraint "N"
+  "Integer constant that is a byte tiled out four times"
+  (and (match_code "const_int")
+       (match_test "(ival & 0xFFFFFFFF) == (ival & 0xFF) * 0x01010101")))
+
+(define_constraint "O"
+ "The integer zero constant"
+ (and (match_code "const_int")
+      (match_test "ival == 0")))
+
+(define_constraint "P"
+  "Integer constant that is a sign-extended byte tiled out as two shorts"
+  (and (match_code "const_int")
+       (match_test "((ival & 0xFFFFFFFF)
+                     == ((trunc_int_for_mode (ival, QImode) & 0xFFFF)
+                         * 0x00010001))")))
+
+(define_constraint "Q"
+  "Integer constant that fits in one signed byte when incremented, but not -1"
+  (and (match_code "const_int")
+       (match_test "ival >= -129 && ival <= 126 && ival != -1")))
+
+(define_constraint "T"
+  "A const symbolc operand"
+  (match_operand 0 "const_symbolic_operand"))
+
+(define_memory_constraint "U"
+  "Non-auto-incrementing memory"
+  (and (match_code "mem")
+       (match_test "GET_RTX_CLASS (GET_CODE (XEXP (op, 0))) != RTX_AUTOINC")))
+
+(define_constraint "W"
+  "A 4-element vector constant with identical elements"
+  (and (match_code "const_vector")
+       (match_test "CONST_VECTOR_NUNITS (op) == 4")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)")))
+
+(define_constraint "Y"
+  "A 2-element vector constant with identical elements"
+  (and (match_code "const_vector")
+       (match_test "CONST_VECTOR_NUNITS (op) == 2")
+       (match_test "CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)")))
diff --git a/gcc/config/tilepro/gen-mul-tables.cc b/gcc/config/tilepro/gen-mul-tables.cc
new file mode 100644 (file)
index 0000000..5f4551b
--- /dev/null
@@ -0,0 +1,1363 @@
+/* Multiply table generator for tile.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This program creates a table used to compile multiply by constant
+   efficiently.
+
+   This program should be compiled by a c++ compiler.  If it's
+   compiled with with -DTILEPRO, it generates the multiply table for
+   TILEPro; otherwise it generates the multiply table for TILE-Gx.
+   Running the program produces the table in stdout.
+
+   The program works by generating every possible combination of up to
+   MAX_INSTRUCTIONS linear operators (such as add, sub, s2a, left
+   shift) and computing the multiplier computed by those instructions.
+   For example,
+
+   s2a r2,r1,r1
+   s2a r3,r2,r2
+
+   multiplies r1 by 25.
+
+   There are usually multiple instruction sequences to multiply by a
+   given constant. This program keeps only the cheapest one.
+   "Cheapest" is defined first by the minimum theoretical schedule
+   length, and if those are equal then by the number of instructions,
+   and if those are equal then by which instructions we "prefer"
+   (e.g. because we think one might take infinitesimally less power
+   than another, or simply because we arbitrarily pick one to be more
+   canonical).
+
+   Once this program has determined the best instruction sequence for
+   each multiplier, it emits them in a table sorted by the multiplier
+   so the user can binary-search it to look for a match.  The table is
+   pruned based on various criteria to keep its sizes reasonable.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#define __STDC_LIMIT_MACROS
+#include <stdint.h>
+
+#include <map>
+
+#ifdef TILEPRO
+
+/* The string representing the architecture.  */
+#define ARCH "tilepro"
+
+/* The type for the multiplication.  */
+typedef int MUL_TYPE;
+
+#else
+
+/* The string representing the architecture.  */
+#define ARCH "tilegx"
+
+/* The type for the multiplication.  */
+typedef long long MUL_TYPE;
+
+#endif
+
+/* Longest instruction sequence this will produce. With the current
+   stupid algorithm runtime grows very quickly with this number.  */
+#define MAX_INSTRUCTIONS 4
+
+/* Maximum number of subexpressions in the expression DAG being
+   generated.  This is the same as the number of instructions, except
+   that zero and the original register we'd like to multiply by a
+   constant are also thrown into the mix.  */
+#define MAX_SUBEXPRS (2 + MAX_INSTRUCTIONS)
+
+#define MIN(x, y)  ((x) <= (y) ? (x) : (y))
+#define MAX(x, y)  ((x) >= (y) ? (x) : (y))
+
+/* For this program a unary op is one which has only one nonconstant
+   operand.  So shift left by 5 is considered unary.  */
+typedef MUL_TYPE (*unary_op_func) (MUL_TYPE);
+typedef MUL_TYPE (*binary_op_func) (MUL_TYPE, MUL_TYPE);
+
+/* This describes an operation like 'add two registers' or 'left-shift
+   by 7'.
+
+   We call something a 'unary' operator if it only takes in one
+   register as input, even though it might have an implicit second
+   constant operand.  Currently this is used for left-shift by
+   constant.  */
+class Operator
+{
+public:
+  /* Construct for a binary operator.  */
+  Operator (const char *pattern, const char *name, binary_op_func func,
+           int cost)
+    : m_pattern (pattern), m_name (name), m_top_index (-1),
+      m_unary_func (0), m_binary_func (func), m_cost (cost),
+      m_rhs_if_unary (0)
+  {
+  }
+
+  /* Construct for a unary operator.  */
+  Operator (const char *pattern, const char *name, unary_op_func func,
+           int rhs_if_unary, int cost)
+    : m_pattern (pattern), m_name (name), m_top_index (-1),
+      m_unary_func (func), m_binary_func (0), m_cost (cost),
+      m_rhs_if_unary (rhs_if_unary)
+  {
+  }
+
+  bool is_unary () const
+  {
+    return m_binary_func == NULL;
+  }
+
+  /* Name of the pattern for this operation, e.g. CODE_FOR_addsi3.  */
+  const char *m_pattern;
+
+  /* Name of the opcode for this operation, e.g. add.  */
+  const char *m_name;
+
+  /* We don't have enough bits in our output representation to store
+     the original insn_code value, so we store a compressed form
+     instead.  These values are decoded back into insn_code via the
+     machine-generated multiply_insn_seq_decode_opcode lookup
+     table.  */
+  int m_top_index;
+
+  /* Unary operator to apply, or NULL if this is a binary operator.  */
+  unary_op_func m_unary_func;
+
+  /* Binary operator to apply, or NULL if this is a unary operator.  */
+  binary_op_func m_binary_func;
+
+  /* Function of how expensive we consider this operator. Higher is
+     worse.  */
+  int m_cost;
+
+  /* the RHS value to write into the C file if unary; used for shift
+     count.  */
+  int m_rhs_if_unary;
+};
+
+
+/* An entry in an expression DAG.  */
+class Expr
+{
+public:
+  Expr () : m_op (NULL), m_lhs (0), m_rhs (0), m_produced_val (0),
+    m_critical_path_length (0)
+  {
+  }
+
+  /* The operator being applied to the operands.  */
+  const Operator *m_op;
+
+  /* The index of the left-hand operand in the array of subexpressions
+     already computed.  */
+  int m_lhs;
+
+  /* For binary ops ,this is the index of the left-hand operand in the
+     array of subexpressions already computed. For unary ops, it is
+     specific to the op (e.g. it might hold a constant shift
+     count).  */
+  int m_rhs;
+
+  /* The multiplier produced by this expression tree. For example, for
+     the tree ((x << 5) + x), the value would be 33.  */
+  MUL_TYPE m_produced_val;
+
+  /* How far is this expression from the root, i.e. how many cycles
+     minimum will it take to compute this?  */
+  int m_critical_path_length;
+};
+
+
+/* Make function pointers for the various linear operators we can
+   apply to compute a multiplicative value.  */
+
+static MUL_TYPE
+add (MUL_TYPE n1, MUL_TYPE n2)
+{
+  return n1 + n2;
+}
+
+static MUL_TYPE
+sub (MUL_TYPE n1, MUL_TYPE n2)
+{
+  return n1 - n2;
+}
+
+static MUL_TYPE
+s1a (MUL_TYPE n1, MUL_TYPE n2)
+{
+  return n1 * 2 + n2;
+}
+
+static MUL_TYPE
+s2a (MUL_TYPE n1, MUL_TYPE n2)
+{
+  return n1 * 4 + n2;
+}
+
+static MUL_TYPE
+s3a (MUL_TYPE n1, MUL_TYPE n2)
+{
+  return n1 * 8 + n2;
+}
+
+#define SHIFT(count)                            \
+static MUL_TYPE                                 \
+shift##count(MUL_TYPE n)                        \
+{                                               \
+  return n << (count);                          \
+}
+
+SHIFT (1);
+SHIFT (2);
+SHIFT (3);
+SHIFT (4);
+SHIFT (5);
+SHIFT (6);
+SHIFT (7);
+SHIFT (8);
+SHIFT (9);
+SHIFT (10);
+SHIFT (11);
+SHIFT (12);
+SHIFT (13);
+SHIFT (14);
+SHIFT (15);
+SHIFT (16);
+SHIFT (17);
+SHIFT (18);
+SHIFT (19);
+SHIFT (20);
+SHIFT (21);
+SHIFT (22);
+SHIFT (23);
+SHIFT (24);
+SHIFT (25);
+SHIFT (26);
+SHIFT (27);
+SHIFT (28);
+SHIFT (29);
+SHIFT (30);
+SHIFT (31);
+#ifndef TILEPRO
+SHIFT (32);
+SHIFT (33);
+SHIFT (34);
+SHIFT (35);
+SHIFT (36);
+SHIFT (37);
+SHIFT (38);
+SHIFT (39);
+SHIFT (40);
+SHIFT (41);
+SHIFT (42);
+SHIFT (43);
+SHIFT (44);
+SHIFT (45);
+SHIFT (46);
+SHIFT (47);
+SHIFT (48);
+SHIFT (49);
+SHIFT (50);
+SHIFT (51);
+SHIFT (52);
+SHIFT (53);
+SHIFT (54);
+SHIFT (55);
+SHIFT (56);
+SHIFT (57);
+SHIFT (58);
+SHIFT (59);
+SHIFT (60);
+SHIFT (61);
+SHIFT (62);
+SHIFT (63);
+#endif
+
+#ifdef TILEPRO
+static Operator ops[] = {
+  Operator ("CODE_FOR_addsi3", "add", add, 1040),
+  Operator ("CODE_FOR_subsi3", "sub", sub, 1041),
+  Operator ("CODE_FOR_insn_s1a", "s1a", s1a, 1042),
+  Operator ("CODE_FOR_insn_s2a", "s2a", s2a, 1043),
+  Operator ("CODE_FOR_insn_s3a", "s3a", s3a, 1044),
+  /* Note: shl by 1 is not necessary, since adding a value to itself
+     produces the same result. But the architecture team thinks
+     left-shift may use slightly less power, so we might as well
+     prefer it.  */
+  Operator ("CODE_FOR_ashlsi3", "shli", shift1, 1, 1001),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift2, 2, 1002),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift3, 3, 1003),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift4, 4, 1004),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift5, 5, 1005),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift6, 6, 1006),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift7, 7, 1007),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift8, 8, 1008),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift9, 9, 1009),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift10, 10, 1010),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift11, 11, 1011),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift12, 12, 1012),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift13, 13, 1013),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift14, 14, 1014),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift15, 15, 1015),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift16, 16, 1016),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift17, 17, 1017),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift18, 18, 1018),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift19, 19, 1019),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift20, 20, 1020),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift21, 21, 1021),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift22, 22, 1022),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift23, 23, 1023),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift24, 24, 1024),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift25, 25, 1025),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift26, 26, 1026),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift27, 27, 1027),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift28, 28, 1028),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift29, 29, 1029),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift30, 30, 1030),
+  Operator ("CODE_FOR_ashlsi3", "shli", shift31, 31, 1031)
+};
+#else
+static Operator ops[] = {
+  Operator ("CODE_FOR_adddi3", "add", add, 1070),
+  Operator ("CODE_FOR_subdi3", "sub", sub, 1071),
+  Operator ("CODE_FOR_insn_shl1add", "shl1add", s1a, 1072),
+  Operator ("CODE_FOR_insn_shl2add", "shl2add", s2a, 1073),
+  Operator ("CODE_FOR_insn_shl3add", "shl3add", s3a, 1074),
+  // Note: shl by 1 is not necessary, since adding a value to itself
+  // produces the same result. But the architecture team thinks left-shift
+  // may use slightly less power, so we might as well prefer it.
+  Operator ("CODE_FOR_ashldi3", "shli", shift1, 1, 1001),
+  Operator ("CODE_FOR_ashldi3", "shli", shift2, 2, 1002),
+  Operator ("CODE_FOR_ashldi3", "shli", shift3, 3, 1003),
+  Operator ("CODE_FOR_ashldi3", "shli", shift4, 4, 1004),
+  Operator ("CODE_FOR_ashldi3", "shli", shift5, 5, 1005),
+  Operator ("CODE_FOR_ashldi3", "shli", shift6, 6, 1006),
+  Operator ("CODE_FOR_ashldi3", "shli", shift7, 7, 1007),
+  Operator ("CODE_FOR_ashldi3", "shli", shift8, 8, 1008),
+  Operator ("CODE_FOR_ashldi3", "shli", shift9, 9, 1009),
+  Operator ("CODE_FOR_ashldi3", "shli", shift10, 10, 1010),
+  Operator ("CODE_FOR_ashldi3", "shli", shift11, 11, 1011),
+  Operator ("CODE_FOR_ashldi3", "shli", shift12, 12, 1012),
+  Operator ("CODE_FOR_ashldi3", "shli", shift13, 13, 1013),
+  Operator ("CODE_FOR_ashldi3", "shli", shift14, 14, 1014),
+  Operator ("CODE_FOR_ashldi3", "shli", shift15, 15, 1015),
+  Operator ("CODE_FOR_ashldi3", "shli", shift16, 16, 1016),
+  Operator ("CODE_FOR_ashldi3", "shli", shift17, 17, 1017),
+  Operator ("CODE_FOR_ashldi3", "shli", shift18, 18, 1018),
+  Operator ("CODE_FOR_ashldi3", "shli", shift19, 19, 1019),
+  Operator ("CODE_FOR_ashldi3", "shli", shift20, 20, 1020),
+  Operator ("CODE_FOR_ashldi3", "shli", shift21, 21, 1021),
+  Operator ("CODE_FOR_ashldi3", "shli", shift22, 22, 1022),
+  Operator ("CODE_FOR_ashldi3", "shli", shift23, 23, 1023),
+  Operator ("CODE_FOR_ashldi3", "shli", shift24, 24, 1024),
+  Operator ("CODE_FOR_ashldi3", "shli", shift25, 25, 1025),
+  Operator ("CODE_FOR_ashldi3", "shli", shift26, 26, 1026),
+  Operator ("CODE_FOR_ashldi3", "shli", shift27, 27, 1027),
+  Operator ("CODE_FOR_ashldi3", "shli", shift28, 28, 1028),
+  Operator ("CODE_FOR_ashldi3", "shli", shift29, 29, 1029),
+  Operator ("CODE_FOR_ashldi3", "shli", shift30, 30, 1030),
+  Operator ("CODE_FOR_ashldi3", "shli", shift31, 31, 1031),
+  Operator ("CODE_FOR_ashldi3", "shli", shift32, 32, 1032),
+  Operator ("CODE_FOR_ashldi3", "shli", shift33, 33, 1033),
+  Operator ("CODE_FOR_ashldi3", "shli", shift34, 34, 1034),
+  Operator ("CODE_FOR_ashldi3", "shli", shift35, 35, 1035),
+  Operator ("CODE_FOR_ashldi3", "shli", shift36, 36, 1036),
+  Operator ("CODE_FOR_ashldi3", "shli", shift37, 37, 1037),
+  Operator ("CODE_FOR_ashldi3", "shli", shift38, 38, 1038),
+  Operator ("CODE_FOR_ashldi3", "shli", shift39, 39, 1039),
+  Operator ("CODE_FOR_ashldi3", "shli", shift40, 40, 1040),
+  Operator ("CODE_FOR_ashldi3", "shli", shift41, 41, 1041),
+  Operator ("CODE_FOR_ashldi3", "shli", shift42, 42, 1042),
+  Operator ("CODE_FOR_ashldi3", "shli", shift43, 43, 1043),
+  Operator ("CODE_FOR_ashldi3", "shli", shift44, 44, 1044),
+  Operator ("CODE_FOR_ashldi3", "shli", shift45, 45, 1045),
+  Operator ("CODE_FOR_ashldi3", "shli", shift46, 46, 1046),
+  Operator ("CODE_FOR_ashldi3", "shli", shift47, 47, 1047),
+  Operator ("CODE_FOR_ashldi3", "shli", shift48, 48, 1048),
+  Operator ("CODE_FOR_ashldi3", "shli", shift49, 49, 1049),
+  Operator ("CODE_FOR_ashldi3", "shli", shift50, 50, 1050),
+  Operator ("CODE_FOR_ashldi3", "shli", shift51, 51, 1051),
+  Operator ("CODE_FOR_ashldi3", "shli", shift52, 52, 1052),
+  Operator ("CODE_FOR_ashldi3", "shli", shift53, 53, 1053),
+  Operator ("CODE_FOR_ashldi3", "shli", shift54, 54, 1054),
+  Operator ("CODE_FOR_ashldi3", "shli", shift55, 55, 1055),
+  Operator ("CODE_FOR_ashldi3", "shli", shift56, 56, 1056),
+  Operator ("CODE_FOR_ashldi3", "shli", shift57, 57, 1057),
+  Operator ("CODE_FOR_ashldi3", "shli", shift58, 58, 1058),
+  Operator ("CODE_FOR_ashldi3", "shli", shift59, 59, 1059),
+  Operator ("CODE_FOR_ashldi3", "shli", shift60, 60, 1060),
+  Operator ("CODE_FOR_ashldi3", "shli", shift61, 61, 1061),
+  Operator ("CODE_FOR_ashldi3", "shli", shift62, 62, 1062),
+  Operator ("CODE_FOR_ashldi3", "shli", shift63, 63, 1063)
+};
+#endif
+
+/* An ExpressionTree is an expression DAG.  */
+class ExpressionTree
+{
+public:
+  ExpressionTree () : m_num_vals (2)
+  {
+    m_exprs[0].m_produced_val = 0;
+    m_exprs[1].m_produced_val = 1;
+  }
+
+  void copy_technique_from (ExpressionTree * other)
+  {
+    /* TODO: write this; other can compute the same products with less
+       cost.  We update this ExpressionTree object because some int is
+       already mapped to it.  */
+  }
+
+  int m_num_vals;
+  Expr m_exprs[MAX_SUBEXPRS];
+
+  int cost () const
+  {
+    int cost = 0;
+    for (int j = 2; j < m_num_vals; j++)
+        cost += m_exprs[j].m_op->m_cost;
+      return cost + m_exprs[m_num_vals - 1].m_critical_path_length * 1000000;
+  }
+};
+
+
+typedef std::map<MUL_TYPE, ExpressionTree *> ExpressionTreeMap;
+
+
+static void
+find_sequences (ExpressionTree &s, ExpressionTreeMap &best_solution)
+{
+  /* Don't look more if we can't add any new values to the expression
+     tree.  */
+  const int num_vals = s.m_num_vals;
+  if (num_vals == MAX_SUBEXPRS)
+    return;
+
+  /* Grow array to make room for new values added as we loop.  */
+  s.m_num_vals = num_vals + 1;
+
+  const Operator *const prev_op = s.m_exprs[num_vals - 1].m_op;
+  const int prev_top_index = (prev_op != NULL) ? prev_op->m_top_index : -1;
+
+  for (size_t f = 0; f < sizeof ops / sizeof ops[0]; f++)
+    {
+      const Operator *const op = &ops[f];
+
+      for (int i = 0; i < num_vals; i++)
+       {
+         /* Only allow zero as the first operand to sub, otherwise
+            it is useless.  */
+         if (i == 0 && op->m_binary_func != sub)
+           continue;
+
+         /* Unary ops don't actually use the second operand, so as a
+            big hack we trick it into only looping once in the inner
+            loop.  */
+         const int j_end = op->is_unary () ? 2 : num_vals;
+
+         /* We never allow zero as the second operand, as it is
+            always useless.  */
+         for (int j = 1; j < j_end; j++)
+           {
+             /* Does this expression use the immediately previous
+                expression?  */
+             const bool uses_prev_value =
+               (i == num_vals - 1
+                || (!op->is_unary () && j == num_vals - 1));
+
+             if (!uses_prev_value)
+               {
+                 /* For search efficiency, prune redundant
+                    instruction orderings.
+
+                    This op does not take the immediately preceding
+                    value as input, which means we could have done it
+                    in the previous slot. If its opcode is less than
+                    the previous instruction's, we'll declare this
+                    instruction order non-canonical and not pursue
+                    this branch of the search.  */
+                 if (op->m_top_index < prev_top_index)
+                   continue;
+               }
+
+             MUL_TYPE n;
+             if (op->is_unary ())
+               {
+                 n = op->m_unary_func (s.m_exprs[i].m_produced_val);
+               }
+             else
+               {
+                 n = op->m_binary_func (s.m_exprs[i].m_produced_val,
+                                        s.m_exprs[j].m_produced_val);
+               }
+
+             bool duplicate = false;
+             for (int k = 0; k < num_vals; k++)
+               if (n == s.m_exprs[j].m_produced_val)
+                 {
+                   duplicate = true;
+                   break;
+                 }
+
+             if (duplicate)
+               continue;
+
+             /* See if we found the best solution for n.  */
+             Expr *e = &s.m_exprs[num_vals];
+             e->m_op = op;
+             e->m_lhs = i;
+             e->m_rhs = op->is_unary () ? op->m_rhs_if_unary : j;
+             e->m_produced_val = n;
+             e->m_critical_path_length =
+               1 + MAX (s.m_exprs[i].m_critical_path_length,
+                        s.m_exprs[j].m_critical_path_length);
+
+             ExpressionTreeMap::iterator best (best_solution.find (n));
+             if (best == best_solution.end ()
+                 || (*best).second->cost () > s.cost ())
+               best_solution[n] = new ExpressionTree (s);
+
+             /* Recurse and find more.  */
+             find_sequences (s, best_solution);
+           }
+       }
+    }
+
+  /* Restore old size.  */
+  s.m_num_vals = num_vals;
+}
+
+
+/* For each insn_code used by an operator, choose a compact number so
+   it takes less space in the output data structure. This prints out a
+   lookup table used to map the compactified number back to an
+   insn_code.  */
+static void
+create_insn_code_compression_table ()
+{
+  int next_index = 1;
+
+  /* Entry 0 must hold CODE_FOR_nothing to mean "end of array".  */
+  printf ("const enum insn_code %s_multiply_insn_seq_decode_opcode[] = {\n"
+         "  CODE_FOR_nothing /* must be first */ ", ARCH);
+
+  for (size_t i = 0; i < sizeof ops / sizeof ops[0]; i++)
+    {
+      Operator *op = &ops[i];
+      int index = -1;
+
+      /* See if some previous Operator was using the same insn_code.
+        If so, reuse its table entry.  */
+      for (size_t j = 0; j < i; j++)
+       {
+         Operator *old = &ops[j];
+         if (strcmp (old->m_pattern, op->m_pattern) == 0)
+           {
+             index = old->m_top_index;
+             break;
+           }
+       }
+
+      if (index == -1)
+       {
+         /* We need to make a new entry in the table.  */
+         printf (",\n  %s", op->m_pattern);
+         index = next_index++;
+       }
+
+      op->m_top_index = index;
+    }
+
+  printf ("\n};\n\n");
+}
+
+
+/* These are constants we've seen in code, that we want to keep table
+   entries for.  */
+static int multiply_constants_used[] = {
+  -11796480,
+  -27439,
+  -25148,
+  -22820,
+  -21709,
+  -20995,
+  -20284,
+  -20239,
+  -19595,
+  -19447,
+  -19183,
+  -19165,
+  -18730,
+  -17828,
+  -17799,
+  -17237,
+  -17036,
+  -16549,
+  -16423,
+  -16294,
+  -16244,
+  -16069,
+  -15137,
+  -15083,
+  -15038,
+  -14924,
+  -14905,
+  -14752,
+  -14731,
+  -14529,
+  -14273,
+  -14090,
+  -14084,
+  -14043,
+  -13850,
+  -13802,
+  -13631,
+  -13455,
+  -13275,
+  -12879,
+  -12700,
+  -12534,
+  -12399,
+  -12131,
+  -12112,
+  -12054,
+  -12019,
+  -11759,
+  -11585,
+  -11467,
+  -11395,
+  -11295,
+  -11248,
+  -11148,
+  -11116,
+  -11086,
+  -11059,
+  -11018,
+  -10811,
+  -10538,
+  -10258,
+  -10217,
+  -10033,
+  -9766,
+  -9754,
+  -9534,
+  -9527,
+  -9467,
+  -9262,
+  -9232,
+  -9222,
+  -9198,
+  -9191,
+  -9113,
+  -8825,
+  -8756,
+  -8697,
+  -8693,
+  -8565,
+  -8342,
+  -8208,
+  -8200,
+  -8170,
+  -8102,
+  -7770,
+  -7678,
+  -7562,
+  -7376,
+  -7373,
+  -7221,
+  -7121,
+  -6835,
+  -6810,
+  -6626,
+  -6581,
+  -6461,
+  -6278,
+  -6263,
+  -6163,
+  -6029,
+  -5816,
+  -5540,
+  -5461,
+  -5384,
+  -5329,
+  -4985,
+  -4926,
+  -4815,
+  -4788,
+  -4758,
+  -4433,
+  -4229,
+  -4209,
+  -4176,
+  -4104,
+  -4095,
+  -4078,
+  -3941,
+  -3818,
+  -3600,
+  -3474,
+  -3314,
+  -3264,
+  -3196,
+  -3072,
+  -2912,
+  -2836,
+  -2773,
+  -2269,
+  -2184,
+  -2100,
+  -1730,
+  -1512,
+  -1500,
+  -1396,
+  -1344,
+  -1312,
+  -1297,
+  -1059,
+  -1058,
+  1027,
+  1049,
+  1059,
+  1100,
+  1104,
+  1108,
+  1136,
+  1200,
+  1204,
+  1242,
+  1292,
+  1304,
+  1312,
+  1320,
+  1336,
+  1344,
+  1348,
+  1360,
+  1364,
+  1395,
+  1448,
+  1460,
+  1461,
+  1472,
+  1488,
+  1500,
+  1512,
+  1568,
+  1576,
+  1649,
+  1664,
+  1684,
+  1696,
+  1744,
+  1812,
+  1822,
+  1884,
+  1963,
+  1978,
+  2000,
+  2012,
+  2014,
+  2037,
+  2039,
+  2100,
+  2139,
+  2144,
+  2184,
+  2237,
+  2260,
+  2320,
+  2408,
+  2446,
+  2447,
+  2499,
+  2531,
+  2578,
+  2592,
+  2611,
+  2633,
+  2704,
+  2730,
+  2773,
+  2880,
+  2896,
+  2998,
+  3000,
+  3001,
+  3021,
+  3079,
+  3112,
+  3150,
+  3179,
+  3192,
+  3240,
+  3264,
+  3271,
+  3283,
+  3328,
+  3363,
+  3367,
+  3453,
+  3529,
+  3570,
+  3580,
+  3600,
+  3624,
+  3707,
+  3783,
+  3826,
+  3897,
+  3941,
+  3962,
+  3989,
+  4000,
+  4025,
+  4073,
+  4093,
+  4099,
+  4108,
+  4184,
+  4209,
+  4369,
+  4376,
+  4416,
+  4433,
+  4434,
+  4482,
+  4582,
+  4712,
+  4717,
+  4813,
+  4815,
+  4864,
+  5000,
+  5027,
+  5040,
+  5091,
+  5195,
+  5243,
+  5260,
+  5285,
+  5329,
+  5331,
+  5350,
+  5361,
+  5387,
+  5461,
+  5492,
+  5529,
+  5573,
+  5793,
+  5819,
+  5915,
+  5946,
+  5992,
+  6000,
+  6164,
+  6205,
+  6262,
+  6263,
+  6269,
+  6270,
+  6387,
+  6400,
+  6406,
+  6476,
+  6541,
+  6565,
+  6568,
+  6626,
+  6656,
+  6732,
+  6810,
+  6817,
+  6859,
+  7040,
+  7053,
+  7141,
+  7169,
+  7221,
+  7223,
+  7274,
+  7282,
+  7350,
+  7369,
+  7373,
+  7442,
+  7447,
+  7471,
+  7518,
+  7542,
+  7566,
+  7587,
+  7663,
+  7678,
+  7682,
+  7748,
+  7752,
+  7791,
+  8000,
+  8026,
+  8048,
+  8170,
+  8203,
+  8204,
+  8290,
+  8368,
+  8520,
+  8640,
+  8666,
+  8672,
+  8697,
+  8716,
+  8728,
+  8756,
+  8820,
+  8875,
+  8918,
+  8956,
+  9058,
+  9154,
+  9175,
+  9191,
+  9217,
+  9262,
+  9321,
+  9373,
+  9434,
+  9465,
+  9514,
+  9534,
+  9633,
+  9746,
+  9810,
+  9850,
+  9947,
+  9973,
+  10000,
+  10009,
+  10033,
+  10055,
+  10217,
+  10248,
+  10298,
+  10310,
+  10323,
+  10368,
+  10438,
+  10456,
+  10486,
+  10538,
+  10664,
+  10695,
+  10700,
+  10703,
+  10832,
+  10887,
+  10935,
+  10958,
+  11018,
+  11059,
+  11061,
+  11086,
+  11116,
+  11148,
+  11190,
+  11249,
+  11314,
+  11332,
+  11363,
+  11409,
+  11415,
+  11443,
+  11467,
+  11512,
+  11522,
+  11529,
+  11585,
+  11759,
+  11768,
+  11795,
+  11893,
+  11997,
+  12131,
+  12299,
+  12536,
+  12543,
+  12893,
+  12945,
+  12998,
+  13109,
+  13213,
+  13685,
+  13930,
+  14023,
+  14024,
+  14271,
+  14564,
+  14647,
+  15326,
+  15850,
+  15855,
+  15929,
+  16000,
+  16154,
+  16496,
+  16807,
+  16819,
+  16984,
+  17203,
+  17223,
+  17333,
+  17760,
+  17799,
+  17837,
+  18029,
+  18068,
+  18336,
+  18515,
+  19595,
+  20017,
+  20131,
+  20862,
+  20995,
+  21709,
+  22554,
+  25000,
+  25172,
+  25600,
+  25733,
+  27439,
+  38470,
+  46802,
+  50000,
+  11796480,
+  16843009,
+  23592960,
+};
+
+
+const int num_mult_constants_used =
+  (int)(sizeof multiply_constants_used
+       / sizeof multiply_constants_used[0]);
+
+
+#define XSIZE (sizeof multiply_constants_used / \
+              sizeof multiply_constants_used[0] + 32) / 32
+unsigned multiply_constants_avail[XSIZE];
+#undef XSIZE
+
+
+/* bsearch helper function.  */
+static int
+compare_constants (const void *key, const void *t)
+{
+  return (*(int*)key) - *((int*)t);
+}
+
+
+static int *
+find_mult_constants_used (int multiplier)
+{
+  return (int *) bsearch (&multiplier, multiply_constants_used,
+                         num_mult_constants_used,
+                         sizeof multiply_constants_used[0],
+                         compare_constants);
+}
+
+
+int num_ops (ExpressionTree *s)
+{
+  int n = 0;
+  for (int i = 0; i < s->m_num_vals; i++)
+    {
+      Expr *e = &s->m_exprs[i];
+      if (e->m_op != NULL)
+       n++;
+    }
+  return n;
+}
+
+
+#ifdef TILEPRO
+bool
+tilepro_emit (int multiplier, int num_ops)
+{
+  int abs_multiplier = (multiplier >= 0) ? multiplier : -multiplier;
+
+  /* Keep constants in range [-1024, 1024].  */
+  if (abs_multiplier <= 1024)
+    return true;
+
+  /* Keep constants near powers of two.  */
+  int prev_pow2 = 1 << (31 - __builtin_clz (abs_multiplier));
+  int next_pow2 = prev_pow2 << 1;
+
+  if ((abs_multiplier - prev_pow2 <= 10)
+      || (next_pow2 - abs_multiplier <= 10))
+    return true;
+
+  /* Keep constants near powers of ten.  */
+  {
+    long long j = 1;
+    long long prev_pow10;
+    long long next_pow10;
+
+    while (((j * 10) < abs_multiplier)
+          && (j < (j * 10)))
+      j = j * 10;
+
+    prev_pow10 = j;
+    next_pow10 = j * 10;
+
+    if ((abs_multiplier - prev_pow10 <= 10)
+       || (next_pow10 - abs_multiplier <= 10))
+      return true;
+  }
+
+  /* Keep short sequences that have two or fewer ops.  */
+  if (num_ops <= 2)
+    return true;
+
+  /* Keep constants that are mostly 0's or mostly 1's.  */
+  if (__builtin_popcount (multiplier) <= 2 ||
+      __builtin_popcount (multiplier) >= 30)
+    return true;
+
+  /* Keep constants seen in actual code.  */
+  if ((find_mult_constants_used (multiplier)))
+    return true;
+
+  return false;
+}
+#else
+bool
+tilegx_emit (long long multiplier, int num_ops)
+{
+  long long abs_multiplier = (multiplier >= 0) ? multiplier : - multiplier;
+
+  /* Keep constants in range [-1024, 1024].  */
+  if (abs_multiplier <= 1024)
+    return true;
+
+  /* Otherwise exclude sequences with four ops.  */
+  if (num_ops > 3)
+    return false;
+
+  /* Keep constants near powers of two.  */
+  {
+    unsigned long long prev_pow2 =
+      1LL << (63 - __builtin_clzll (abs_multiplier));
+    unsigned long long next_pow2 = prev_pow2 << 1;
+
+    /* handle overflow case. */
+    if (next_pow2 == 0)
+      {
+       if (prev_pow2 - abs_multiplier <= 10)
+         return true;
+      }
+    else if ((abs_multiplier - prev_pow2 <= 10)
+            || (next_pow2 - abs_multiplier <= 10))
+      return true;
+  }
+
+  /* Keep constants near powers of ten.  */
+  {
+    long long j = 1;
+    long long prev_pow10;
+    long long next_pow10;
+
+    while (((j * 10) < abs_multiplier)
+          && (j < (INTMAX_MAX / 10)))
+      j = j * 10;
+
+    prev_pow10 = j;
+    next_pow10 = (j > (INTMAX_MAX / 10)) ? 0 : j * 10;
+
+    if ((abs_multiplier - prev_pow10 <= 100)
+       || (next_pow10
+           && (next_pow10 - abs_multiplier <= 100)))
+      return true;
+  }
+
+  if (num_ops <= 2)
+    return true;
+
+  /* Keep constants that are mostly 0's or mostly 1's.  */
+  if (__builtin_popcountll (multiplier) <= 2 ||
+      __builtin_popcountll (multiplier) >= 62)
+    return true;
+
+  /* Keep constants seen in actual code.  */
+  if (find_mult_constants_used (multiplier))
+    return true;
+
+  return false;
+}
+#endif
+
+
+int
+main ()
+{
+  ExpressionTreeMap best_solution;
+  ExpressionTree s;
+
+#ifdef TILEPRO
+  printf ("/* Constant multiply table for TILEPro.\n");
+#else
+  printf ("/* Constant multiply table for TILE-Gx.\n");
+#endif
+  printf ("   Copyright (C) 2011, 2012\n");
+  printf ("   Free Software Foundation, Inc.\n");
+  printf ("   Contributed by Walter Lee (walt@tilera.com)\n");
+  printf ("\n");
+  printf ("   This file is part of GCC.\n");
+  printf ("\n");
+  printf ("   GCC is free software; you can redistribute it and/or modify it\n");
+  printf ("   under the terms of the GNU General Public License as published\n");
+  printf ("   by the Free Software Foundation; either version 3, or (at your\n");
+  printf ("   option) any later version.\n");
+  printf ("\n");
+  printf ("   GCC is distributed in the hope that it will be useful, but WITHOUT\n");
+  printf ("   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n");
+  printf ("   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public\n");
+  printf ("   License for more details.\n");
+  printf ("\n");
+  printf ("   You should have received a copy of the GNU General Public License\n");
+  printf ("   along with GCC; see the file COPYING3.  If not see\n");
+  printf ("   <http://www.gnu.org/licenses/>.  */\n");
+  printf ("\n");
+  printf ("#include \"config.h\"\n");
+  printf ("#include \"system.h\"\n");
+  printf ("#include \"coretypes.h\"\n");
+  printf ("#include \"expr.h\"\n");
+  printf ("#include \"optabs.h\"\n");
+  printf ("#include \"%s-multiply.h\"\n\n", ARCH);
+  create_insn_code_compression_table ();
+
+  /* Try all combinations of operators and see what constants we
+     produce.  For each possible constant, record the most efficient
+     way to generate it.  */
+  find_sequences (s, best_solution);
+
+  printf ("const struct %s_multiply_insn_seq "
+         "%s_multiply_insn_seq_table[] = {\n",
+         ARCH, ARCH);
+
+  const char *comma_separator = "";
+
+  ExpressionTreeMap::iterator i (best_solution.begin ());
+  for (; i != best_solution.end (); ++i)
+    {
+      ExpressionTree *s = (*i).second;
+      const MUL_TYPE n = (*i).first;
+
+      if (n == 0 || n == 1)
+       {
+         /* Both of these require zero operations, so these entries
+            are bogus and should never be used.  */
+         continue;
+       }
+
+      /* Prune the list of entries to keep the table to a reasonable
+        size.  */
+#ifdef TILEPRO
+      if (!tilepro_emit (n, num_ops (s)))
+       continue;
+#else
+      if (!tilegx_emit (n, num_ops (s)))
+       continue;
+#endif
+
+      printf ("%s", comma_separator);
+
+#ifdef TILEPRO
+      const MUL_TYPE int_min = INT32_MIN;
+#else
+      const MUL_TYPE int_min = INT64_MIN;
+#endif
+      if (n == int_min)
+       {
+         /* Handle C's woeful lack of unary negation. Without this,
+            printing out INT_MIN in decimal will yield an unsigned
+            int which could generate a compiler warning.  */
+#ifdef TILEPRO
+         printf ("  {%d - 1 /* 0x%x */ ,\n   {", n + 1,
+                 (unsigned) n);
+#else
+         printf ("  {%lldll - 1 /* 0x%llx */ ,\n   {", n + 1,
+                 (unsigned MUL_TYPE) n);
+#endif
+       }
+      else
+       {
+#ifdef TILEPRO
+         printf ("  {%d /* 0x%x */ ,\n   {", n, (unsigned) n);
+#else
+         printf ("  {%lldll /* 0x%llx */ ,\n   {", n, (unsigned MUL_TYPE) n);
+#endif
+       }
+
+      bool first = true;
+      for (int j = 0; j < s->m_num_vals; j++)
+       {
+         Expr *e = &s->m_exprs[j];
+
+         const Operator *op = e->m_op;
+         if (op == NULL)
+           continue;
+
+         char buf[1024];
+         snprintf (buf, sizeof buf, "%s{%d, %d, %d}%s",
+                   first ? "" : "    ",
+                   op->m_top_index,
+                   e->m_lhs, e->m_rhs, (j + 1) == s->m_num_vals ? "}" : ",");
+
+         char opnd0[10];
+         if (e->m_lhs)
+           snprintf (opnd0, sizeof opnd0, "r%d", e->m_lhs);
+         else
+           snprintf (opnd0, sizeof opnd0, "zero");
+
+         printf ("%s\t\t\t/* %s r%d, %s, %s%d */\n",
+                 buf, op->m_name, j, opnd0,
+                 op->is_unary () ? "" : "r", e->m_rhs);
+
+         first = false;
+       }
+      printf ("   }");
+      comma_separator = ",\n";
+    }
+
+  printf ("\n};\n\n");
+  printf ("const int %s_multiply_insn_seq_table_size =\n"
+         "  (int) (sizeof %s_multiply_insn_seq_table\n"
+         "         / sizeof %s_multiply_insn_seq_table[0]);\n",
+         ARCH, ARCH, ARCH);
+
+  return EXIT_SUCCESS;
+}
diff --git a/gcc/config/tilepro/linux.h b/gcc/config/tilepro/linux.h
new file mode 100644 (file)
index 0000000..c96399f
--- /dev/null
@@ -0,0 +1,65 @@
+/* Definitions for TILEPro running Linux-based GNU systems with ELF.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#undef CPP_SPEC
+#define CPP_SPEC "%{pthread:-D_REENTRANT}"
+
+#undef LINK_SPEC
+#define LINK_SPEC "\
+  %{shared:-shared} \
+  %{!shared: \
+    %{!static: \
+      %{rdynamic:-export-dynamic} \
+      -dynamic-linker /lib/ld.so.1} \
+    %{static:-static}}"
+
+#define NO_PROFILE_COUNTERS    1
+
+#undef MCOUNT_NAME
+#define MCOUNT_NAME "__mcount"
+
+#undef NEED_INDICATE_EXEC_STACK
+#define NEED_INDICATE_EXEC_STACK 1
+
+#ifdef TARGET_LIBC_PROVIDES_SSP
+/* TILEPro glibc provides __stack_chk_guard two pointer-size words before
+   tp. */
+#define TARGET_THREAD_SSP_OFFSET (-2 * GET_MODE_SIZE (ptr_mode))
+#endif
+
+/* For __clear_cache in libgcc2.c.  */
+#ifdef IN_LIBGCC2
+
+#include <arch/icache.h>
+
+/* Use the minimum page size of 4K.  Alternatively we can call getpagesize()
+   but it introduces a libc dependence.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE(beg, end) invalidate_icache (beg, end - beg, 4096)
+
+#else
+
+/* define CLEAR_INSN_CACHE so that gcc knows to expand __builtin__clear_cache
+   to the libraray call.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE 1
+
+#endif
diff --git a/gcc/config/tilepro/mul-tables.c b/gcc/config/tilepro/mul-tables.c
new file mode 100644 (file)
index 0000000..742e061
--- /dev/null
@@ -0,0 +1,17832 @@
+/* Constant multiply table for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "expr.h"
+#include "optabs.h"
+#include "tilepro-multiply.h"
+
+const enum insn_code tilepro_multiply_insn_seq_decode_opcode[] = {
+  CODE_FOR_nothing /* must be first */ ,
+  CODE_FOR_addsi3,
+  CODE_FOR_subsi3,
+  CODE_FOR_insn_s1a,
+  CODE_FOR_insn_s2a,
+  CODE_FOR_insn_s3a,
+  CODE_FOR_ashlsi3
+};
+
+const struct tilepro_multiply_insn_seq tilepro_multiply_insn_seq_table[] = {
+  {-2147483647 - 1 /* 0x80000000 */ ,
+   {{6, 1, 31}}                        /* shli r2, r1, 31 */
+   },
+  {-2147483647 /* 0x80000001 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {-2147483646 /* 0x80000002 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {-2147483645 /* 0x80000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483644 /* 0x80000004 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {-2147483643 /* 0x80000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483642 /* 0x80000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-2147483641 /* 0x80000007 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {-2147483640 /* 0x80000008 */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {-2147483639 /* 0x80000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483638 /* 0x8000000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-2147483632 /* 0x80000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483616 /* 0x80000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483584 /* 0x80000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483520 /* 0x80000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483392 /* 0x80000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147483136 /* 0x80000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147482624 /* 0x80000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147481600 /* 0x80000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147479552 /* 0x80001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147475456 /* 0x80002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147467264 /* 0x80004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147450880 /* 0x80008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147418112 /* 0x80010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147352576 /* 0x80020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2147221504 /* 0x80040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2146959360 /* 0x80080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2146435072 /* 0x80100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2145386496 /* 0x80200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2143289344 /* 0x80400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2139095040 /* 0x80800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2130706432 /* 0x81000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2113929216 /* 0x82000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2080374784 /* 0x84000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-2013265920 /* 0x88000000 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {-1879048192 /* 0x90000000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {-1610612737 /* 0x9fffffff */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {-1610612736 /* 0xa0000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {-1342177281 /* 0xafffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 28},                        /* shli r4, r3, 28 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1207959553 /* 0xb7ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 27},                        /* shli r4, r3, 27 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1140850689 /* 0xbbffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1073741889 /* 0xbfffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1073741857 /* 0xbfffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1073741841 /* 0xbfffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1073741834 /* 0xbffffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 30},                        /* shli r4, r2, 30 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-1073741833 /* 0xbffffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1073741832 /* 0xbffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-1073741831 /* 0xbffffff9 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1073741830 /* 0xbffffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 30},                        /* shli r4, r2, 30 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {-1073741829 /* 0xbffffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-1073741828 /* 0xbffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-1073741827 /* 0xbffffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {-1073741826 /* 0xbffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-1073741825 /* 0xbfffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741824 /* 0xc0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 30}}                        /* shli r3, r2, 30 */
+   },
+  {-1073741823 /* 0xc0000001 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1073741822 /* 0xc0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741821 /* 0xc0000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741820 /* 0xc0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741819 /* 0xc0000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741818 /* 0xc0000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 30},                        /* shli r3, r2, 30 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-1073741817 /* 0xc0000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 27},                        /* shli r4, r2, 27 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1073741816 /* 0xc0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741815 /* 0xc0000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1073741814 /* 0xc000000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-805306369 /* 0xcfffffff */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-671088641 /* 0xd7ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 27},                        /* shli r4, r3, 27 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-603979777 /* 0xdbffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 26},                        /* shli r4, r3, 26 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-570425345 /* 0xddffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-536870977 /* 0xdfffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-536870945 /* 0xdfffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-536870929 /* 0xdfffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-536870922 /* 0xdffffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 29},                        /* shli r4, r2, 29 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-536870921 /* 0xdffffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-536870920 /* 0xdffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-536870919 /* 0xdffffff9 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-536870918 /* 0xdffffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-536870917 /* 0xdffffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-536870916 /* 0xdffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-536870915 /* 0xdffffffd */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-536870914 /* 0xdffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-536870913 /* 0xdfffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870912 /* 0xe0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {-536870911 /* 0xe0000001 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-536870910 /* 0xe0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870909 /* 0xe0000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870908 /* 0xe0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870907 /* 0xe0000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870906 /* 0xe0000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-536870905 /* 0xe0000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 26},                        /* shli r4, r2, 26 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-536870904 /* 0xe0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870903 /* 0xe0000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-536870902 /* 0xe000000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-402653185 /* 0xe7ffffff */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-335544321 /* 0xebffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 26},                        /* shli r4, r3, 26 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-301989889 /* 0xedffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 25},                        /* shli r4, r3, 25 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-285212673 /* 0xeeffffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-268435521 /* 0xefffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-268435489 /* 0xefffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-268435473 /* 0xefffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-268435466 /* 0xeffffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 28},                        /* shli r4, r2, 28 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-268435465 /* 0xeffffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-268435464 /* 0xeffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-268435463 /* 0xeffffff9 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-268435462 /* 0xeffffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-268435461 /* 0xeffffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-268435460 /* 0xeffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-268435459 /* 0xeffffffd */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-268435458 /* 0xeffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28},                        /* shli r3, r2, 28 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-268435457 /* 0xefffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435456 /* 0xf0000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {-268435455 /* 0xf0000001 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-268435454 /* 0xf0000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435453 /* 0xf0000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435452 /* 0xf0000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435451 /* 0xf0000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435450 /* 0xf0000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-268435449 /* 0xf0000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 25},                        /* shli r4, r2, 25 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-268435448 /* 0xf0000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435447 /* 0xf0000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-268435446 /* 0xf000000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-201326593 /* 0xf3ffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-167772161 /* 0xf5ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 25},                        /* shli r4, r3, 25 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-150994945 /* 0xf6ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 24},                        /* shli r4, r3, 24 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-142606337 /* 0xf77fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-134217793 /* 0xf7ffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-134217761 /* 0xf7ffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-134217745 /* 0xf7ffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-134217738 /* 0xf7fffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 27},                        /* shli r4, r2, 27 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-134217737 /* 0xf7fffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-134217736 /* 0xf7fffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-134217735 /* 0xf7fffff9 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-134217734 /* 0xf7fffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-134217733 /* 0xf7fffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-134217732 /* 0xf7fffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-134217731 /* 0xf7fffffd */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-134217730 /* 0xf7fffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27},                        /* shli r3, r2, 27 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-134217729 /* 0xf7ffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217728 /* 0xf8000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {-134217727 /* 0xf8000001 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-134217726 /* 0xf8000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217725 /* 0xf8000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217724 /* 0xf8000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217723 /* 0xf8000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217722 /* 0xf8000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-134217721 /* 0xf8000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 24},                        /* shli r4, r2, 24 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-134217720 /* 0xf8000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217719 /* 0xf8000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134217718 /* 0xf800000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-100663297 /* 0xf9ffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-83886081 /* 0xfaffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 24},                        /* shli r4, r3, 24 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-75497473 /* 0xfb7fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 23},                        /* shli r4, r3, 23 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-71303169 /* 0xfbbfffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-67108929 /* 0xfbffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-67108897 /* 0xfbffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-67108881 /* 0xfbffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-67108874 /* 0xfbfffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 26},                        /* shli r4, r2, 26 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-67108873 /* 0xfbfffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-67108872 /* 0xfbfffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-67108871 /* 0xfbfffff9 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-67108870 /* 0xfbfffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-67108869 /* 0xfbfffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-67108868 /* 0xfbfffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-67108867 /* 0xfbfffffd */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-67108866 /* 0xfbfffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26},                        /* shli r3, r2, 26 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-67108865 /* 0xfbffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108864 /* 0xfc000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {-67108863 /* 0xfc000001 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-67108862 /* 0xfc000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108861 /* 0xfc000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108860 /* 0xfc000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108859 /* 0xfc000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108858 /* 0xfc000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-67108857 /* 0xfc000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 23},                        /* shli r4, r2, 23 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-67108856 /* 0xfc000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108855 /* 0xfc000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-67108854 /* 0xfc00000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-50331649 /* 0xfcffffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-41943041 /* 0xfd7fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 23},                        /* shli r4, r3, 23 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-37748737 /* 0xfdbfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 22},                        /* shli r4, r3, 22 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-35651585 /* 0xfddfffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-33554497 /* 0xfdffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-33554465 /* 0xfdffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-33554449 /* 0xfdffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-33554442 /* 0xfdfffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 25},                        /* shli r4, r2, 25 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-33554441 /* 0xfdfffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-33554440 /* 0xfdfffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-33554439 /* 0xfdfffff9 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-33554438 /* 0xfdfffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-33554437 /* 0xfdfffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-33554436 /* 0xfdfffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-33554435 /* 0xfdfffffd */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-33554434 /* 0xfdfffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25},                        /* shli r3, r2, 25 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-33554433 /* 0xfdffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554432 /* 0xfe000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {-33554431 /* 0xfe000001 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-33554430 /* 0xfe000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554429 /* 0xfe000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554428 /* 0xfe000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554427 /* 0xfe000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554426 /* 0xfe000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-33554425 /* 0xfe000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 22},                        /* shli r4, r2, 22 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-33554424 /* 0xfe000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554423 /* 0xfe000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-33554422 /* 0xfe00000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-25165825 /* 0xfe7fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-20971521 /* 0xfebfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 22},                        /* shli r4, r3, 22 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-18874369 /* 0xfedfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 21},                        /* shli r4, r3, 21 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-17825793 /* 0xfeefffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-16777281 /* 0xfeffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16777249 /* 0xfeffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16777233 /* 0xfeffffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-16777226 /* 0xfefffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 24},                        /* shli r4, r2, 24 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-16777225 /* 0xfefffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16777224 /* 0xfefffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-16777223 /* 0xfefffff9 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16777222 /* 0xfefffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-16777221 /* 0xfefffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-16777220 /* 0xfefffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-16777219 /* 0xfefffffd */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16777218 /* 0xfefffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24},                        /* shli r3, r2, 24 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-16777217 /* 0xfeffffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777216 /* 0xff000000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {-16777215 /* 0xff000001 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-16777214 /* 0xff000002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777213 /* 0xff000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777212 /* 0xff000004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777211 /* 0xff000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777210 /* 0xff000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-16777209 /* 0xff000007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 21},                        /* shli r4, r2, 21 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-16777208 /* 0xff000008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777207 /* 0xff000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16777206 /* 0xff00000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-12582913 /* 0xff3fffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-11796480 /* 0xff4c0000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {6, 2, 22},                        /* shli r4, r2, 22 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-10485761 /* 0xff5fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 21},                        /* shli r4, r3, 21 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-9437185 /* 0xff6fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 20},                        /* shli r4, r3, 20 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-8912897 /* 0xff77ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-8388673 /* 0xff7fffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8388641 /* 0xff7fffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8388625 /* 0xff7fffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-8388618 /* 0xff7ffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 23},                        /* shli r4, r2, 23 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-8388617 /* 0xff7ffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8388616 /* 0xff7ffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-8388615 /* 0xff7ffff9 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8388614 /* 0xff7ffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-8388613 /* 0xff7ffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-8388612 /* 0xff7ffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-8388611 /* 0xff7ffffd */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8388610 /* 0xff7ffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23},                        /* shli r3, r2, 23 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-8388609 /* 0xff7fffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388608 /* 0xff800000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {-8388607 /* 0xff800001 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8388606 /* 0xff800002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388605 /* 0xff800003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388604 /* 0xff800004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388603 /* 0xff800005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388602 /* 0xff800006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-8388601 /* 0xff800007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 20},                        /* shli r4, r2, 20 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-8388600 /* 0xff800008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388599 /* 0xff800009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8388598 /* 0xff80000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-6291457 /* 0xff9fffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-5242881 /* 0xffafffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 20},                        /* shli r4, r3, 20 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4718593 /* 0xffb7ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 19},                        /* shli r4, r3, 19 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4456449 /* 0xffbbffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-4194369 /* 0xffbfffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4194337 /* 0xffbfffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4194321 /* 0xffbfffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-4194314 /* 0xffbffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 22},                        /* shli r4, r2, 22 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-4194313 /* 0xffbffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4194312 /* 0xffbffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-4194311 /* 0xffbffff9 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4194310 /* 0xffbffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4194309 /* 0xffbffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-4194308 /* 0xffbffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-4194307 /* 0xffbffffd */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4194306 /* 0xffbffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22},                        /* shli r3, r2, 22 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-4194305 /* 0xffbfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194304 /* 0xffc00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {-4194303 /* 0xffc00001 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4194302 /* 0xffc00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194301 /* 0xffc00003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194300 /* 0xffc00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194299 /* 0xffc00005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194298 /* 0xffc00006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-4194297 /* 0xffc00007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 19},                        /* shli r4, r2, 19 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-4194296 /* 0xffc00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194295 /* 0xffc00009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4194294 /* 0xffc0000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-3145729 /* 0xffcfffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2621441 /* 0xffd7ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 19},                        /* shli r4, r3, 19 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2359297 /* 0xffdbffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 18},                        /* shli r4, r3, 18 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2228225 /* 0xffddffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-2097217 /* 0xffdfffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2097185 /* 0xffdfffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2097169 /* 0xffdfffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-2097162 /* 0xffdffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 21},                        /* shli r4, r2, 21 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-2097161 /* 0xffdffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2097160 /* 0xffdffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-2097159 /* 0xffdffff9 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2097158 /* 0xffdffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2097157 /* 0xffdffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-2097156 /* 0xffdffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-2097155 /* 0xffdffffd */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2097154 /* 0xffdffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21},                        /* shli r3, r2, 21 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-2097153 /* 0xffdfffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097152 /* 0xffe00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {-2097151 /* 0xffe00001 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2097150 /* 0xffe00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097149 /* 0xffe00003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097148 /* 0xffe00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097147 /* 0xffe00005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097146 /* 0xffe00006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-2097145 /* 0xffe00007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 18},                        /* shli r4, r2, 18 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-2097144 /* 0xffe00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097143 /* 0xffe00009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2097142 /* 0xffe0000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1572865 /* 0xffe7ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1310721 /* 0xffebffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 18},                        /* shli r4, r3, 18 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1179649 /* 0xffedffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 17},                        /* shli r4, r3, 17 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1114113 /* 0xffeeffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1048641 /* 0xffefffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1048609 /* 0xffefffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1048593 /* 0xffefffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1048586 /* 0xffeffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 20},                        /* shli r4, r2, 20 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-1048585 /* 0xffeffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1048584 /* 0xffeffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-1048583 /* 0xffeffff9 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1048582 /* 0xffeffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1048581 /* 0xffeffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-1048580 /* 0xffeffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-1048579 /* 0xffeffffd */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1048578 /* 0xffeffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20},                        /* shli r3, r2, 20 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-1048577 /* 0xffefffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048576 /* 0xfff00000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {-1048575 /* 0xfff00001 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1048574 /* 0xfff00002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048573 /* 0xfff00003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048572 /* 0xfff00004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048571 /* 0xfff00005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048570 /* 0xfff00006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-1048569 /* 0xfff00007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 17},                        /* shli r4, r2, 17 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1048568 /* 0xfff00008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048567 /* 0xfff00009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1048566 /* 0xfff0000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-786433 /* 0xfff3ffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-655361 /* 0xfff5ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 17},                        /* shli r4, r3, 17 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-589825 /* 0xfff6ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 16},                        /* shli r4, r3, 16 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-557057 /* 0xfff77fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-524353 /* 0xfff7ffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-524321 /* 0xfff7ffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-524305 /* 0xfff7ffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-524298 /* 0xfff7fff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 19},                        /* shli r4, r2, 19 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-524297 /* 0xfff7fff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-524296 /* 0xfff7fff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-524295 /* 0xfff7fff9 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-524294 /* 0xfff7fffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-524293 /* 0xfff7fffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-524292 /* 0xfff7fffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-524291 /* 0xfff7fffd */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-524290 /* 0xfff7fffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19},                        /* shli r3, r2, 19 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-524289 /* 0xfff7ffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524288 /* 0xfff80000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {-524287 /* 0xfff80001 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-524286 /* 0xfff80002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524285 /* 0xfff80003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524284 /* 0xfff80004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524283 /* 0xfff80005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524282 /* 0xfff80006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-524281 /* 0xfff80007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 16},                        /* shli r4, r2, 16 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-524280 /* 0xfff80008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524279 /* 0xfff80009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-524278 /* 0xfff8000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-393217 /* 0xfff9ffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-327681 /* 0xfffaffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 16},                        /* shli r4, r3, 16 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-294913 /* 0xfffb7fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 15},                        /* shli r4, r3, 15 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-278529 /* 0xfffbbfff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-262209 /* 0xfffbffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-262177 /* 0xfffbffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-262161 /* 0xfffbffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-262154 /* 0xfffbfff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 18},                        /* shli r4, r2, 18 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-262153 /* 0xfffbfff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-262152 /* 0xfffbfff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-262151 /* 0xfffbfff9 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262150 /* 0xfffbfffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-262149 /* 0xfffbfffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-262148 /* 0xfffbfffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-262147 /* 0xfffbfffd */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262146 /* 0xfffbfffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18},                        /* shli r3, r2, 18 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-262145 /* 0xfffbffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262144 /* 0xfffc0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {-262143 /* 0xfffc0001 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-262142 /* 0xfffc0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262141 /* 0xfffc0003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262140 /* 0xfffc0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262139 /* 0xfffc0005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262138 /* 0xfffc0006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-262137 /* 0xfffc0007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 15},                        /* shli r4, r2, 15 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-262136 /* 0xfffc0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262135 /* 0xfffc0009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-262134 /* 0xfffc000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-196609 /* 0xfffcffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-163841 /* 0xfffd7fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 15},                        /* shli r4, r3, 15 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-147457 /* 0xfffdbfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 14},                        /* shli r4, r3, 14 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-139265 /* 0xfffddfff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-131137 /* 0xfffdffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-131105 /* 0xfffdffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-131089 /* 0xfffdffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-131082 /* 0xfffdfff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 17},                        /* shli r4, r2, 17 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-131081 /* 0xfffdfff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-131080 /* 0xfffdfff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-131079 /* 0xfffdfff9 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-131078 /* 0xfffdfffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-131077 /* 0xfffdfffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-131076 /* 0xfffdfffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-131075 /* 0xfffdfffd */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-131074 /* 0xfffdfffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17},                        /* shli r3, r2, 17 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-131073 /* 0xfffdffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131072 /* 0xfffe0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {-131071 /* 0xfffe0001 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-131070 /* 0xfffe0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131069 /* 0xfffe0003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131068 /* 0xfffe0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131067 /* 0xfffe0005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131066 /* 0xfffe0006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-131065 /* 0xfffe0007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 14},                        /* shli r4, r2, 14 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-131064 /* 0xfffe0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131063 /* 0xfffe0009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-131062 /* 0xfffe000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-98305 /* 0xfffe7fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-81921 /* 0xfffebfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 14},                        /* shli r4, r3, 14 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-73729 /* 0xfffedfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 13},                        /* shli r4, r3, 13 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-69633 /* 0xfffeefff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-65601 /* 0xfffeffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-65569 /* 0xfffeffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-65553 /* 0xfffeffef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-65546 /* 0xfffefff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 16},                        /* shli r4, r2, 16 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-65545 /* 0xfffefff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-65544 /* 0xfffefff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-65543 /* 0xfffefff9 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-65542 /* 0xfffefffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-65541 /* 0xfffefffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-65540 /* 0xfffefffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-65539 /* 0xfffefffd */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-65538 /* 0xfffefffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16},                        /* shli r3, r2, 16 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-65537 /* 0xfffeffff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65536 /* 0xffff0000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {-65535 /* 0xffff0001 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-65534 /* 0xffff0002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65533 /* 0xffff0003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65532 /* 0xffff0004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65531 /* 0xffff0005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65530 /* 0xffff0006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-65529 /* 0xffff0007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 13},                        /* shli r4, r2, 13 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-65528 /* 0xffff0008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65527 /* 0xffff0009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-65526 /* 0xffff000a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-49153 /* 0xffff3fff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-40961 /* 0xffff5fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 13},                        /* shli r4, r3, 13 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-36865 /* 0xffff6fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 12},                        /* shli r4, r3, 12 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-34817 /* 0xffff77ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-32833 /* 0xffff7fbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-32801 /* 0xffff7fdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-32785 /* 0xffff7fef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-32778 /* 0xffff7ff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 15},                        /* shli r4, r2, 15 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-32777 /* 0xffff7ff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-32776 /* 0xffff7ff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-32775 /* 0xffff7ff9 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-32774 /* 0xffff7ffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-32773 /* 0xffff7ffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-32772 /* 0xffff7ffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-32771 /* 0xffff7ffd */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-32770 /* 0xffff7ffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15},                        /* shli r3, r2, 15 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-32769 /* 0xffff7fff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32768 /* 0xffff8000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {-32767 /* 0xffff8001 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-32766 /* 0xffff8002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32765 /* 0xffff8003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32764 /* 0xffff8004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32763 /* 0xffff8005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32762 /* 0xffff8006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-32761 /* 0xffff8007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 12},                        /* shli r4, r2, 12 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-32760 /* 0xffff8008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32759 /* 0xffff8009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32758 /* 0xffff800a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-24577 /* 0xffff9fff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-20481 /* 0xffffafff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 12},                        /* shli r4, r3, 12 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-19447 /* 0xffffb409 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 10},                        /* shli r4, r3, 10 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-18433 /* 0xffffb7ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 11},                        /* shli r4, r3, 11 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-17409 /* 0xffffbbff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-16449 /* 0xffffbfbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16423 /* 0xffffbfd9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-16417 /* 0xffffbfdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16401 /* 0xffffbfef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-16394 /* 0xffffbff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 14},                        /* shli r4, r2, 14 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-16393 /* 0xffffbff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-16392 /* 0xffffbff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-16391 /* 0xffffbff9 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16390 /* 0xffffbffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-16389 /* 0xffffbffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-16388 /* 0xffffbffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-16387 /* 0xffffbffd */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-16386 /* 0xffffbffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14},                        /* shli r3, r2, 14 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-16385 /* 0xffffbfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16384 /* 0xffffc000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {-16383 /* 0xffffc001 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-16382 /* 0xffffc002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16381 /* 0xffffc003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16380 /* 0xffffc004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16379 /* 0xffffc005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16378 /* 0xffffc006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-16377 /* 0xffffc007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 11},                        /* shli r4, r2, 11 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-16376 /* 0xffffc008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16375 /* 0xffffc009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16374 /* 0xffffc00a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-12289 /* 0xffffcfff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-11248 /* 0xffffd410 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-10241 /* 0xffffd7ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 11},                        /* shli r4, r3, 11 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-9232 /* 0xffffdbf0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-9217 /* 0xffffdbff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 10},                        /* shli r4, r3, 10 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-9198 /* 0xffffdc12 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-9191 /* 0xffffdc19 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-8705 /* 0xffffddff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-8257 /* 0xffffdfbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8225 /* 0xffffdfdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8209 /* 0xffffdfef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-8208 /* 0xffffdff0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-8202 /* 0xffffdff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 13},                        /* shli r4, r2, 13 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-8201 /* 0xffffdff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-8200 /* 0xffffdff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-8199 /* 0xffffdff9 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8198 /* 0xffffdffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-8197 /* 0xffffdffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-8196 /* 0xffffdffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-8195 /* 0xffffdffd */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-8194 /* 0xffffdffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13},                        /* shli r3, r2, 13 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-8193 /* 0xffffdfff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8192 /* 0xffffe000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {-8191 /* 0xffffe001 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-8190 /* 0xffffe002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8189 /* 0xffffe003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8188 /* 0xffffe004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8187 /* 0xffffe005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8186 /* 0xffffe006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-8185 /* 0xffffe007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-8184 /* 0xffffe008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8183 /* 0xffffe009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-8182 /* 0xffffe00a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-7678 /* 0xffffe202 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-6145 /* 0xffffe7ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-5121 /* 0xffffebff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 10},                        /* shli r4, r3, 10 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4609 /* 0xffffedff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 9},                 /* shli r4, r3, 9 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4353 /* 0xffffeeff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-4161 /* 0xffffefbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4129 /* 0xffffefdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4113 /* 0xffffefef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-4106 /* 0xffffeff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 12},                        /* shli r4, r2, 12 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-4105 /* 0xffffeff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4104 /* 0xffffeff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-4103 /* 0xffffeff9 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4102 /* 0xffffeffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-4101 /* 0xffffeffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-4100 /* 0xffffeffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-4099 /* 0xffffeffd */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-4098 /* 0xffffeffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12},                        /* shli r3, r2, 12 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-4097 /* 0xffffefff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4096 /* 0xfffff000 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {-4095 /* 0xfffff001 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-4094 /* 0xfffff002 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4093 /* 0xfffff003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4092 /* 0xfffff004 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4091 /* 0xfffff005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4090 /* 0xfffff006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-4089 /* 0xfffff007 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-4088 /* 0xfffff008 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4087 /* 0xfffff009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-4086 /* 0xfffff00a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-4078 /* 0xfffff012 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-3600 /* 0xfffff1f0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-3073 /* 0xfffff3ff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-3072 /* 0xfffff400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2912 /* 0xfffff4a0 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2561 /* 0xfffff5ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 9},                 /* shli r4, r3, 9 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2305 /* 0xfffff6ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2184 /* 0xfffff778 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-2177 /* 0xfffff77f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-2113 /* 0xfffff7bf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2081 /* 0xfffff7df */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2065 /* 0xfffff7ef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-2058 /* 0xfffff7f6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 11},                        /* shli r4, r2, 11 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-2057 /* 0xfffff7f7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-2056 /* 0xfffff7f8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-2055 /* 0xfffff7f9 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2054 /* 0xfffff7fa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-2053 /* 0xfffff7fb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-2052 /* 0xfffff7fc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-2051 /* 0xfffff7fd */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-2050 /* 0xfffff7fe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11},                        /* shli r3, r2, 11 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-2049 /* 0xfffff7ff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2048 /* 0xfffff800 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {-2047 /* 0xfffff801 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2046 /* 0xfffff802 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2045 /* 0xfffff803 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2044 /* 0xfffff804 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2043 /* 0xfffff805 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2042 /* 0xfffff806 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-2041 /* 0xfffff807 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-2040 /* 0xfffff808 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2039 /* 0xfffff809 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-2038 /* 0xfffff80a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1537 /* 0xfffff9ff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1512 /* 0xfffffa18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1500 /* 0xfffffa24 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-1396 /* 0xfffffa8c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-1344 /* 0xfffffac0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1312 /* 0xfffffae0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-1281 /* 0xfffffaff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1153 /* 0xfffffb7f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1089 /* 0xfffffbbf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1059 /* 0xfffffbdd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1057 /* 0xfffffbdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1041 /* 0xfffffbef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-1034 /* 0xfffffbf6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-1033 /* 0xfffffbf7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1032 /* 0xfffffbf8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-1031 /* 0xfffffbf9 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1030 /* 0xfffffbfa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1029 /* 0xfffffbfb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-1028 /* 0xfffffbfc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-1027 /* 0xfffffbfd */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-1026 /* 0xfffffbfe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-1025 /* 0xfffffbff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1024 /* 0xfffffc00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {-1023 /* 0xfffffc01 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-1022 /* 0xfffffc02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1021 /* 0xfffffc03 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1020 /* 0xfffffc04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1019 /* 0xfffffc05 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1018 /* 0xfffffc06 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-1017 /* 0xfffffc07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1016 /* 0xfffffc08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1015 /* 0xfffffc09 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1014 /* 0xfffffc0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1013 /* 0xfffffc0b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1012 /* 0xfffffc0c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-1011 /* 0xfffffc0d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-1010 /* 0xfffffc0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1009 /* 0xfffffc0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1008 /* 0xfffffc10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-1007 /* 0xfffffc11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-1006 /* 0xfffffc12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-1005 /* 0xfffffc13 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* s1a r5, r4, r1 */
+   },
+  {-1004 /* 0xfffffc14 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-1003 /* 0xfffffc15 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-1001 /* 0xfffffc17 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-1000 /* 0xfffffc18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-999 /* 0xfffffc19 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-997 /* 0xfffffc1b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-996 /* 0xfffffc1c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 1, 3},                 /* s2a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-994 /* 0xfffffc1e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-993 /* 0xfffffc1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-992 /* 0xfffffc20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-991 /* 0xfffffc21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-990 /* 0xfffffc22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-988 /* 0xfffffc24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-987 /* 0xfffffc25 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-984 /* 0xfffffc28 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-983 /* 0xfffffc29 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-979 /* 0xfffffc2d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-976 /* 0xfffffc30 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-975 /* 0xfffffc31 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-969 /* 0xfffffc37 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-968 /* 0xfffffc38 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {5, 1, 3},                 /* s3a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-967 /* 0xfffffc39 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-965 /* 0xfffffc3b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-964 /* 0xfffffc3c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {4, 1, 3},                 /* s2a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-963 /* 0xfffffc3d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 1},                 /* s1a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-962 /* 0xfffffc3e */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-961 /* 0xfffffc3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-960 /* 0xfffffc40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-959 /* 0xfffffc41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-958 /* 0xfffffc42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-957 /* 0xfffffc43 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-956 /* 0xfffffc44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-955 /* 0xfffffc45 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-953 /* 0xfffffc47 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-952 /* 0xfffffc48 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-951 /* 0xfffffc49 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-945 /* 0xfffffc4f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {-944 /* 0xfffffc50 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-943 /* 0xfffffc51 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-942 /* 0xfffffc52 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {-940 /* 0xfffffc54 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-936 /* 0xfffffc58 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-935 /* 0xfffffc59 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-929 /* 0xfffffc5f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-928 /* 0xfffffc60 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-925 /* 0xfffffc63 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-924 /* 0xfffffc64 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-920 /* 0xfffffc68 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-919 /* 0xfffffc69 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-916 /* 0xfffffc6c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-913 /* 0xfffffc6f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-912 /* 0xfffffc70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-911 /* 0xfffffc71 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-910 /* 0xfffffc72 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-905 /* 0xfffffc77 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-904 /* 0xfffffc78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-903 /* 0xfffffc79 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-902 /* 0xfffffc7a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-901 /* 0xfffffc7b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-900 /* 0xfffffc7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-899 /* 0xfffffc7d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-898 /* 0xfffffc7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-897 /* 0xfffffc7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-896 /* 0xfffffc80 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-895 /* 0xfffffc81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-894 /* 0xfffffc82 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-893 /* 0xfffffc83 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-892 /* 0xfffffc84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-891 /* 0xfffffc85 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-890 /* 0xfffffc86 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-889 /* 0xfffffc87 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-888 /* 0xfffffc88 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-887 /* 0xfffffc89 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-886 /* 0xfffffc8a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-884 /* 0xfffffc8c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-881 /* 0xfffffc8f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-880 /* 0xfffffc90 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-879 /* 0xfffffc91 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 1}}                 /* s1a r5, r4, r1 */
+   },
+  {-873 /* 0xfffffc97 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-872 /* 0xfffffc98 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-868 /* 0xfffffc9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-865 /* 0xfffffc9f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-864 /* 0xfffffca0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-863 /* 0xfffffca1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-861 /* 0xfffffca3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-860 /* 0xfffffca4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-856 /* 0xfffffca8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-855 /* 0xfffffca9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-847 /* 0xfffffcb1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-837 /* 0xfffffcbb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-835 /* 0xfffffcbd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-834 /* 0xfffffcbe */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {-832 /* 0xfffffcc0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {-831 /* 0xfffffcc1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-829 /* 0xfffffcc3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-828 /* 0xfffffcc4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-827 /* 0xfffffcc5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-824 /* 0xfffffcc8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-823 /* 0xfffffcc9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-819 /* 0xfffffccd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-816 /* 0xfffffcd0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-815 /* 0xfffffcd1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-803 /* 0xfffffcdd */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-801 /* 0xfffffcdf */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-800 /* 0xfffffce0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-799 /* 0xfffffce1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-797 /* 0xfffffce3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-796 /* 0xfffffce4 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-795 /* 0xfffffce5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-793 /* 0xfffffce7 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-792 /* 0xfffffce8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-791 /* 0xfffffce9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-789 /* 0xfffffceb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-788 /* 0xfffffcec */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-785 /* 0xfffffcef */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-784 /* 0xfffffcf0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-783 /* 0xfffffcf1 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-781 /* 0xfffffcf3 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-780 /* 0xfffffcf4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-779 /* 0xfffffcf5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-777 /* 0xfffffcf7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-776 /* 0xfffffcf8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-775 /* 0xfffffcf9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-774 /* 0xfffffcfa */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-773 /* 0xfffffcfb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-772 /* 0xfffffcfc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-771 /* 0xfffffcfd */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* s1a r5, r4, r4 */
+   },
+  {-770 /* 0xfffffcfe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-769 /* 0xfffffcff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-768 /* 0xfffffd00 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-767 /* 0xfffffd01 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-766 /* 0xfffffd02 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-765 /* 0xfffffd03 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-764 /* 0xfffffd04 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-763 /* 0xfffffd05 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-762 /* 0xfffffd06 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-761 /* 0xfffffd07 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-760 /* 0xfffffd08 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-759 /* 0xfffffd09 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-757 /* 0xfffffd0b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-756 /* 0xfffffd0c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-755 /* 0xfffffd0d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-753 /* 0xfffffd0f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-752 /* 0xfffffd10 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-751 /* 0xfffffd11 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-749 /* 0xfffffd13 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 1, 3},                 /* s3a r4, r1, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-748 /* 0xfffffd14 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-744 /* 0xfffffd18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-743 /* 0xfffffd19 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-741 /* 0xfffffd1b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-739 /* 0xfffffd1d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-737 /* 0xfffffd1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-736 /* 0xfffffd20 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-735 /* 0xfffffd21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-732 /* 0xfffffd24 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-729 /* 0xfffffd27 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-728 /* 0xfffffd28 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-720 /* 0xfffffd30 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-719 /* 0xfffffd31 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-715 /* 0xfffffd35 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-712 /* 0xfffffd38 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-711 /* 0xfffffd39 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-708 /* 0xfffffd3c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-707 /* 0xfffffd3d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-705 /* 0xfffffd3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-704 /* 0xfffffd40 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {-703 /* 0xfffffd41 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-701 /* 0xfffffd43 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-700 /* 0xfffffd44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-699 /* 0xfffffd45 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-695 /* 0xfffffd49 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-693 /* 0xfffffd4b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-692 /* 0xfffffd4c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-688 /* 0xfffffd50 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-680 /* 0xfffffd58 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-679 /* 0xfffffd59 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-675 /* 0xfffffd5d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-673 /* 0xfffffd5f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-672 /* 0xfffffd60 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-671 /* 0xfffffd61 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-667 /* 0xfffffd65 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-664 /* 0xfffffd68 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-660 /* 0xfffffd6c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-659 /* 0xfffffd6d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-657 /* 0xfffffd6f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-656 /* 0xfffffd70 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-655 /* 0xfffffd71 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-651 /* 0xfffffd75 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-650 /* 0xfffffd76 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-649 /* 0xfffffd77 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-648 /* 0xfffffd78 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-647 /* 0xfffffd79 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-645 /* 0xfffffd7b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-644 /* 0xfffffd7c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-643 /* 0xfffffd7d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-642 /* 0xfffffd7e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-641 /* 0xfffffd7f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-640 /* 0xfffffd80 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {-639 /* 0xfffffd81 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-638 /* 0xfffffd82 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-637 /* 0xfffffd83 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-636 /* 0xfffffd84 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-635 /* 0xfffffd85 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-634 /* 0xfffffd86 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-633 /* 0xfffffd87 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-632 /* 0xfffffd88 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-631 /* 0xfffffd89 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-630 /* 0xfffffd8a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-629 /* 0xfffffd8b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-627 /* 0xfffffd8d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-625 /* 0xfffffd8f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-624 /* 0xfffffd90 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-620 /* 0xfffffd94 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-619 /* 0xfffffd95 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-616 /* 0xfffffd98 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-615 /* 0xfffffd99 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-613 /* 0xfffffd9b */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-612 /* 0xfffffd9c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-611 /* 0xfffffd9d */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-609 /* 0xfffffd9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-608 /* 0xfffffda0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-607 /* 0xfffffda1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-604 /* 0xfffffda4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-603 /* 0xfffffda5 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-600 /* 0xfffffda8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-599 /* 0xfffffda9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-595 /* 0xfffffdad */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-594 /* 0xfffffdae */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-593 /* 0xfffffdaf */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-592 /* 0xfffffdb0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-591 /* 0xfffffdb1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-589 /* 0xfffffdb3 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-588 /* 0xfffffdb4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-585 /* 0xfffffdb7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-584 /* 0xfffffdb8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-583 /* 0xfffffdb9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-581 /* 0xfffffdbb */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-580 /* 0xfffffdbc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-579 /* 0xfffffdbd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-578 /* 0xfffffdbe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-577 /* 0xfffffdbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-576 /* 0xfffffdc0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {-575 /* 0xfffffdc1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-574 /* 0xfffffdc2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-573 /* 0xfffffdc3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-572 /* 0xfffffdc4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-571 /* 0xfffffdc5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-569 /* 0xfffffdc7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-568 /* 0xfffffdc8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-567 /* 0xfffffdc9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-566 /* 0xfffffdca */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-565 /* 0xfffffdcb */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-564 /* 0xfffffdcc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-563 /* 0xfffffdcd */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-561 /* 0xfffffdcf */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-560 /* 0xfffffdd0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-559 /* 0xfffffdd1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-558 /* 0xfffffdd2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-557 /* 0xfffffdd3 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-556 /* 0xfffffdd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-555 /* 0xfffffdd5 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-553 /* 0xfffffdd7 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-552 /* 0xfffffdd8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-551 /* 0xfffffdd9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-549 /* 0xfffffddb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-548 /* 0xfffffddc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-547 /* 0xfffffddd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-546 /* 0xfffffdde */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-545 /* 0xfffffddf */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-544 /* 0xfffffde0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-543 /* 0xfffffde1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-542 /* 0xfffffde2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-540 /* 0xfffffde4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-539 /* 0xfffffde5 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-536 /* 0xfffffde8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-535 /* 0xfffffde9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-533 /* 0xfffffdeb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-532 /* 0xfffffdec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-531 /* 0xfffffded */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-530 /* 0xfffffdee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-529 /* 0xfffffdef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-528 /* 0xfffffdf0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-527 /* 0xfffffdf1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-526 /* 0xfffffdf2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-525 /* 0xfffffdf3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-524 /* 0xfffffdf4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-523 /* 0xfffffdf5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-522 /* 0xfffffdf6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-521 /* 0xfffffdf7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-520 /* 0xfffffdf8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-519 /* 0xfffffdf9 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-518 /* 0xfffffdfa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-517 /* 0xfffffdfb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-516 /* 0xfffffdfc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-515 /* 0xfffffdfd */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-514 /* 0xfffffdfe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9},                 /* shli r3, r2, 9 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-513 /* 0xfffffdff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-512 /* 0xfffffe00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {-511 /* 0xfffffe01 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-510 /* 0xfffffe02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-509 /* 0xfffffe03 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-508 /* 0xfffffe04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-507 /* 0xfffffe05 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-506 /* 0xfffffe06 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-505 /* 0xfffffe07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-504 /* 0xfffffe08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-503 /* 0xfffffe09 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-502 /* 0xfffffe0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-501 /* 0xfffffe0b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-500 /* 0xfffffe0c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-499 /* 0xfffffe0d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-498 /* 0xfffffe0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-497 /* 0xfffffe0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-496 /* 0xfffffe10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-495 /* 0xfffffe11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-494 /* 0xfffffe12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-493 /* 0xfffffe13 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* s1a r5, r4, r1 */
+   },
+  {-492 /* 0xfffffe14 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-491 /* 0xfffffe15 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-489 /* 0xfffffe17 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-488 /* 0xfffffe18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-487 /* 0xfffffe19 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-485 /* 0xfffffe1b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-484 /* 0xfffffe1c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 1, 3},                 /* s2a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-483 /* 0xfffffe1d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 1},                 /* s1a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-482 /* 0xfffffe1e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-481 /* 0xfffffe1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-480 /* 0xfffffe20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-479 /* 0xfffffe21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-478 /* 0xfffffe22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-477 /* 0xfffffe23 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-476 /* 0xfffffe24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-475 /* 0xfffffe25 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-472 /* 0xfffffe28 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-471 /* 0xfffffe29 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-468 /* 0xfffffe2c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-467 /* 0xfffffe2d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-465 /* 0xfffffe2f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {-464 /* 0xfffffe30 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-463 /* 0xfffffe31 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-462 /* 0xfffffe32 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-460 /* 0xfffffe34 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-457 /* 0xfffffe37 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-456 /* 0xfffffe38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-455 /* 0xfffffe39 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {-454 /* 0xfffffe3a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-453 /* 0xfffffe3b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-452 /* 0xfffffe3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-451 /* 0xfffffe3d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-450 /* 0xfffffe3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-449 /* 0xfffffe3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-448 /* 0xfffffe40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-447 /* 0xfffffe41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-446 /* 0xfffffe42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-445 /* 0xfffffe43 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-444 /* 0xfffffe44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-443 /* 0xfffffe45 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-442 /* 0xfffffe46 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-441 /* 0xfffffe47 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-440 /* 0xfffffe48 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-439 /* 0xfffffe49 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-438 /* 0xfffffe4a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-436 /* 0xfffffe4c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-433 /* 0xfffffe4f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-432 /* 0xfffffe50 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-431 /* 0xfffffe51 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-429 /* 0xfffffe53 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-428 /* 0xfffffe54 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-424 /* 0xfffffe58 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-423 /* 0xfffffe59 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-419 /* 0xfffffe5d */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-418 /* 0xfffffe5e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {-417 /* 0xfffffe5f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-416 /* 0xfffffe60 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-415 /* 0xfffffe61 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-413 /* 0xfffffe63 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-412 /* 0xfffffe64 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-411 /* 0xfffffe65 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-409 /* 0xfffffe67 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-408 /* 0xfffffe68 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-407 /* 0xfffffe69 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-405 /* 0xfffffe6b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-404 /* 0xfffffe6c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-403 /* 0xfffffe6d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-401 /* 0xfffffe6f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-400 /* 0xfffffe70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-399 /* 0xfffffe71 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-397 /* 0xfffffe73 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-396 /* 0xfffffe74 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-395 /* 0xfffffe75 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-393 /* 0xfffffe77 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-392 /* 0xfffffe78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-391 /* 0xfffffe79 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-390 /* 0xfffffe7a */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-389 /* 0xfffffe7b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-388 /* 0xfffffe7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-387 /* 0xfffffe7d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* s1a r5, r4, r4 */
+   },
+  {-386 /* 0xfffffe7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-385 /* 0xfffffe7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-384 /* 0xfffffe80 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-383 /* 0xfffffe81 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-382 /* 0xfffffe82 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-381 /* 0xfffffe83 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-380 /* 0xfffffe84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-379 /* 0xfffffe85 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-378 /* 0xfffffe86 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-377 /* 0xfffffe87 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-376 /* 0xfffffe88 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-375 /* 0xfffffe89 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-373 /* 0xfffffe8b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-372 /* 0xfffffe8c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-371 /* 0xfffffe8d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-369 /* 0xfffffe8f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-368 /* 0xfffffe90 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-367 /* 0xfffffe91 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-365 /* 0xfffffe93 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 1, 3},                 /* s3a r4, r1, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-364 /* 0xfffffe94 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-361 /* 0xfffffe97 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-360 /* 0xfffffe98 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-359 /* 0xfffffe99 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-357 /* 0xfffffe9b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-356 /* 0xfffffe9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-355 /* 0xfffffe9d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-353 /* 0xfffffe9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-352 /* 0xfffffea0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {-351 /* 0xfffffea1 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-349 /* 0xfffffea3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-348 /* 0xfffffea4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-347 /* 0xfffffea5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-344 /* 0xfffffea8 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-343 /* 0xfffffea9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-341 /* 0xfffffeab */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-340 /* 0xfffffeac */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-339 /* 0xfffffead */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-337 /* 0xfffffeaf */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-336 /* 0xfffffeb0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-335 /* 0xfffffeb1 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-333 /* 0xfffffeb3 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-332 /* 0xfffffeb4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-331 /* 0xfffffeb5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-330 /* 0xfffffeb6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-329 /* 0xfffffeb7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-328 /* 0xfffffeb8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-327 /* 0xfffffeb9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-325 /* 0xfffffebb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-324 /* 0xfffffebc */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-323 /* 0xfffffebd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-322 /* 0xfffffebe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-321 /* 0xfffffebf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-320 /* 0xfffffec0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {-319 /* 0xfffffec1 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-318 /* 0xfffffec2 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-317 /* 0xfffffec3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-316 /* 0xfffffec4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-315 /* 0xfffffec5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-314 /* 0xfffffec6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-313 /* 0xfffffec7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-312 /* 0xfffffec8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-311 /* 0xfffffec9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-310 /* 0xfffffeca */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-309 /* 0xfffffecb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-307 /* 0xfffffecd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-306 /* 0xfffffece */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-305 /* 0xfffffecf */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-304 /* 0xfffffed0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-303 /* 0xfffffed1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-301 /* 0xfffffed3 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-300 /* 0xfffffed4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-299 /* 0xfffffed5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-297 /* 0xfffffed7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-296 /* 0xfffffed8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-295 /* 0xfffffed9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-293 /* 0xfffffedb */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-292 /* 0xfffffedc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-291 /* 0xfffffedd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-290 /* 0xfffffede */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {-289 /* 0xfffffedf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-288 /* 0xfffffee0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {-287 /* 0xfffffee1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-286 /* 0xfffffee2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-285 /* 0xfffffee3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-284 /* 0xfffffee4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-283 /* 0xfffffee5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-281 /* 0xfffffee7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-280 /* 0xfffffee8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-279 /* 0xfffffee9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-278 /* 0xfffffeea */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-277 /* 0xfffffeeb */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-276 /* 0xfffffeec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-275 /* 0xfffffeed */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-274 /* 0xfffffeee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-273 /* 0xfffffeef */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-272 /* 0xfffffef0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-271 /* 0xfffffef1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-270 /* 0xfffffef2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-269 /* 0xfffffef3 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-268 /* 0xfffffef4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-267 /* 0xfffffef5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-266 /* 0xfffffef6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-265 /* 0xfffffef7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-264 /* 0xfffffef8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-263 /* 0xfffffef9 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-262 /* 0xfffffefa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-261 /* 0xfffffefb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-260 /* 0xfffffefc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-259 /* 0xfffffefd */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-258 /* 0xfffffefe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-257 /* 0xfffffeff */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-256 /* 0xffffff00 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {-255 /* 0xffffff01 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-254 /* 0xffffff02 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-253 /* 0xffffff03 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-252 /* 0xffffff04 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-251 /* 0xffffff05 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-250 /* 0xffffff06 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-249 /* 0xffffff07 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-248 /* 0xffffff08 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-247 /* 0xffffff09 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-246 /* 0xffffff0a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-245 /* 0xffffff0b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-244 /* 0xffffff0c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-243 /* 0xffffff0d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-242 /* 0xffffff0e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-241 /* 0xffffff0f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-240 /* 0xffffff10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-239 /* 0xffffff11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-238 /* 0xffffff12 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-237 /* 0xffffff13 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 1}}                 /* s1a r5, r4, r1 */
+   },
+  {-236 /* 0xffffff14 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-235 /* 0xffffff15 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-234 /* 0xffffff16 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-233 /* 0xffffff17 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-232 /* 0xffffff18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {-231 /* 0xffffff19 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {-230 /* 0xffffff1a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-229 /* 0xffffff1b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-228 /* 0xffffff1c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-227 /* 0xffffff1d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-226 /* 0xffffff1e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-225 /* 0xffffff1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-224 /* 0xffffff20 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-223 /* 0xffffff21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-222 /* 0xffffff22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-221 /* 0xffffff23 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-220 /* 0xffffff24 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-219 /* 0xffffff25 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-218 /* 0xffffff26 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-217 /* 0xffffff27 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-216 /* 0xffffff28 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-215 /* 0xffffff29 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-214 /* 0xffffff2a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-213 /* 0xffffff2b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3},                 /* shli r4, r3, 3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-212 /* 0xffffff2c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-211 /* 0xffffff2d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-210 /* 0xffffff2e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {-209 /* 0xffffff2f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-208 /* 0xffffff30 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-207 /* 0xffffff31 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-205 /* 0xffffff33 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-204 /* 0xffffff34 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-203 /* 0xffffff35 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-202 /* 0xffffff36 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-201 /* 0xffffff37 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-200 /* 0xffffff38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-199 /* 0xffffff39 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-198 /* 0xffffff3a */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-197 /* 0xffffff3b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-196 /* 0xffffff3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-195 /* 0xffffff3d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* s1a r5, r4, r4 */
+   },
+  {-194 /* 0xffffff3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-193 /* 0xffffff3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-192 /* 0xffffff40 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-191 /* 0xffffff41 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-190 /* 0xffffff42 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-189 /* 0xffffff43 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-188 /* 0xffffff44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-187 /* 0xffffff45 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-186 /* 0xffffff46 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-185 /* 0xffffff47 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-184 /* 0xffffff48 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-183 /* 0xffffff49 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-181 /* 0xffffff4b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-180 /* 0xffffff4c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-179 /* 0xffffff4d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-178 /* 0xffffff4e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-177 /* 0xffffff4f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-176 /* 0xffffff50 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {-175 /* 0xffffff51 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-173 /* 0xffffff53 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-172 /* 0xffffff54 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-171 /* 0xffffff55 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-170 /* 0xffffff56 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-169 /* 0xffffff57 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-168 /* 0xffffff58 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-167 /* 0xffffff59 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-165 /* 0xffffff5b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-164 /* 0xffffff5c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-163 /* 0xffffff5d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-162 /* 0xffffff5e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-161 /* 0xffffff5f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-160 /* 0xffffff60 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {-159 /* 0xffffff61 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-158 /* 0xffffff62 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-157 /* 0xffffff63 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-156 /* 0xffffff64 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-155 /* 0xffffff65 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-154 /* 0xffffff66 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-153 /* 0xffffff67 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {-152 /* 0xffffff68 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-151 /* 0xffffff69 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-150 /* 0xffffff6a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-149 /* 0xffffff6b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-148 /* 0xffffff6c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {-147 /* 0xffffff6d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-146 /* 0xffffff6e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-145 /* 0xffffff6f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-144 /* 0xffffff70 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {-143 /* 0xffffff71 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-142 /* 0xffffff72 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-141 /* 0xffffff73 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-140 /* 0xffffff74 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-139 /* 0xffffff75 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-138 /* 0xffffff76 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-137 /* 0xffffff77 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-136 /* 0xffffff78 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {-135 /* 0xffffff79 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-134 /* 0xffffff7a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-133 /* 0xffffff7b */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-132 /* 0xffffff7c */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-131 /* 0xffffff7d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-130 /* 0xffffff7e */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-129 /* 0xffffff7f */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-128 /* 0xffffff80 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {-127 /* 0xffffff81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-126 /* 0xffffff82 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-125 /* 0xffffff83 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-124 /* 0xffffff84 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-123 /* 0xffffff85 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-122 /* 0xffffff86 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-121 /* 0xffffff87 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-120 /* 0xffffff88 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-119 /* 0xffffff89 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-118 /* 0xffffff8a */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-117 /* 0xffffff8b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-116 /* 0xffffff8c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-115 /* 0xffffff8d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-114 /* 0xffffff8e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-113 /* 0xffffff8f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-112 /* 0xffffff90 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-111 /* 0xffffff91 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-110 /* 0xffffff92 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-109 /* 0xffffff93 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-108 /* 0xffffff94 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-107 /* 0xffffff95 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {-106 /* 0xffffff96 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {-105 /* 0xffffff97 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-104 /* 0xffffff98 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-103 /* 0xffffff99 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {-102 /* 0xffffff9a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {-101 /* 0xffffff9b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-100 /* 0xffffff9c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-99 /* 0xffffff9d */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* s1a r5, r4, r4 */
+   },
+  {-98 /* 0xffffff9e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-97 /* 0xffffff9f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-96 /* 0xffffffa0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-95 /* 0xffffffa1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-94 /* 0xffffffa2 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-93 /* 0xffffffa3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-92 /* 0xffffffa4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-91 /* 0xffffffa5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-90 /* 0xffffffa6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-89 /* 0xffffffa7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-88 /* 0xffffffa8 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-87 /* 0xffffffa9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-86 /* 0xffffffaa */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {2, 1, 4}}                 /* sub r5, r1, r4 */
+   },
+  {-85 /* 0xffffffab */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {-84 /* 0xffffffac */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-83 /* 0xffffffad */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-82 /* 0xffffffae */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {-81 /* 0xffffffaf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {-80 /* 0xffffffb0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {-79 /* 0xffffffb1 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-78 /* 0xffffffb2 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-77 /* 0xffffffb3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 2, 4}}                 /* sub r5, r2, r4 */
+   },
+  {-76 /* 0xffffffb4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-75 /* 0xffffffb5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-74 /* 0xffffffb6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-73 /* 0xffffffb7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-72 /* 0xffffffb8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {-71 /* 0xffffffb9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-70 /* 0xffffffba */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-69 /* 0xffffffbb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {-68 /* 0xffffffbc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {-67 /* 0xffffffbd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-66 /* 0xffffffbe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-65 /* 0xffffffbf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-64 /* 0xffffffc0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {-63 /* 0xffffffc1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-62 /* 0xffffffc2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-61 /* 0xffffffc3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-60 /* 0xffffffc4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-59 /* 0xffffffc5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-58 /* 0xffffffc6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {-57 /* 0xffffffc7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-56 /* 0xffffffc8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-55 /* 0xffffffc9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-54 /* 0xffffffca */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-53 /* 0xffffffcb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {-52 /* 0xffffffcc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {-51 /* 0xffffffcd */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {3, 4, 4}}                 /* s1a r5, r4, r4 */
+   },
+  {-50 /* 0xffffffce */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-49 /* 0xffffffcf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-48 /* 0xffffffd0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-47 /* 0xffffffd1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-46 /* 0xffffffd2 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-45 /* 0xffffffd3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-44 /* 0xffffffd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-43 /* 0xffffffd5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {-42 /* 0xffffffd6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-41 /* 0xffffffd7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {-40 /* 0xffffffd8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {-39 /* 0xffffffd9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-38 /* 0xffffffda */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {-37 /* 0xffffffdb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {-36 /* 0xffffffdc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {-35 /* 0xffffffdd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-34 /* 0xffffffde */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {-33 /* 0xffffffdf */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-32 /* 0xffffffe0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {-31 /* 0xffffffe1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-30 /* 0xffffffe2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-29 /* 0xffffffe3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-28 /* 0xffffffe4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-27 /* 0xffffffe5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-26 /* 0xffffffe6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-25 /* 0xffffffe7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-24 /* 0xffffffe8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-23 /* 0xffffffe9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-22 /* 0xffffffea */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-21 /* 0xffffffeb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-20 /* 0xffffffec */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {-19 /* 0xffffffed */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {2, 1, 3}}                 /* sub r4, r1, r3 */
+   },
+  {-18 /* 0xffffffee */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {-17 /* 0xffffffef */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-16 /* 0xfffffff0 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {-15 /* 0xfffffff1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-14 /* 0xfffffff2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-13 /* 0xfffffff3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-12 /* 0xfffffff4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-11 /* 0xfffffff5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-10 /* 0xfffffff6 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-9 /* 0xfffffff7 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 2, 2}}                 /* s3a r3, r2, r2 */
+   },
+  {-8 /* 0xfffffff8 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {-7 /* 0xfffffff9 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-6 /* 0xfffffffa */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 3},                 /* shli r3, r1, 3 */
+    {2, 2, 3}}                 /* sub r4, r2, r3 */
+   },
+  {-5 /* 0xfffffffb */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 2, 2}}                 /* s2a r3, r2, r2 */
+   },
+  {-4 /* 0xfffffffc */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {-3 /* 0xfffffffd */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2}}                 /* sub r3, r1, r2 */
+   },
+  {-2 /* 0xfffffffe */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {-1 /* 0xffffffff */ ,
+   {{2, 0, 1}}                 /* sub r2, zero, r1 */
+   },
+  {2 /* 0x2 */ ,
+   {{6, 1, 1}}                 /* shli r2, r1, 1 */
+   },
+  {3 /* 0x3 */ ,
+   {{3, 1, 1}}                 /* s1a r2, r1, r1 */
+   },
+  {4 /* 0x4 */ ,
+   {{6, 1, 2}}                 /* shli r2, r1, 2 */
+   },
+  {5 /* 0x5 */ ,
+   {{4, 1, 1}}                 /* s2a r2, r1, r1 */
+   },
+  {6 /* 0x6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {7 /* 0x7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8 /* 0x8 */ ,
+   {{6, 1, 3}}                 /* shli r2, r1, 3 */
+   },
+  {9 /* 0x9 */ ,
+   {{5, 1, 1}}                 /* s3a r2, r1, r1 */
+   },
+  {10 /* 0xa */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {11 /* 0xb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1}}                 /* s1a r3, r2, r1 */
+   },
+  {12 /* 0xc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {13 /* 0xd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1}}                 /* s2a r3, r2, r1 */
+   },
+  {14 /* 0xe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {15 /* 0xf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16 /* 0x10 */ ,
+   {{6, 1, 4}}                 /* shli r2, r1, 4 */
+   },
+  {17 /* 0x11 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {18 /* 0x12 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1}}                 /* shli r3, r2, 1 */
+   },
+  {19 /* 0x13 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1}}                 /* s1a r3, r2, r1 */
+   },
+  {20 /* 0x14 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {21 /* 0x15 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1}}                 /* s2a r3, r2, r1 */
+   },
+  {22 /* 0x16 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {23 /* 0x17 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {24 /* 0x18 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {25 /* 0x19 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1}}                 /* s3a r3, r2, r1 */
+   },
+  {26 /* 0x1a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {27 /* 0x1b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2}}                 /* s3a r3, r2, r2 */
+   },
+  {28 /* 0x1c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {29 /* 0x1d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {30 /* 0x1e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {31 /* 0x1f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {32 /* 0x20 */ ,
+   {{6, 1, 5}}                 /* shli r2, r1, 5 */
+   },
+  {33 /* 0x21 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {34 /* 0x22 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {35 /* 0x23 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36 /* 0x24 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 2}}                 /* shli r3, r2, 2 */
+   },
+  {37 /* 0x25 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1}}                 /* s2a r3, r2, r1 */
+   },
+  {38 /* 0x26 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {39 /* 0x27 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {40 /* 0x28 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {41 /* 0x29 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1}}                 /* s3a r3, r2, r1 */
+   },
+  {42 /* 0x2a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {43 /* 0x2b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {44 /* 0x2c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {45 /* 0x2d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2}}                 /* s3a r3, r2, r2 */
+   },
+  {46 /* 0x2e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {47 /* 0x2f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {48 /* 0x30 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {49 /* 0x31 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {50 /* 0x32 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {51 /* 0x33 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {52 /* 0x34 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {53 /* 0x35 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {54 /* 0x36 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {55 /* 0x37 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {56 /* 0x38 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {57 /* 0x39 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {58 /* 0x3a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {59 /* 0x3b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {60 /* 0x3c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {61 /* 0x3d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {62 /* 0x3e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {63 /* 0x3f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {64 /* 0x40 */ ,
+   {{6, 1, 6}}                 /* shli r2, r1, 6 */
+   },
+  {65 /* 0x41 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {66 /* 0x42 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {67 /* 0x43 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68 /* 0x44 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {69 /* 0x45 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {70 /* 0x46 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {71 /* 0x47 */ ,
+   {{2, 0, 1},                 /* sub r2, zero, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {72 /* 0x48 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 3}}                 /* shli r3, r2, 3 */
+   },
+  {73 /* 0x49 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1}}                 /* s3a r3, r2, r1 */
+   },
+  {74 /* 0x4a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {75 /* 0x4b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {76 /* 0x4c */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {77 /* 0x4d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {78 /* 0x4e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {79 /* 0x4f */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {80 /* 0x50 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {81 /* 0x51 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2}}                 /* s3a r3, r2, r2 */
+   },
+  {82 /* 0x52 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {83 /* 0x53 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 1}}                 /* s1a r4, r3, r1 */
+   },
+  {84 /* 0x54 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {85 /* 0x55 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {86 /* 0x56 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {87 /* 0x57 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {88 /* 0x58 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {89 /* 0x59 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {90 /* 0x5a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {91 /* 0x5b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {3, 3, 1}}                 /* s1a r4, r3, r1 */
+   },
+  {92 /* 0x5c */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {93 /* 0x5d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {94 /* 0x5e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {95 /* 0x5f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {96 /* 0x60 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {97 /* 0x61 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {98 /* 0x62 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {99 /* 0x63 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {100 /* 0x64 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {101 /* 0x65 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 1}}                 /* s2a r4, r3, r1 */
+   },
+  {102 /* 0x66 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {103 /* 0x67 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {104 /* 0x68 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {105 /* 0x69 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {106 /* 0x6a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {107 /* 0x6b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {108 /* 0x6c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {109 /* 0x6d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1}}                 /* s2a r4, r3, r1 */
+   },
+  {110 /* 0x6e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {111 /* 0x6f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {112 /* 0x70 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {113 /* 0x71 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {114 /* 0x72 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {115 /* 0x73 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {116 /* 0x74 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {117 /* 0x75 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {118 /* 0x76 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {119 /* 0x77 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {120 /* 0x78 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {121 /* 0x79 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {122 /* 0x7a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {123 /* 0x7b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {124 /* 0x7c */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {125 /* 0x7d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {126 /* 0x7e */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {127 /* 0x7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {128 /* 0x80 */ ,
+   {{6, 1, 7}}                 /* shli r2, r1, 7 */
+   },
+  {129 /* 0x81 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {130 /* 0x82 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {131 /* 0x83 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {132 /* 0x84 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {133 /* 0x85 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134 /* 0x86 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {135 /* 0x87 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {136 /* 0x88 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {137 /* 0x89 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {138 /* 0x8a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {139 /* 0x8b */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {140 /* 0x8c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {141 /* 0x8d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {142 /* 0x8e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {143 /* 0x8f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {144 /* 0x90 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4}}                 /* shli r3, r2, 4 */
+   },
+  {145 /* 0x91 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {146 /* 0x92 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {147 /* 0x93 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 1}}                 /* s1a r4, r3, r1 */
+   },
+  {148 /* 0x94 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {149 /* 0x95 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 1}}                 /* s2a r4, r3, r1 */
+   },
+  {150 /* 0x96 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {151 /* 0x97 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {152 /* 0x98 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {153 /* 0x99 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {154 /* 0x9a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {155 /* 0x9b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {156 /* 0x9c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {157 /* 0x9d */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {158 /* 0x9e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {159 /* 0x9f */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {160 /* 0xa0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {161 /* 0xa1 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {162 /* 0xa2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 1}}                 /* shli r4, r3, 1 */
+   },
+  {163 /* 0xa3 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {3, 3, 1}}                 /* s1a r4, r3, r1 */
+   },
+  {164 /* 0xa4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {165 /* 0xa5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {166 /* 0xa6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {167 /* 0xa7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {168 /* 0xa8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {169 /* 0xa9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {170 /* 0xaa */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {171 /* 0xab */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {172 /* 0xac */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {173 /* 0xad */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {174 /* 0xae */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {175 /* 0xaf */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {176 /* 0xb0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {177 /* 0xb1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {178 /* 0xb2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {179 /* 0xb3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {180 /* 0xb4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 2}}                 /* shli r4, r3, 2 */
+   },
+  {181 /* 0xb5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1}}                 /* s2a r4, r3, r1 */
+   },
+  {182 /* 0xb6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {183 /* 0xb7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {184 /* 0xb8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {185 /* 0xb9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {186 /* 0xba */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {187 /* 0xbb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {188 /* 0xbc */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {189 /* 0xbd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {190 /* 0xbe */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {191 /* 0xbf */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {192 /* 0xc0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {193 /* 0xc1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {194 /* 0xc2 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {195 /* 0xc3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {196 /* 0xc4 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {197 /* 0xc5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {198 /* 0xc6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {199 /* 0xc7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {200 /* 0xc8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {201 /* 0xc9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {202 /* 0xca */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {203 /* 0xcb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {204 /* 0xcc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {205 /* 0xcd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {206 /* 0xce */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {207 /* 0xcf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {208 /* 0xd0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {209 /* 0xd1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {210 /* 0xd2 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {211 /* 0xd3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {212 /* 0xd4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {213 /* 0xd5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {214 /* 0xd6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {215 /* 0xd7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {216 /* 0xd8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {217 /* 0xd9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {218 /* 0xda */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {219 /* 0xdb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {220 /* 0xdc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {221 /* 0xdd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {222 /* 0xde */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {223 /* 0xdf */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {224 /* 0xe0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {225 /* 0xe1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {226 /* 0xe2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {227 /* 0xe3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {228 /* 0xe4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {229 /* 0xe5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {230 /* 0xe6 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {231 /* 0xe7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 8},                 /* shli r4, r1, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {232 /* 0xe8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {233 /* 0xe9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {234 /* 0xea */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {235 /* 0xeb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {236 /* 0xec */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {237 /* 0xed */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {238 /* 0xee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {239 /* 0xef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {240 /* 0xf0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {241 /* 0xf1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {242 /* 0xf2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {243 /* 0xf3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {244 /* 0xf4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {245 /* 0xf5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {246 /* 0xf6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {247 /* 0xf7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {248 /* 0xf8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {249 /* 0xf9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {250 /* 0xfa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {251 /* 0xfb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {252 /* 0xfc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {253 /* 0xfd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {254 /* 0xfe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {255 /* 0xff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {256 /* 0x100 */ ,
+   {{6, 1, 8}}                 /* shli r2, r1, 8 */
+   },
+  {257 /* 0x101 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {258 /* 0x102 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {259 /* 0x103 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {260 /* 0x104 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {261 /* 0x105 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262 /* 0x106 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {263 /* 0x107 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {264 /* 0x108 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {265 /* 0x109 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {266 /* 0x10a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {267 /* 0x10b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {268 /* 0x10c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {269 /* 0x10d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {270 /* 0x10e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {271 /* 0x10f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {272 /* 0x110 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {273 /* 0x111 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {274 /* 0x112 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {275 /* 0x113 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {276 /* 0x114 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {277 /* 0x115 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {278 /* 0x116 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {279 /* 0x117 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {280 /* 0x118 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {281 /* 0x119 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {282 /* 0x11a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {283 /* 0x11b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {284 /* 0x11c */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {285 /* 0x11d */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {286 /* 0x11e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {287 /* 0x11f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {288 /* 0x120 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5}}                 /* shli r3, r2, 5 */
+   },
+  {289 /* 0x121 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {290 /* 0x122 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {291 /* 0x123 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {292 /* 0x124 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {293 /* 0x125 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 1}}                 /* s2a r4, r3, r1 */
+   },
+  {294 /* 0x126 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {295 /* 0x127 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {296 /* 0x128 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {297 /* 0x129 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {298 /* 0x12a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {299 /* 0x12b */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {300 /* 0x12c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {301 /* 0x12d */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {302 /* 0x12e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {303 /* 0x12f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {304 /* 0x130 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {305 /* 0x131 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {306 /* 0x132 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {307 /* 0x133 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {308 /* 0x134 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {309 /* 0x135 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {310 /* 0x136 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {311 /* 0x137 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {312 /* 0x138 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {313 /* 0x139 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {314 /* 0x13a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {315 /* 0x13b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {316 /* 0x13c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {317 /* 0x13d */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {318 /* 0x13e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {319 /* 0x13f */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {320 /* 0x140 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {321 /* 0x141 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {322 /* 0x142 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {323 /* 0x143 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {324 /* 0x144 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {325 /* 0x145 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {326 /* 0x146 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {327 /* 0x147 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {328 /* 0x148 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {329 /* 0x149 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {330 /* 0x14a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {331 /* 0x14b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {332 /* 0x14c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {333 /* 0x14d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {334 /* 0x14e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {335 /* 0x14f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {336 /* 0x150 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {337 /* 0x151 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {338 /* 0x152 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {339 /* 0x153 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {340 /* 0x154 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {341 /* 0x155 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {342 /* 0x156 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {343 /* 0x157 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {344 /* 0x158 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {345 /* 0x159 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {346 /* 0x15a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {347 /* 0x15b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {348 /* 0x15c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 2},                 /* shli r4, r2, 2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {349 /* 0x15d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {350 /* 0x15e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {351 /* 0x15f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {352 /* 0x160 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {353 /* 0x161 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {354 /* 0x162 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {355 /* 0x163 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {356 /* 0x164 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {357 /* 0x165 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {358 /* 0x166 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {359 /* 0x167 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {360 /* 0x168 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {361 /* 0x169 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {362 /* 0x16a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 1},                 /* shli r4, r1, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {363 /* 0x16b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {364 /* 0x16c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 2},                 /* shli r4, r1, 2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {365 /* 0x16d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {366 /* 0x16e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {367 /* 0x16f */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {368 /* 0x170 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {369 /* 0x171 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {370 /* 0x172 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {371 /* 0x173 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {372 /* 0x174 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {373 /* 0x175 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {374 /* 0x176 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {375 /* 0x177 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {376 /* 0x178 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {377 /* 0x179 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {378 /* 0x17a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {379 /* 0x17b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {380 /* 0x17c */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {381 /* 0x17d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {382 /* 0x17e */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {383 /* 0x17f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {384 /* 0x180 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {385 /* 0x181 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {386 /* 0x182 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {387 /* 0x183 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {388 /* 0x184 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {389 /* 0x185 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {390 /* 0x186 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {391 /* 0x187 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {392 /* 0x188 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {393 /* 0x189 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {394 /* 0x18a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {395 /* 0x18b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {396 /* 0x18c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {397 /* 0x18d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {398 /* 0x18e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {399 /* 0x18f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {400 /* 0x190 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {401 /* 0x191 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {402 /* 0x192 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {403 /* 0x193 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {404 /* 0x194 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {405 /* 0x195 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {406 /* 0x196 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {407 /* 0x197 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {408 /* 0x198 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {409 /* 0x199 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {410 /* 0x19a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {411 /* 0x19b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {412 /* 0x19c */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {413 /* 0x19d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {414 /* 0x19e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {415 /* 0x19f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {416 /* 0x1a0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {417 /* 0x1a1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {418 /* 0x1a2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {419 /* 0x1a3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {420 /* 0x1a4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {421 /* 0x1a5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {422 /* 0x1a6 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {423 /* 0x1a7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {424 /* 0x1a8 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {425 /* 0x1a9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {426 /* 0x1aa */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {427 /* 0x1ab */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {428 /* 0x1ac */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {429 /* 0x1ad */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {430 /* 0x1ae */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {431 /* 0x1af */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {432 /* 0x1b0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {433 /* 0x1b1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {434 /* 0x1b2 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {435 /* 0x1b3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {436 /* 0x1b4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {437 /* 0x1b5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {438 /* 0x1b6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {439 /* 0x1b7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {440 /* 0x1b8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {441 /* 0x1b9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {442 /* 0x1ba */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {443 /* 0x1bb */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {444 /* 0x1bc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {445 /* 0x1bd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {446 /* 0x1be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {447 /* 0x1bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {448 /* 0x1c0 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {449 /* 0x1c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {450 /* 0x1c2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {451 /* 0x1c3 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {452 /* 0x1c4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {453 /* 0x1c5 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {454 /* 0x1c6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {455 /* 0x1c7 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {456 /* 0x1c8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {457 /* 0x1c9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {458 /* 0x1ca */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {459 /* 0x1cb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {460 /* 0x1cc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {461 /* 0x1cd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {462 /* 0x1ce */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {463 /* 0x1cf */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {464 /* 0x1d0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {465 /* 0x1d1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {467 /* 0x1d3 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {468 /* 0x1d4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {469 /* 0x1d5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {470 /* 0x1d6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {471 /* 0x1d7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {472 /* 0x1d8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {473 /* 0x1d9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {475 /* 0x1db */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {476 /* 0x1dc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {477 /* 0x1dd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {478 /* 0x1de */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {479 /* 0x1df */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {480 /* 0x1e0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {481 /* 0x1e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {482 /* 0x1e2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {483 /* 0x1e3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {484 /* 0x1e4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {485 /* 0x1e5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {486 /* 0x1e6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {487 /* 0x1e7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {488 /* 0x1e8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {489 /* 0x1e9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {490 /* 0x1ea */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {491 /* 0x1eb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {492 /* 0x1ec */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {493 /* 0x1ed */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {494 /* 0x1ee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {495 /* 0x1ef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {496 /* 0x1f0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {497 /* 0x1f1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {498 /* 0x1f2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {499 /* 0x1f3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 9},                 /* shli r4, r1, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {500 /* 0x1f4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {501 /* 0x1f5 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {502 /* 0x1f6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {503 /* 0x1f7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {504 /* 0x1f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {505 /* 0x1f9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {506 /* 0x1fa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {507 /* 0x1fb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {508 /* 0x1fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {509 /* 0x1fd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {510 /* 0x1fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {511 /* 0x1ff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {512 /* 0x200 */ ,
+   {{6, 1, 9}}                 /* shli r2, r1, 9 */
+   },
+  {513 /* 0x201 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {514 /* 0x202 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {515 /* 0x203 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {516 /* 0x204 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {517 /* 0x205 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {518 /* 0x206 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {519 /* 0x207 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {520 /* 0x208 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {521 /* 0x209 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {522 /* 0x20a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {523 /* 0x20b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {524 /* 0x20c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {525 /* 0x20d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {526 /* 0x20e */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {527 /* 0x20f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {528 /* 0x210 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {529 /* 0x211 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {530 /* 0x212 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {531 /* 0x213 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {532 /* 0x214 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {533 /* 0x215 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {534 /* 0x216 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {535 /* 0x217 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {536 /* 0x218 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {537 /* 0x219 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {538 /* 0x21a */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {539 /* 0x21b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {540 /* 0x21c */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {541 /* 0x21d */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {542 /* 0x21e */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {543 /* 0x21f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {544 /* 0x220 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {545 /* 0x221 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {546 /* 0x222 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {547 /* 0x223 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {548 /* 0x224 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {549 /* 0x225 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {550 /* 0x226 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {551 /* 0x227 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {552 /* 0x228 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {553 /* 0x229 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {554 /* 0x22a */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {555 /* 0x22b */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {556 /* 0x22c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {557 /* 0x22d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {558 /* 0x22e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {559 /* 0x22f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {560 /* 0x230 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {561 /* 0x231 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {562 /* 0x232 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {563 /* 0x233 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {564 /* 0x234 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {565 /* 0x235 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {566 /* 0x236 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {567 /* 0x237 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {568 /* 0x238 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {569 /* 0x239 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {570 /* 0x23a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {571 /* 0x23b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {572 /* 0x23c */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {573 /* 0x23d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {574 /* 0x23e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {575 /* 0x23f */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {576 /* 0x240 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6}}                 /* shli r3, r2, 6 */
+   },
+  {577 /* 0x241 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {578 /* 0x242 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {579 /* 0x243 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {580 /* 0x244 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {581 /* 0x245 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {582 /* 0x246 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {583 /* 0x247 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {584 /* 0x248 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {585 /* 0x249 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {586 /* 0x24a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {587 /* 0x24b */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {588 /* 0x24c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {589 /* 0x24d */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {590 /* 0x24e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {591 /* 0x24f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {592 /* 0x250 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {593 /* 0x251 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {594 /* 0x252 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {595 /* 0x253 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {596 /* 0x254 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {597 /* 0x255 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {598 /* 0x256 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {599 /* 0x257 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {600 /* 0x258 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {601 /* 0x259 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {602 /* 0x25a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {603 /* 0x25b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {604 /* 0x25c */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {605 /* 0x25d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {606 /* 0x25e */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {607 /* 0x25f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {608 /* 0x260 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {609 /* 0x261 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {610 /* 0x262 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {611 /* 0x263 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {612 /* 0x264 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {613 /* 0x265 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {614 /* 0x266 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {615 /* 0x267 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {616 /* 0x268 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {617 /* 0x269 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 2},                 /* shli r3, r1, 2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {619 /* 0x26b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {620 /* 0x26c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {621 /* 0x26d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {623 /* 0x26f */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {624 /* 0x270 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {625 /* 0x271 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {626 /* 0x272 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {627 /* 0x273 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {628 /* 0x274 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {629 /* 0x275 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {630 /* 0x276 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {631 /* 0x277 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {632 /* 0x278 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {633 /* 0x279 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {634 /* 0x27a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {635 /* 0x27b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {636 /* 0x27c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {637 /* 0x27d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {638 /* 0x27e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 1},                 /* shli r3, r1, 1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {639 /* 0x27f */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {640 /* 0x280 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {641 /* 0x281 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {642 /* 0x282 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {643 /* 0x283 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {644 /* 0x284 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {645 /* 0x285 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {646 /* 0x286 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {647 /* 0x287 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {648 /* 0x288 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 3}}                 /* shli r4, r3, 3 */
+   },
+  {649 /* 0x289 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {650 /* 0x28a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {651 /* 0x28b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {652 /* 0x28c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {653 /* 0x28d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {654 /* 0x28e */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {655 /* 0x28f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {656 /* 0x290 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {657 /* 0x291 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {658 /* 0x292 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {659 /* 0x293 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {660 /* 0x294 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {661 /* 0x295 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {662 /* 0x296 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {663 /* 0x297 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {664 /* 0x298 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {665 /* 0x299 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {666 /* 0x29a */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 1},                 /* shli r4, r2, 1 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {667 /* 0x29b */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {668 /* 0x29c */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {669 /* 0x29d */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 1},                 /* s1a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {670 /* 0x29e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {671 /* 0x29f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {672 /* 0x2a0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {673 /* 0x2a1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {674 /* 0x2a2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {675 /* 0x2a3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {676 /* 0x2a4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {677 /* 0x2a5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {679 /* 0x2a7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 2, 4}}                 /* s3a r5, r2, r4 */
+   },
+  {680 /* 0x2a8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {681 /* 0x2a9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {682 /* 0x2aa */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {684 /* 0x2ac */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 2},                 /* shli r4, r2, 2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {685 /* 0x2ad */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {688 /* 0x2b0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 1, 1},                 /* s2a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {689 /* 0x2b1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {690 /* 0x2b2 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {692 /* 0x2b4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {693 /* 0x2b5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 1},                 /* s3a r3, r1, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {694 /* 0x2b6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {695 /* 0x2b7 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {696 /* 0x2b8 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {697 /* 0x2b9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {699 /* 0x2bb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {700 /* 0x2bc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {701 /* 0x2bd */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {702 /* 0x2be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {703 /* 0x2bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {704 /* 0x2c0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {705 /* 0x2c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {706 /* 0x2c2 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {707 /* 0x2c3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {708 /* 0x2c4 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {709 /* 0x2c5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {710 /* 0x2c6 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {711 /* 0x2c7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {712 /* 0x2c8 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {713 /* 0x2c9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 4},                 /* shli r3, r1, 4 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {714 /* 0x2ca */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {715 /* 0x2cb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {716 /* 0x2cc */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {717 /* 0x2cd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {719 /* 0x2cf */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {2, 4, 1}}                 /* sub r5, r4, r1 */
+   },
+  {720 /* 0x2d0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4}}                 /* shli r4, r3, 4 */
+   },
+  {721 /* 0x2d1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {722 /* 0x2d2 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {723 /* 0x2d3 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {724 /* 0x2d4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {725 /* 0x2d5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 4},                 /* shli r4, r3, 4 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {726 /* 0x2d6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {727 /* 0x2d7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {728 /* 0x2d8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {729 /* 0x2d9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3}}                 /* s3a r4, r3, r3 */
+   },
+  {730 /* 0x2da */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {731 /* 0x2db */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 1}}                 /* s1a r5, r4, r1 */
+   },
+  {733 /* 0x2dd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {735 /* 0x2df */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {736 /* 0x2e0 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {737 /* 0x2e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {738 /* 0x2e2 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {739 /* 0x2e3 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {740 /* 0x2e4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {741 /* 0x2e5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {743 /* 0x2e7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {744 /* 0x2e8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {745 /* 0x2e9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {747 /* 0x2eb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {748 /* 0x2ec */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {749 /* 0x2ed */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {750 /* 0x2ee */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {752 /* 0x2f0 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {753 /* 0x2f1 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {755 /* 0x2f3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {756 /* 0x2f4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 2},                 /* shli r3, r2, 2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {757 /* 0x2f5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {758 /* 0x2f6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {759 /* 0x2f7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {760 /* 0x2f8 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {761 /* 0x2f9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {762 /* 0x2fa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 1},                 /* shli r3, r2, 1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {763 /* 0x2fb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {764 /* 0x2fc */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {765 /* 0x2fd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {766 /* 0x2fe */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {767 /* 0x2ff */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {768 /* 0x300 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {769 /* 0x301 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {770 /* 0x302 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {771 /* 0x303 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {772 /* 0x304 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {773 /* 0x305 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {774 /* 0x306 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {775 /* 0x307 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {776 /* 0x308 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {777 /* 0x309 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {778 /* 0x30a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {779 /* 0x30b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {780 /* 0x30c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {781 /* 0x30d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {782 /* 0x30e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {783 /* 0x30f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {784 /* 0x310 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {3, 3, 2}}                 /* s1a r4, r3, r2 */
+   },
+  {785 /* 0x311 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 1, 2},                 /* s3a r4, r1, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {786 /* 0x312 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {787 /* 0x313 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {3, 1, 3},                 /* s1a r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {788 /* 0x314 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {789 /* 0x315 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 2, 4}}                 /* s3a r5, r2, r4 */
+   },
+  {790 /* 0x316 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {791 /* 0x317 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {792 /* 0x318 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {793 /* 0x319 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {794 /* 0x31a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {795 /* 0x31b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {796 /* 0x31c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {797 /* 0x31d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {798 /* 0x31e */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {799 /* 0x31f */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {800 /* 0x320 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {801 /* 0x321 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {802 /* 0x322 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {803 /* 0x323 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {804 /* 0x324 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {805 /* 0x325 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {806 /* 0x326 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {807 /* 0x327 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {808 /* 0x328 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {809 /* 0x329 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {810 /* 0x32a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {811 /* 0x32b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {812 /* 0x32c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {813 /* 0x32d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {815 /* 0x32f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {816 /* 0x330 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {817 /* 0x331 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {818 /* 0x332 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {819 /* 0x333 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {820 /* 0x334 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {821 /* 0x335 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {822 /* 0x336 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {823 /* 0x337 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {824 /* 0x338 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {825 /* 0x339 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {827 /* 0x33b */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {828 /* 0x33c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {829 /* 0x33d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {831 /* 0x33f */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {832 /* 0x340 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {833 /* 0x341 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {834 /* 0x342 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 2},                 /* s1a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {835 /* 0x343 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {836 /* 0x344 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 2},                 /* s3a r4, r2, r2 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {837 /* 0x345 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {838 /* 0x346 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {840 /* 0x348 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {841 /* 0x349 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {842 /* 0x34a */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {843 /* 0x34b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {844 /* 0x34c */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {845 /* 0x34d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {846 /* 0x34e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {848 /* 0x350 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {849 /* 0x351 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {850 /* 0x352 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {852 /* 0x354 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {853 /* 0x355 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {855 /* 0x357 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {856 /* 0x358 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {857 /* 0x359 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {858 /* 0x35a */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {859 /* 0x35b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {861 /* 0x35d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {862 /* 0x35e */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {863 /* 0x35f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 1}}                 /* sub r5, r4, r1 */
+   },
+  {864 /* 0x360 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {865 /* 0x361 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 1, 4}}                 /* add r5, r1, r4 */
+   },
+  {866 /* 0x362 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {867 /* 0x363 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 2, 4}}                 /* add r5, r2, r4 */
+   },
+  {868 /* 0x364 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {869 /* 0x365 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {870 /* 0x366 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {871 /* 0x367 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {872 /* 0x368 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {873 /* 0x369 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {875 /* 0x36b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {876 /* 0x36c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {877 /* 0x36d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {879 /* 0x36f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {880 /* 0x370 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {881 /* 0x371 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 2},                 /* s1a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {882 /* 0x372 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {884 /* 0x374 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {885 /* 0x375 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {888 /* 0x378 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {889 /* 0x379 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {2, 2, 1},                 /* sub r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {890 /* 0x37a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {891 /* 0x37b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {892 /* 0x37c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {893 /* 0x37d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {894 /* 0x37e */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {895 /* 0x37f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {896 /* 0x380 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {897 /* 0x381 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {898 /* 0x382 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {899 /* 0x383 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {900 /* 0x384 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {901 /* 0x385 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {902 /* 0x386 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {903 /* 0x387 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {904 /* 0x388 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {905 /* 0x389 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {2, 1, 2},                 /* sub r4, r1, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {906 /* 0x38a */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {908 /* 0x38c */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {909 /* 0x38d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {910 /* 0x38e */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {911 /* 0x38f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {912 /* 0x390 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {913 /* 0x391 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 1, 2},                 /* s1a r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {915 /* 0x393 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {916 /* 0x394 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {917 /* 0x395 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {918 /* 0x396 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {919 /* 0x397 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {920 /* 0x398 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {924 /* 0x39c */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {925 /* 0x39d */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {2, 1, 3},                 /* sub r4, r1, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {927 /* 0x39f */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {928 /* 0x3a0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {929 /* 0x3a1 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 1, 2},                 /* s2a r4, r1, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {932 /* 0x3a4 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {935 /* 0x3a7 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {936 /* 0x3a8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {937 /* 0x3a9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {939 /* 0x3ab */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {941 /* 0x3ad */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {943 /* 0x3af */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {944 /* 0x3b0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {945 /* 0x3b1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 3, 4}}                 /* sub r5, r3, r4 */
+   },
+  {948 /* 0x3b4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {949 /* 0x3b5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {950 /* 0x3b6 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {951 /* 0x3b7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {952 /* 0x3b8 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {953 /* 0x3b9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {955 /* 0x3bb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {4, 4, 4}}                 /* s2a r5, r4, r4 */
+   },
+  {956 /* 0x3bc */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {957 /* 0x3bd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {958 /* 0x3be */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {959 /* 0x3bf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {960 /* 0x3c0 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {961 /* 0x3c1 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {962 /* 0x3c2 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {963 /* 0x3c3 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {964 /* 0x3c4 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {965 /* 0x3c5 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {966 /* 0x3c6 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {967 /* 0x3c7 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {968 /* 0x3c8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {969 /* 0x3c9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {3, 2, 1},                 /* s1a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {970 /* 0x3ca */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {971 /* 0x3cb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {972 /* 0x3cc */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {973 /* 0x3cd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {975 /* 0x3cf */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {6, 3, 6},                 /* shli r4, r3, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {976 /* 0x3d0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {979 /* 0x3d3 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {980 /* 0x3d4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {981 /* 0x3d5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {983 /* 0x3d7 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {984 /* 0x3d8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {985 /* 0x3d9 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {987 /* 0x3db */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {988 /* 0x3dc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {989 /* 0x3dd */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {990 /* 0x3de */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {991 /* 0x3df */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {992 /* 0x3e0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {993 /* 0x3e1 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {994 /* 0x3e2 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {996 /* 0x3e4 */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {997 /* 0x3e5 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {999 /* 0x3e7 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1000 /* 0x3e8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {1001 /* 0x3e9 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {4, 2, 1},                 /* s2a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {1003 /* 0x3eb */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {1004 /* 0x3ec */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {1005 /* 0x3ed */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {1006 /* 0x3ee */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1007 /* 0x3ef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1008 /* 0x3f0 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1009 /* 0x3f1 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {1010 /* 0x3f2 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {1011 /* 0x3f3 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 10},                        /* shli r4, r1, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1012 /* 0x3f4 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 2}}                 /* shli r5, r4, 2 */
+   },
+  {1013 /* 0x3f5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {1014 /* 0x3f6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1015 /* 0x3f7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1016 /* 0x3f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1017 /* 0x3f9 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {1018 /* 0x3fa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {1019 /* 0x3fb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1020 /* 0x3fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1021 /* 0x3fd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1022 /* 0x3fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1023 /* 0x3ff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1024 /* 0x400 */ ,
+   {{6, 1, 10}}                        /* shli r2, r1, 10 */
+   },
+  {1025 /* 0x401 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1026 /* 0x402 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {1027 /* 0x403 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1028 /* 0x404 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {1029 /* 0x405 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1030 /* 0x406 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1031 /* 0x407 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {1032 /* 0x408 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {1033 /* 0x409 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1034 /* 0x40a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1040 /* 0x410 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1049 /* 0x419 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {1056 /* 0x420 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1059 /* 0x423 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 2, 1},                 /* s3a r4, r2, r1 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1088 /* 0x440 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1100 /* 0x44c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1104 /* 0x450 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {1108 /* 0x454 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1136 /* 0x470 */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {1152 /* 0x480 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 7}}                 /* shli r3, r2, 7 */
+   },
+  {1200 /* 0x4b0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1204 /* 0x4b4 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {1242 /* 0x4da */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {1280 /* 0x500 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {1292 /* 0x50c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1304 /* 0x518 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {1312 /* 0x520 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {1320 /* 0x528 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {1336 /* 0x538 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {1344 /* 0x540 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {1348 /* 0x544 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1360 /* 0x550 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {1364 /* 0x554 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {1395 /* 0x573 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5},                 /* shli r4, r3, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1448 /* 0x5a8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {1460 /* 0x5b4 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {1461 /* 0x5b5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {1472 /* 0x5c0 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 5},                 /* shli r3, r1, 5 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {1488 /* 0x5d0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1512 /* 0x5e8 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 3},                 /* shli r3, r2, 3 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1536 /* 0x600 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {1568 /* 0x620 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {1576 /* 0x628 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {1649 /* 0x671 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {1664 /* 0x680 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {1684 /* 0x694 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 2, 3},                 /* s1a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {1696 /* 0x6a0 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 2, 2},                 /* s2a r4, r2, r2 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {1744 /* 0x6d0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {1812 /* 0x714 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {2000 /* 0x7d0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {2012 /* 0x7dc */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2014 /* 0x7de */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2037 /* 0x7f5 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {4, 4, 1}}                 /* s2a r5, r4, r1 */
+   },
+  {2038 /* 0x7f6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2039 /* 0x7f7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2040 /* 0x7f8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2041 /* 0x7f9 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {2042 /* 0x7fa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {2043 /* 0x7fb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2044 /* 0x7fc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2045 /* 0x7fd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2046 /* 0x7fe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2047 /* 0x7ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2048 /* 0x800 */ ,
+   {{6, 1, 11}}                        /* shli r2, r1, 11 */
+   },
+  {2049 /* 0x801 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2050 /* 0x802 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {2051 /* 0x803 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2052 /* 0x804 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {2053 /* 0x805 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2054 /* 0x806 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {2055 /* 0x807 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {2056 /* 0x808 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {2057 /* 0x809 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2058 /* 0x80a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {2064 /* 0x810 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2080 /* 0x820 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2100 /* 0x834 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 1, 11},                        /* shli r4, r1, 11 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {2112 /* 0x840 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2144 /* 0x860 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {2176 /* 0x880 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2184 /* 0x888 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {2304 /* 0x900 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 8}}                 /* shli r3, r2, 8 */
+   },
+  {2320 /* 0x910 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {5, 3, 2}}                 /* s3a r4, r3, r2 */
+   },
+  {2408 /* 0x968 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {2560 /* 0xa00 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {2578 /* 0xa12 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {2592 /* 0xa20 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 5}}                 /* shli r4, r3, 5 */
+   },
+  {2633 /* 0xa49 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {2704 /* 0xa90 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {2730 /* 0xaaa */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 5},                 /* shli r3, r2, 5 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {2880 /* 0xb40 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 6}}                 /* shli r4, r3, 6 */
+   },
+  {2896 /* 0xb50 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {3072 /* 0xc00 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {3079 /* 0xc07 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {3112 /* 0xc28 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {3192 /* 0xc78 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 2},                 /* s2a r3, r2, r2 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {3240 /* 0xca8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {6, 4, 3}}                 /* shli r5, r4, 3 */
+   },
+  {3264 /* 0xcc0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {3328 /* 0xd00 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {3453 /* 0xd7d */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {3529 /* 0xdc9 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3},                 /* s3a r4, r2, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {3580 /* 0xdfc */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {3600 /* 0xe10 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 2, 3},                 /* sub r4, r2, r3 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {3624 /* 0xe28 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {4000 /* 0xfa0 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 5}}                 /* shli r5, r4, 5 */
+   },
+  {4025 /* 0xfb9 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {4073 /* 0xfe9 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 4, 1}}                 /* s3a r5, r4, r1 */
+   },
+  {4086 /* 0xff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {4087 /* 0xff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4088 /* 0xff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4089 /* 0xff9 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {4090 /* 0xffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 11},                        /* shli r3, r1, 11 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {4091 /* 0xffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4092 /* 0xffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4093 /* 0xffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4094 /* 0xffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4095 /* 0xfff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4096 /* 0x1000 */ ,
+   {{6, 1, 12}}                        /* shli r2, r1, 12 */
+   },
+  {4097 /* 0x1001 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4098 /* 0x1002 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {4099 /* 0x1003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4100 /* 0x1004 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {4101 /* 0x1005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4102 /* 0x1006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {4103 /* 0x1007 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {4104 /* 0x1008 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {4105 /* 0x1009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4106 /* 0x100a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {4108 /* 0x100c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {4112 /* 0x1010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4128 /* 0x1020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4160 /* 0x1040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4184 /* 0x1058 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {4224 /* 0x1080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4352 /* 0x1100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4369 /* 0x1111 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {4376 /* 0x1118 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {4416 /* 0x1140 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {1, 2, 3},                 /* add r4, r2, r3 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {4433 /* 0x1151 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {4482 /* 0x1182 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {5, 3, 1},                 /* s3a r4, r3, r1 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {4608 /* 0x1200 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 9}}                 /* shli r3, r2, 9 */
+   },
+  {4712 /* 0x1268 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {5, 3, 4}}                 /* s3a r5, r3, r4 */
+   },
+  {4864 /* 0x1300 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {3, 2, 1},                 /* s1a r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {5000 /* 0x1388 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {5040 /* 0x13b0 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 4},                 /* shli r3, r2, 4 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {5120 /* 0x1400 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {5243 /* 0x147b */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 7},                 /* shli r4, r3, 7 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {5285 /* 0x14a5 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 7},                 /* shli r3, r2, 7 */
+    {4, 2, 3},                 /* s2a r4, r2, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {5329 /* 0x14d1 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {6144 /* 0x1800 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {6164 /* 0x1814 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 11},                        /* shli r4, r2, 11 */
+    {4, 3, 4}}                 /* s2a r5, r3, r4 */
+   },
+  {6400 /* 0x1900 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 8}}                 /* shli r4, r3, 8 */
+   },
+  {6406 /* 0x1906 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {3, 3, 3},                 /* s1a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {6656 /* 0x1a00 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {4, 2, 1},                 /* s2a r3, r2, r1 */
+    {6, 3, 9}}                 /* shli r4, r3, 9 */
+   },
+  {7040 /* 0x1b80 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 6},                 /* shli r3, r1, 6 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 7}}                 /* shli r5, r4, 7 */
+   },
+  {7169 /* 0x1c01 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {5, 2, 3}}                 /* s3a r4, r2, r3 */
+   },
+  {7678 /* 0x1dfe */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {7682 /* 0x1e02 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 1, 2},                 /* sub r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {3, 3, 4}}                 /* s1a r5, r3, r4 */
+   },
+  {8000 /* 0x1f40 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 6}}                 /* shli r5, r4, 6 */
+   },
+  {8048 /* 0x1f70 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 4}}                 /* shli r5, r4, 4 */
+   },
+  {8182 /* 0x1ff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {8183 /* 0x1ff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8184 /* 0x1ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8185 /* 0x1ff9 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {8186 /* 0x1ffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 12},                        /* shli r3, r1, 12 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {8187 /* 0x1ffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8188 /* 0x1ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8189 /* 0x1ffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8190 /* 0x1ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8191 /* 0x1fff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8192 /* 0x2000 */ ,
+   {{6, 1, 13}}                        /* shli r2, r1, 13 */
+   },
+  {8193 /* 0x2001 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8194 /* 0x2002 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {8195 /* 0x2003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8196 /* 0x2004 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {8197 /* 0x2005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8198 /* 0x2006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {8199 /* 0x2007 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {8200 /* 0x2008 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {8201 /* 0x2009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8202 /* 0x200a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {8203 /* 0x200b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 10},                        /* shli r3, r1, 10 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {8204 /* 0x200c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {4, 2, 3}}                 /* s2a r4, r2, r3 */
+   },
+  {8208 /* 0x2010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8224 /* 0x2020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8256 /* 0x2040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8320 /* 0x2080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8448 /* 0x2100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8520 /* 0x2148 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 8},                 /* shli r3, r1, 8 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {8640 /* 0x21c0 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {8672 /* 0x21e0 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 3, 8},                 /* shli r4, r3, 8 */
+    {2, 4, 2}}                 /* sub r5, r4, r2 */
+   },
+  {8704 /* 0x2200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8716 /* 0x220c */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {4, 3, 2},                 /* s2a r4, r3, r2 */
+    {4, 4, 3}}                 /* s2a r5, r4, r3 */
+   },
+  {8728 /* 0x2218 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 9},                 /* shli r3, r1, 9 */
+    {3, 3, 2},                 /* s1a r4, r3, r2 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {9216 /* 0x2400 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 10}}                        /* shli r3, r2, 10 */
+   },
+  {9217 /* 0x2401 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 10},                        /* shli r3, r2, 10 */
+    {1, 1, 3}}                 /* add r4, r1, r3 */
+   },
+  {9746 /* 0x2612 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {5, 3, 3},                 /* s3a r4, r3, r3 */
+    {3, 4, 2}}                 /* s1a r5, r4, r2 */
+   },
+  {9810 /* 0x2652 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 6},                 /* shli r3, r2, 6 */
+    {5, 3, 2},                 /* s3a r4, r3, r2 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {10240 /* 0x2800 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {10248 /* 0x2808 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {4, 3, 2}}                 /* s2a r4, r3, r2 */
+   },
+  {10368 /* 0x2880 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 7}}                 /* shli r4, r3, 7 */
+   },
+  {10456 /* 0x28d8 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {5, 4, 2}}                 /* s3a r5, r4, r2 */
+   },
+  {10832 /* 0x2a50 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {4, 1, 2},                 /* s2a r3, r1, r2 */
+    {4, 3, 3},                 /* s2a r4, r3, r3 */
+    {4, 4, 2}}                 /* s2a r5, r4, r2 */
+   },
+  {11512 /* 0x2cf8 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {2, 3, 1},                 /* sub r4, r3, r1 */
+    {5, 4, 3}}                 /* s3a r5, r4, r3 */
+   },
+  {11522 /* 0x2d02 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {4, 3, 1},                 /* s2a r4, r3, r1 */
+    {3, 4, 3}}                 /* s1a r5, r4, r3 */
+   },
+  {11529 /* 0x2d09 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 8},                 /* shli r3, r2, 8 */
+    {1, 1, 3},                 /* add r4, r1, r3 */
+    {5, 4, 4}}                 /* s3a r5, r4, r4 */
+   },
+  {12288 /* 0x3000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {12299 /* 0x300b */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 1, 2},                 /* s3a r3, r1, r2 */
+    {6, 2, 12},                        /* shli r4, r2, 12 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {16000 /* 0x3e80 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 7},                 /* shli r3, r1, 7 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 7}}                 /* shli r5, r4, 7 */
+   },
+  {16374 /* 0x3ff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 11},                        /* shli r4, r2, 11 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {16375 /* 0x3ff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16376 /* 0x3ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16377 /* 0x3ff9 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {16378 /* 0x3ffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 13},                        /* shli r3, r1, 13 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {16379 /* 0x3ffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16380 /* 0x3ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16381 /* 0x3ffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16382 /* 0x3ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16383 /* 0x3fff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16384 /* 0x4000 */ ,
+   {{6, 1, 14}}                        /* shli r2, r1, 14 */
+   },
+  {16385 /* 0x4001 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {16386 /* 0x4002 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {16387 /* 0x4003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16388 /* 0x4004 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {16389 /* 0x4005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16390 /* 0x4006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {16391 /* 0x4007 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {16392 /* 0x4008 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {16393 /* 0x4009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16394 /* 0x400a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {16400 /* 0x4010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16416 /* 0x4020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16448 /* 0x4040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16496 /* 0x4070 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {5, 2, 4}}                 /* s3a r5, r2, r4 */
+   },
+  {16512 /* 0x4080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16640 /* 0x4100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16896 /* 0x4200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17408 /* 0x4400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18432 /* 0x4800 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 11}}                        /* shli r3, r2, 11 */
+   },
+  {20480 /* 0x5000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {24576 /* 0x6000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {25600 /* 0x6400 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {5, 2, 1},                 /* s3a r3, r2, r1 */
+    {6, 3, 10}}                        /* shli r4, r3, 10 */
+   },
+  {32758 /* 0x7ff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 12},                        /* shli r4, r2, 12 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {32759 /* 0x7ff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32760 /* 0x7ff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32761 /* 0x7ff9 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {32762 /* 0x7ffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 14},                        /* shli r3, r1, 14 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {32763 /* 0x7ffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32764 /* 0x7ffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32765 /* 0x7ffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32766 /* 0x7ffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {32767 /* 0x7fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {32768 /* 0x8000 */ ,
+   {{6, 1, 15}}                        /* shli r2, r1, 15 */
+   },
+  {32769 /* 0x8001 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {32770 /* 0x8002 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {32771 /* 0x8003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32772 /* 0x8004 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {32773 /* 0x8005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32774 /* 0x8006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {32775 /* 0x8007 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {32776 /* 0x8008 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {32777 /* 0x8009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32778 /* 0x800a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {32784 /* 0x8010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32800 /* 0x8020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32832 /* 0x8040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {32896 /* 0x8080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33024 /* 0x8100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33280 /* 0x8200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33792 /* 0x8400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34816 /* 0x8800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {36864 /* 0x9000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 12}}                        /* shli r3, r2, 12 */
+   },
+  {40960 /* 0xa000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {49152 /* 0xc000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {65526 /* 0xfff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 13},                        /* shli r4, r2, 13 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {65527 /* 0xfff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65528 /* 0xfff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65529 /* 0xfff9 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {65530 /* 0xfffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 15},                        /* shli r3, r1, 15 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {65531 /* 0xfffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65532 /* 0xfffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65533 /* 0xfffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65534 /* 0xfffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {65535 /* 0xffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {65536 /* 0x10000 */ ,
+   {{6, 1, 16}}                        /* shli r2, r1, 16 */
+   },
+  {65537 /* 0x10001 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {65538 /* 0x10002 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {65539 /* 0x10003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65540 /* 0x10004 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {65541 /* 0x10005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65542 /* 0x10006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {65543 /* 0x10007 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {65544 /* 0x10008 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {65545 /* 0x10009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65546 /* 0x1000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {65552 /* 0x10010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65568 /* 0x10020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65600 /* 0x10040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65664 /* 0x10080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {65792 /* 0x10100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {66048 /* 0x10200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {66560 /* 0x10400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67584 /* 0x10800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69632 /* 0x11000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {73728 /* 0x12000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 13}}                        /* shli r3, r2, 13 */
+   },
+  {81920 /* 0x14000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {98304 /* 0x18000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {131062 /* 0x1fff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 14},                        /* shli r4, r2, 14 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {131063 /* 0x1fff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131064 /* 0x1fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131065 /* 0x1fff9 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {131066 /* 0x1fffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 16},                        /* shli r3, r1, 16 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {131067 /* 0x1fffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131068 /* 0x1fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131069 /* 0x1fffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131070 /* 0x1fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {131071 /* 0x1ffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {131072 /* 0x20000 */ ,
+   {{6, 1, 17}}                        /* shli r2, r1, 17 */
+   },
+  {131073 /* 0x20001 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {131074 /* 0x20002 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {131075 /* 0x20003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131076 /* 0x20004 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {131077 /* 0x20005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131078 /* 0x20006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {131079 /* 0x20007 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {131080 /* 0x20008 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {131081 /* 0x20009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131082 /* 0x2000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {131088 /* 0x20010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131104 /* 0x20020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131136 /* 0x20040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131200 /* 0x20080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131328 /* 0x20100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {131584 /* 0x20200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {132096 /* 0x20400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {133120 /* 0x20800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {135168 /* 0x21000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {139264 /* 0x22000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {147456 /* 0x24000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 14}}                        /* shli r3, r2, 14 */
+   },
+  {163840 /* 0x28000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {196608 /* 0x30000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {262134 /* 0x3fff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 15},                        /* shli r4, r2, 15 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {262135 /* 0x3fff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262136 /* 0x3fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262137 /* 0x3fff9 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {262138 /* 0x3fffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 17},                        /* shli r3, r1, 17 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {262139 /* 0x3fffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262140 /* 0x3fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262141 /* 0x3fffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262142 /* 0x3fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {262143 /* 0x3ffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {262144 /* 0x40000 */ ,
+   {{6, 1, 18}}                        /* shli r2, r1, 18 */
+   },
+  {262145 /* 0x40001 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {262146 /* 0x40002 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {262147 /* 0x40003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262148 /* 0x40004 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {262149 /* 0x40005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262150 /* 0x40006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {262151 /* 0x40007 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {262152 /* 0x40008 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {262153 /* 0x40009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262154 /* 0x4000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {262160 /* 0x40010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262176 /* 0x40020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262208 /* 0x40040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262272 /* 0x40080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262400 /* 0x40100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {262656 /* 0x40200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {263168 /* 0x40400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {264192 /* 0x40800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {266240 /* 0x41000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {270336 /* 0x42000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {278528 /* 0x44000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {294912 /* 0x48000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 15}}                        /* shli r3, r2, 15 */
+   },
+  {327680 /* 0x50000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {393216 /* 0x60000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {524278 /* 0x7fff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 16},                        /* shli r4, r2, 16 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {524279 /* 0x7fff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524280 /* 0x7fff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524281 /* 0x7fff9 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {524282 /* 0x7fffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 18},                        /* shli r3, r1, 18 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {524283 /* 0x7fffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524284 /* 0x7fffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524285 /* 0x7fffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524286 /* 0x7fffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {524287 /* 0x7ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {524288 /* 0x80000 */ ,
+   {{6, 1, 19}}                        /* shli r2, r1, 19 */
+   },
+  {524289 /* 0x80001 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {524290 /* 0x80002 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {524291 /* 0x80003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524292 /* 0x80004 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {524293 /* 0x80005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524294 /* 0x80006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {524295 /* 0x80007 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {524296 /* 0x80008 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {524297 /* 0x80009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524298 /* 0x8000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {524304 /* 0x80010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524320 /* 0x80020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524352 /* 0x80040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524416 /* 0x80080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524544 /* 0x80100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {524800 /* 0x80200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {525312 /* 0x80400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {526336 /* 0x80800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {528384 /* 0x81000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {532480 /* 0x82000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {540672 /* 0x84000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {557056 /* 0x88000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {589824 /* 0x90000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 16}}                        /* shli r3, r2, 16 */
+   },
+  {655360 /* 0xa0000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {786432 /* 0xc0000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {1048566 /* 0xffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 17},                        /* shli r4, r2, 17 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1048567 /* 0xffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048568 /* 0xffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048569 /* 0xffff9 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {1048570 /* 0xffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 19},                        /* shli r3, r1, 19 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {1048571 /* 0xffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048572 /* 0xffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048573 /* 0xffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048574 /* 0xffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1048575 /* 0xfffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1048576 /* 0x100000 */ ,
+   {{6, 1, 20}}                        /* shli r2, r1, 20 */
+   },
+  {1048577 /* 0x100001 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1048578 /* 0x100002 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {1048579 /* 0x100003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048580 /* 0x100004 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {1048581 /* 0x100005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048582 /* 0x100006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1048583 /* 0x100007 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {1048584 /* 0x100008 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {1048585 /* 0x100009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048586 /* 0x10000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1048592 /* 0x100010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048608 /* 0x100020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048640 /* 0x100040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048704 /* 0x100080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1048832 /* 0x100100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1049088 /* 0x100200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1049600 /* 0x100400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1050624 /* 0x100800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1052672 /* 0x101000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1056768 /* 0x102000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1064960 /* 0x104000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1081344 /* 0x108000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1114112 /* 0x110000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1179648 /* 0x120000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 17}}                        /* shli r3, r2, 17 */
+   },
+  {1310720 /* 0x140000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {1572864 /* 0x180000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {2097142 /* 0x1ffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 18},                        /* shli r4, r2, 18 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2097143 /* 0x1ffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097144 /* 0x1ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097145 /* 0x1ffff9 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {2097146 /* 0x1ffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 20},                        /* shli r3, r1, 20 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {2097147 /* 0x1ffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097148 /* 0x1ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097149 /* 0x1ffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097150 /* 0x1ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2097151 /* 0x1fffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {2097152 /* 0x200000 */ ,
+   {{6, 1, 21}}                        /* shli r2, r1, 21 */
+   },
+  {2097153 /* 0x200001 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {2097154 /* 0x200002 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {2097155 /* 0x200003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097156 /* 0x200004 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {2097157 /* 0x200005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097158 /* 0x200006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {2097159 /* 0x200007 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {2097160 /* 0x200008 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {2097161 /* 0x200009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097162 /* 0x20000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {2097168 /* 0x200010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097184 /* 0x200020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097216 /* 0x200040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097280 /* 0x200080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097408 /* 0x200100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2097664 /* 0x200200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2098176 /* 0x200400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2099200 /* 0x200800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2101248 /* 0x201000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2105344 /* 0x202000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2113536 /* 0x204000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2129920 /* 0x208000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2162688 /* 0x210000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2228224 /* 0x220000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {2359296 /* 0x240000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 18}}                        /* shli r3, r2, 18 */
+   },
+  {2621440 /* 0x280000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {3145728 /* 0x300000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {4194294 /* 0x3ffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 19},                        /* shli r4, r2, 19 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {4194295 /* 0x3ffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194296 /* 0x3ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194297 /* 0x3ffff9 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {4194298 /* 0x3ffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 21},                        /* shli r3, r1, 21 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {4194299 /* 0x3ffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194300 /* 0x3ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194301 /* 0x3ffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194302 /* 0x3ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {4194303 /* 0x3fffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {4194304 /* 0x400000 */ ,
+   {{6, 1, 22}}                        /* shli r2, r1, 22 */
+   },
+  {4194305 /* 0x400001 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {4194306 /* 0x400002 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {4194307 /* 0x400003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194308 /* 0x400004 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {4194309 /* 0x400005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194310 /* 0x400006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {4194311 /* 0x400007 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {4194312 /* 0x400008 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {4194313 /* 0x400009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194314 /* 0x40000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {4194320 /* 0x400010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194336 /* 0x400020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194368 /* 0x400040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194432 /* 0x400080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194560 /* 0x400100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4194816 /* 0x400200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4195328 /* 0x400400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4196352 /* 0x400800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4198400 /* 0x401000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4202496 /* 0x402000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4210688 /* 0x404000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4227072 /* 0x408000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4259840 /* 0x410000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4325376 /* 0x420000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4456448 /* 0x440000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {4718592 /* 0x480000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 19}}                        /* shli r3, r2, 19 */
+   },
+  {5242880 /* 0x500000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {6291456 /* 0x600000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {8388598 /* 0x7ffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 20},                        /* shli r4, r2, 20 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {8388599 /* 0x7ffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388600 /* 0x7ffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388601 /* 0x7ffff9 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {8388602 /* 0x7ffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 22},                        /* shli r3, r1, 22 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {8388603 /* 0x7ffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388604 /* 0x7ffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388605 /* 0x7ffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388606 /* 0x7ffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {8388607 /* 0x7fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {8388608 /* 0x800000 */ ,
+   {{6, 1, 23}}                        /* shli r2, r1, 23 */
+   },
+  {8388609 /* 0x800001 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {8388610 /* 0x800002 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {8388611 /* 0x800003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388612 /* 0x800004 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {8388613 /* 0x800005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388614 /* 0x800006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {8388615 /* 0x800007 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {8388616 /* 0x800008 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {8388617 /* 0x800009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388618 /* 0x80000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {8388624 /* 0x800010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388640 /* 0x800020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388672 /* 0x800040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388736 /* 0x800080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8388864 /* 0x800100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8389120 /* 0x800200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8389632 /* 0x800400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8390656 /* 0x800800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8392704 /* 0x801000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8396800 /* 0x802000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8404992 /* 0x804000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8421376 /* 0x808000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8454144 /* 0x810000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8519680 /* 0x820000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8650752 /* 0x840000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {8912896 /* 0x880000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {9437184 /* 0x900000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 20}}                        /* shli r3, r2, 20 */
+   },
+  {10485760 /* 0xa00000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {11796480 /* 0xb40000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 18}}                        /* shli r4, r3, 18 */
+   },
+  {12582912 /* 0xc00000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {16777206 /* 0xfffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 21},                        /* shli r4, r2, 21 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {16777207 /* 0xfffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777208 /* 0xfffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777209 /* 0xfffff9 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {16777210 /* 0xfffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 23},                        /* shli r3, r1, 23 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {16777211 /* 0xfffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777212 /* 0xfffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777213 /* 0xfffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777214 /* 0xfffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {16777215 /* 0xffffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {16777216 /* 0x1000000 */ ,
+   {{6, 1, 24}}                        /* shli r2, r1, 24 */
+   },
+  {16777217 /* 0x1000001 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {16777218 /* 0x1000002 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {16777219 /* 0x1000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777220 /* 0x1000004 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {16777221 /* 0x1000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777222 /* 0x1000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {16777223 /* 0x1000007 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {16777224 /* 0x1000008 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {16777225 /* 0x1000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777226 /* 0x100000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {16777232 /* 0x1000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777248 /* 0x1000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777280 /* 0x1000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777344 /* 0x1000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777472 /* 0x1000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16777728 /* 0x1000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16778240 /* 0x1000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16779264 /* 0x1000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16781312 /* 0x1001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16785408 /* 0x1002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16793600 /* 0x1004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16809984 /* 0x1008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16842752 /* 0x1010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {16843009 /* 0x1010101 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 3, 16},                        /* shli r4, r3, 16 */
+    {1, 3, 4}}                 /* add r5, r3, r4 */
+   },
+  {16908288 /* 0x1020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17039360 /* 0x1040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17301504 /* 0x1080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {17825792 /* 0x1100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {18874368 /* 0x1200000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 21}}                        /* shli r3, r2, 21 */
+   },
+  {20971520 /* 0x1400000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {23592960 /* 0x1680000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {5, 2, 2},                 /* s3a r3, r2, r2 */
+    {6, 3, 19}}                        /* shli r4, r3, 19 */
+   },
+  {25165824 /* 0x1800000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {33554422 /* 0x1fffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 22},                        /* shli r4, r2, 22 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {33554423 /* 0x1fffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554424 /* 0x1fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554425 /* 0x1fffff9 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {33554426 /* 0x1fffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 24},                        /* shli r3, r1, 24 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {33554427 /* 0x1fffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554428 /* 0x1fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554429 /* 0x1fffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554430 /* 0x1fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {33554431 /* 0x1ffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {33554432 /* 0x2000000 */ ,
+   {{6, 1, 25}}                        /* shli r2, r1, 25 */
+   },
+  {33554433 /* 0x2000001 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {33554434 /* 0x2000002 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {33554435 /* 0x2000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554436 /* 0x2000004 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {33554437 /* 0x2000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554438 /* 0x2000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {33554439 /* 0x2000007 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {33554440 /* 0x2000008 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {33554441 /* 0x2000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554442 /* 0x200000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {33554448 /* 0x2000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554464 /* 0x2000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554496 /* 0x2000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554560 /* 0x2000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554688 /* 0x2000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33554944 /* 0x2000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33555456 /* 0x2000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33556480 /* 0x2000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33558528 /* 0x2001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33562624 /* 0x2002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33570816 /* 0x2004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33587200 /* 0x2008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33619968 /* 0x2010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33685504 /* 0x2020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {33816576 /* 0x2040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34078720 /* 0x2080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {34603008 /* 0x2100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {35651584 /* 0x2200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {37748736 /* 0x2400000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 22}}                        /* shli r3, r2, 22 */
+   },
+  {41943040 /* 0x2800000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {50331648 /* 0x3000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {67108854 /* 0x3fffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 23},                        /* shli r4, r2, 23 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {67108855 /* 0x3fffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108856 /* 0x3fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108857 /* 0x3fffff9 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {67108858 /* 0x3fffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 25},                        /* shli r3, r1, 25 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {67108859 /* 0x3fffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108860 /* 0x3fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108861 /* 0x3fffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108862 /* 0x3fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {67108863 /* 0x3ffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {67108864 /* 0x4000000 */ ,
+   {{6, 1, 26}}                        /* shli r2, r1, 26 */
+   },
+  {67108865 /* 0x4000001 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {67108866 /* 0x4000002 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {67108867 /* 0x4000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108868 /* 0x4000004 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {67108869 /* 0x4000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108870 /* 0x4000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {67108871 /* 0x4000007 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {67108872 /* 0x4000008 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {67108873 /* 0x4000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108874 /* 0x400000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {67108880 /* 0x4000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108896 /* 0x4000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108928 /* 0x4000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67108992 /* 0x4000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109120 /* 0x4000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109376 /* 0x4000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67109888 /* 0x4000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67110912 /* 0x4000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67112960 /* 0x4001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67117056 /* 0x4002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67125248 /* 0x4004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67141632 /* 0x4008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67174400 /* 0x4010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67239936 /* 0x4020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67371008 /* 0x4040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {67633152 /* 0x4080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {68157440 /* 0x4100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {69206016 /* 0x4200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {71303168 /* 0x4400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {75497472 /* 0x4800000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 23}}                        /* shli r3, r2, 23 */
+   },
+  {83886080 /* 0x5000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {100663296 /* 0x6000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {134217718 /* 0x7fffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 24},                        /* shli r4, r2, 24 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {134217719 /* 0x7fffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217720 /* 0x7fffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217721 /* 0x7fffff9 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {134217722 /* 0x7fffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 26},                        /* shli r3, r1, 26 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {134217723 /* 0x7fffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217724 /* 0x7fffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217725 /* 0x7fffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217726 /* 0x7fffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {134217727 /* 0x7ffffff */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {134217728 /* 0x8000000 */ ,
+   {{6, 1, 27}}                        /* shli r2, r1, 27 */
+   },
+  {134217729 /* 0x8000001 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {134217730 /* 0x8000002 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {134217731 /* 0x8000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217732 /* 0x8000004 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {134217733 /* 0x8000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217734 /* 0x8000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {134217735 /* 0x8000007 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {134217736 /* 0x8000008 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {134217737 /* 0x8000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217738 /* 0x800000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {134217744 /* 0x8000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217760 /* 0x8000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217792 /* 0x8000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217856 /* 0x8000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134217984 /* 0x8000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134218240 /* 0x8000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134218752 /* 0x8000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134219776 /* 0x8000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134221824 /* 0x8001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134225920 /* 0x8002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134234112 /* 0x8004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134250496 /* 0x8008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134283264 /* 0x8010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134348800 /* 0x8020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134479872 /* 0x8040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {134742016 /* 0x8080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {135266304 /* 0x8100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {136314880 /* 0x8200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {138412032 /* 0x8400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {142606336 /* 0x8800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {150994944 /* 0x9000000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 24}}                        /* shli r3, r2, 24 */
+   },
+  {167772160 /* 0xa000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {201326592 /* 0xc000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {268435446 /* 0xffffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 25},                        /* shli r4, r2, 25 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {268435447 /* 0xffffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435448 /* 0xffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435449 /* 0xffffff9 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {268435450 /* 0xffffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 27},                        /* shli r3, r1, 27 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {268435451 /* 0xffffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435452 /* 0xffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435453 /* 0xffffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435454 /* 0xffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {268435455 /* 0xfffffff */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {268435456 /* 0x10000000 */ ,
+   {{6, 1, 28}}                        /* shli r2, r1, 28 */
+   },
+  {268435457 /* 0x10000001 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {268435458 /* 0x10000002 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {268435459 /* 0x10000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435460 /* 0x10000004 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {268435461 /* 0x10000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435462 /* 0x10000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {268435463 /* 0x10000007 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {268435464 /* 0x10000008 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {268435465 /* 0x10000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435466 /* 0x1000000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {268435472 /* 0x10000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435488 /* 0x10000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435520 /* 0x10000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435584 /* 0x10000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435712 /* 0x10000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268435968 /* 0x10000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268436480 /* 0x10000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268437504 /* 0x10000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268439552 /* 0x10001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268443648 /* 0x10002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268451840 /* 0x10004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268468224 /* 0x10008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268500992 /* 0x10010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268566528 /* 0x10020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268697600 /* 0x10040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {268959744 /* 0x10080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {269484032 /* 0x10100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {270532608 /* 0x10200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {272629760 /* 0x10400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {276824064 /* 0x10800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {285212672 /* 0x11000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {301989888 /* 0x12000000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 25}}                        /* shli r3, r2, 25 */
+   },
+  {335544320 /* 0x14000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {402653184 /* 0x18000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {536870902 /* 0x1ffffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 26},                        /* shli r4, r2, 26 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {536870903 /* 0x1ffffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870904 /* 0x1ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870905 /* 0x1ffffff9 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {536870906 /* 0x1ffffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 28},                        /* shli r3, r1, 28 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {536870907 /* 0x1ffffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870908 /* 0x1ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870909 /* 0x1ffffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870910 /* 0x1ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {536870911 /* 0x1fffffff */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {536870912 /* 0x20000000 */ ,
+   {{6, 1, 29}}                        /* shli r2, r1, 29 */
+   },
+  {536870913 /* 0x20000001 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {536870914 /* 0x20000002 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {536870915 /* 0x20000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870916 /* 0x20000004 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {536870917 /* 0x20000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870918 /* 0x20000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {536870919 /* 0x20000007 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {536870920 /* 0x20000008 */ ,
+   {{6, 1, 29},                        /* shli r2, r1, 29 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {536870921 /* 0x20000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870922 /* 0x2000000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {536870928 /* 0x20000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870944 /* 0x20000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536870976 /* 0x20000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871040 /* 0x20000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871168 /* 0x20000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871424 /* 0x20000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536871936 /* 0x20000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536872960 /* 0x20000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536875008 /* 0x20001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536879104 /* 0x20002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536887296 /* 0x20004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536903680 /* 0x20008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {536936448 /* 0x20010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537001984 /* 0x20020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537133056 /* 0x20040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537395200 /* 0x20080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {537919488 /* 0x20100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {538968064 /* 0x20200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {541065216 /* 0x20400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {545259520 /* 0x20800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {553648128 /* 0x21000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {570425344 /* 0x22000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {603979776 /* 0x24000000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 26}}                        /* shli r3, r2, 26 */
+   },
+  {671088640 /* 0x28000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {805306368 /* 0x30000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {1073741814 /* 0x3ffffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 27},                        /* shli r4, r2, 27 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {1073741815 /* 0x3ffffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741816 /* 0x3ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741817 /* 0x3ffffff9 */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {1073741818 /* 0x3ffffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 29},                        /* shli r3, r1, 29 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {1073741819 /* 0x3ffffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741820 /* 0x3ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741821 /* 0x3ffffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741822 /* 0x3ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {1073741823 /* 0x3fffffff */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   },
+  {1073741824 /* 0x40000000 */ ,
+   {{6, 1, 30}}                        /* shli r2, r1, 30 */
+   },
+  {1073741825 /* 0x40000001 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {1, 1, 2}}                 /* add r3, r1, r2 */
+   },
+  {1073741826 /* 0x40000002 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {3, 1, 2}}                 /* s1a r3, r1, r2 */
+   },
+  {1073741827 /* 0x40000003 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741828 /* 0x40000004 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {4, 1, 2}}                 /* s2a r3, r1, r2 */
+   },
+  {1073741829 /* 0x40000005 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741830 /* 0x40000006 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1073741831 /* 0x40000007 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 1, 3}}                 /* s3a r4, r1, r3 */
+   },
+  {1073741832 /* 0x40000008 */ ,
+   {{6, 1, 30},                        /* shli r2, r1, 30 */
+    {5, 1, 2}}                 /* s3a r3, r1, r2 */
+   },
+  {1073741833 /* 0x40000009 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741834 /* 0x4000000a */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {3, 2, 3}}                 /* s1a r4, r2, r3 */
+   },
+  {1073741840 /* 0x40000010 */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741856 /* 0x40000020 */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741888 /* 0x40000040 */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073741952 /* 0x40000080 */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742080 /* 0x40000100 */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742336 /* 0x40000200 */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073742848 /* 0x40000400 */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073743872 /* 0x40000800 */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073745920 /* 0x40001000 */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073750016 /* 0x40002000 */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073758208 /* 0x40004000 */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073774592 /* 0x40008000 */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073807360 /* 0x40010000 */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1073872896 /* 0x40020000 */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074003968 /* 0x40040000 */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074266112 /* 0x40080000 */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1074790400 /* 0x40100000 */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1075838976 /* 0x40200000 */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1077936128 /* 0x40400000 */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1082130432 /* 0x40800000 */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1090519040 /* 0x41000000 */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1107296256 /* 0x42000000 */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1140850688 /* 0x44000000 */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {1, 2, 3}}                 /* add r4, r2, r3 */
+   },
+  {1207959552 /* 0x48000000 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 2, 27}}                        /* shli r3, r2, 27 */
+   },
+  {1342177280 /* 0x50000000 */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 2, 28}}                        /* shli r3, r2, 28 */
+   },
+  {1610612735 /* 0x5fffffff */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 29},                        /* shli r3, r2, 29 */
+    {2, 3, 1}}                 /* sub r4, r3, r1 */
+   },
+  {1610612736 /* 0x60000000 */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 2, 29}}                        /* shli r3, r2, 29 */
+   },
+  {1879048191 /* 0x6fffffff */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 3},                 /* shli r4, r2, 3 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2013265919 /* 0x77ffffff */ ,
+   {{6, 1, 27},                        /* shli r2, r1, 27 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 4},                 /* shli r4, r2, 4 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2080374783 /* 0x7bffffff */ ,
+   {{6, 1, 26},                        /* shli r2, r1, 26 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 5},                 /* shli r4, r2, 5 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2113929215 /* 0x7dffffff */ ,
+   {{6, 1, 25},                        /* shli r2, r1, 25 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 6},                 /* shli r4, r2, 6 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2130706431 /* 0x7effffff */ ,
+   {{6, 1, 24},                        /* shli r2, r1, 24 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 7},                 /* shli r4, r2, 7 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2139095039 /* 0x7f7fffff */ ,
+   {{6, 1, 23},                        /* shli r2, r1, 23 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 8},                 /* shli r4, r2, 8 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2143289343 /* 0x7fbfffff */ ,
+   {{6, 1, 22},                        /* shli r2, r1, 22 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 9},                 /* shli r4, r2, 9 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2145386495 /* 0x7fdfffff */ ,
+   {{6, 1, 21},                        /* shli r2, r1, 21 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 10},                        /* shli r4, r2, 10 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2146435071 /* 0x7fefffff */ ,
+   {{6, 1, 20},                        /* shli r2, r1, 20 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 11},                        /* shli r4, r2, 11 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2146959359 /* 0x7ff7ffff */ ,
+   {{6, 1, 19},                        /* shli r2, r1, 19 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 12},                        /* shli r4, r2, 12 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147221503 /* 0x7ffbffff */ ,
+   {{6, 1, 18},                        /* shli r2, r1, 18 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 13},                        /* shli r4, r2, 13 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147352575 /* 0x7ffdffff */ ,
+   {{6, 1, 17},                        /* shli r2, r1, 17 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 14},                        /* shli r4, r2, 14 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147418111 /* 0x7ffeffff */ ,
+   {{6, 1, 16},                        /* shli r2, r1, 16 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 15},                        /* shli r4, r2, 15 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147450879 /* 0x7fff7fff */ ,
+   {{6, 1, 15},                        /* shli r2, r1, 15 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 16},                        /* shli r4, r2, 16 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147467263 /* 0x7fffbfff */ ,
+   {{6, 1, 14},                        /* shli r2, r1, 14 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 17},                        /* shli r4, r2, 17 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147475455 /* 0x7fffdfff */ ,
+   {{6, 1, 13},                        /* shli r2, r1, 13 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 18},                        /* shli r4, r2, 18 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147479551 /* 0x7fffefff */ ,
+   {{6, 1, 12},                        /* shli r2, r1, 12 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 19},                        /* shli r4, r2, 19 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147481599 /* 0x7ffff7ff */ ,
+   {{6, 1, 11},                        /* shli r2, r1, 11 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 20},                        /* shli r4, r2, 20 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147482623 /* 0x7ffffbff */ ,
+   {{6, 1, 10},                        /* shli r2, r1, 10 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 21},                        /* shli r4, r2, 21 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483135 /* 0x7ffffdff */ ,
+   {{6, 1, 9},                 /* shli r2, r1, 9 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 22},                        /* shli r4, r2, 22 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483391 /* 0x7ffffeff */ ,
+   {{6, 1, 8},                 /* shli r2, r1, 8 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 23},                        /* shli r4, r2, 23 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483519 /* 0x7fffff7f */ ,
+   {{6, 1, 7},                 /* shli r2, r1, 7 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 24},                        /* shli r4, r2, 24 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483583 /* 0x7fffffbf */ ,
+   {{6, 1, 6},                 /* shli r2, r1, 6 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 25},                        /* shli r4, r2, 25 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483615 /* 0x7fffffdf */ ,
+   {{6, 1, 5},                 /* shli r2, r1, 5 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 26},                        /* shli r4, r2, 26 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483631 /* 0x7fffffef */ ,
+   {{6, 1, 4},                 /* shli r2, r1, 4 */
+    {1, 1, 2},                 /* add r3, r1, r2 */
+    {6, 2, 27},                        /* shli r4, r2, 27 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483638 /* 0x7ffffff6 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {3, 1, 2},                 /* s1a r3, r1, r2 */
+    {6, 2, 28},                        /* shli r4, r2, 28 */
+    {2, 4, 3}}                 /* sub r5, r4, r3 */
+   },
+  {2147483639 /* 0x7ffffff7 */ ,
+   {{5, 1, 1},                 /* s3a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483640 /* 0x7ffffff8 */ ,
+   {{6, 1, 3},                 /* shli r2, r1, 3 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483641 /* 0x7ffffff9 */ ,
+   {{6, 1, 28},                        /* shli r2, r1, 28 */
+    {2, 2, 1},                 /* sub r3, r2, r1 */
+    {5, 3, 1}}                 /* s3a r4, r3, r1 */
+   },
+  {2147483642 /* 0x7ffffffa */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 30},                        /* shli r3, r1, 30 */
+    {2, 3, 2},                 /* sub r4, r3, r2 */
+    {6, 4, 1}}                 /* shli r5, r4, 1 */
+   },
+  {2147483643 /* 0x7ffffffb */ ,
+   {{4, 1, 1},                 /* s2a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483644 /* 0x7ffffffc */ ,
+   {{6, 1, 2},                 /* shli r2, r1, 2 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483645 /* 0x7ffffffd */ ,
+   {{3, 1, 1},                 /* s1a r2, r1, r1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483646 /* 0x7ffffffe */ ,
+   {{6, 1, 1},                 /* shli r2, r1, 1 */
+    {6, 1, 31},                        /* shli r3, r1, 31 */
+    {2, 3, 2}}                 /* sub r4, r3, r2 */
+   },
+  {2147483647 /* 0x7fffffff */ ,
+   {{6, 1, 31},                        /* shli r2, r1, 31 */
+    {2, 2, 1}}                 /* sub r3, r2, r1 */
+   }
+};
+
+const int tilepro_multiply_insn_seq_table_size =
+  (int) (sizeof tilepro_multiply_insn_seq_table
+         / sizeof tilepro_multiply_insn_seq_table[0]);
diff --git a/gcc/config/tilepro/predicates.md b/gcc/config/tilepro/predicates.md
new file mode 100644 (file)
index 0000000..6c4ffbe
--- /dev/null
@@ -0,0 +1,261 @@
+;; Predicate definitions for Tilera TILEPro chip.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+;; Return true if OP is the zero constant for MODE.
+(define_predicate "const_zero_operand"
+  (and (match_code "const_int,const_double,const_vector")
+       (match_test "op == CONST0_RTX (mode)")))
+
+;; Returns true if OP is either the constant zero or a register.
+(define_predicate "reg_or_0_operand"
+  (and (ior (match_operand 0 "register_operand")
+           (match_operand 0 "const_zero_operand"))
+       (match_test "GET_MODE_SIZE (mode) <= UNITS_PER_WORD")))
+
+; Return 1 if OP is a network register identifier.
+(define_predicate "netreg_operand"
+  (and (match_code "const_int")
+       (match_test "IN_RANGE (INTVAL (op), 0, 6)")))
+
+; Return 1 if OP is an unsigned 5-bit constant.
+(define_predicate "u5bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")))
+
+;; Return 1 if OP is an unsigned 16-bit constant.
+(define_predicate "u16bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 16)")))
+
+;; Return 1 if OP is a signed 8-bit constant.
+(define_predicate "s8bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "satisfies_constraint_I (op)")))
+
+;; Return 1 if OP is a signed 16-bit constant.
+(define_predicate "s16bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "satisfies_constraint_J (op)")))
+
+;; Return 1 if OP is a nonzero integer constant whose low 16 bits are zero.
+(define_predicate "auli_cint_operand"
+  (and (match_code "const_int")
+       (match_test "satisfies_constraint_K (op)")))
+
+;; Return 1 if OP is an unsigned 15-bit constant.
+(define_predicate "u15bit_cint_operand"
+  (and (match_code "const_int")
+       (match_test "(unsigned HOST_WIDE_INT)INTVAL (op) < (1U << 15)")))
+
+;; Return 1 if OP is a constant or any register.
+(define_predicate "reg_or_cint_operand"
+  (ior (match_operand 0 "register_operand")
+       (match_operand 0 "const_int_operand")))
+
+;; Return 1 if OP is a 4-element vector constant with identical signed
+;; 8-bit elements or any register.
+(define_predicate "reg_or_v4s8bit_operand"
+  (ior (match_operand 0 "register_operand")
+       (and (match_code "const_vector")
+           (match_test "CONST_VECTOR_NUNITS (op) == 4
+                         && satisfies_constraint_I (CONST_VECTOR_ELT (op, 0))
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 2)
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 3)"))))
+
+;; Return 1 if OP is a 2-element vector constant with identical signed
+;; 8-bit elements or any register.
+(define_predicate "reg_or_v2s8bit_operand"
+  (ior (match_operand 0 "register_operand")
+       (and (match_code "const_vector")
+           (match_test "CONST_VECTOR_NUNITS (op) == 2
+                         && satisfies_constraint_I (CONST_VECTOR_ELT (op, 0))
+                         && CONST_VECTOR_ELT (op, 0) == CONST_VECTOR_ELT (op, 1)"))))
+
+;; Return 1 if the operand is a valid second operand to an add insn.
+(define_predicate "add_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_J (op) || satisfies_constraint_K (op)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 if the operand is a register or signed 8-bit immediate operand.
+(define_predicate "reg_or_s8bit_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_I (op)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 for an operand suitable for ANDing with a register.
+(define_predicate "and_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "satisfies_constraint_I (op) || satisfies_constraint_M (op)")
+    (match_operand 0 "register_operand")))
+
+;; Return 1 if the operand is a register or unsigned 5-bit immediate operand.
+(define_predicate "reg_or_u5bit_operand"
+  (if_then_else (match_code "const_int")
+    (match_test "INTVAL (op) == (INTVAL (op) & 0x1F)")
+    (match_operand 0 "register_operand")))
+
+; Return 1 if the operand is 2, 4 or 8.
+(define_predicate "cint_248_operand"
+  (and (match_code "const_int")
+       (match_test
+        "INTVAL (op) == 2 || INTVAL (op) == 4 || INTVAL (op) == 8")))
+
+
+;; Return true if OP is a TLS symbolic operand.
+(define_predicate "tls_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) !=  TLS_MODEL_NONE")))
+
+;; Return true if OP is a symbolic operand for the TLS Global Dynamic model.
+(define_predicate "tls_gd_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_GLOBAL_DYNAMIC")))
+
+;; Return true if OP is a symbolic operand for the TLS Local Dynamic model.
+(define_predicate "tls_ld_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_DYNAMIC")))
+
+;; Return true if OP is a symbolic operand that can be used for the
+;; TLS Initial Exec model.
+(define_predicate "tls_ie_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (ior (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_INITIAL_EXEC")
+            (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC"))))
+
+;; Return true if OP is a symbolic operand for the TLS Local Exec model.
+(define_predicate "tls_le_symbolic_operand"
+  (and (match_code "symbol_ref")
+       (match_test "SYMBOL_REF_TLS_MODEL (op) == TLS_MODEL_LOCAL_EXEC")))
+
+;; Returns true if OP is any general operand except for an
+;; auto-incrementing address operand.
+(define_predicate "nonautoinc_operand"
+  (and (match_operand 0 "general_operand")
+       (not (ior (match_code "pre_dec") (match_code "pre_inc")
+                (match_code "post_dec") (match_code "post_inc")
+                (match_code "post_modify") (match_code "pre_modify")))))
+
+;; Returns true if OP is a non-auto-incrementing memory operand.
+(define_predicate "nonautoincmem_operand"
+  (match_operand 0 "memory_operand")
+{
+  return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+})
+
+;; Returns true if OP is a non-auto-incrementing memory, general
+;; operand.
+(define_predicate "nonautoincmem_general_operand"
+  (match_operand 0 "general_operand")
+{
+  if (memory_operand (op, mode))
+    return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+  else
+    return true;
+})
+;; Returns true if OP is a non-auto-incrementing memory, non-immediate
+;; operand.
+(define_predicate "nonautoincmem_nonimmediate_operand"
+  (match_operand 0 "nonimmediate_operand")
+{
+  if (memory_operand (op, mode))
+    return nonautoinc_operand (XEXP (op, 0), GET_MODE (XEXP (op, 0)));
+  else
+    return true;
+})
+;; Return true if OP is a valid operand for the source of a move insn.
+(define_predicate "move_operand"
+  (match_operand 0 "general_operand")
+{
+  /* If both modes are non-void they must be the same.  */
+  if (mode != VOIDmode && GET_MODE (op) != VOIDmode && mode != GET_MODE (op))
+    return false;
+
+  if (GET_MODE_SIZE (mode) > 4)
+    return false;
+
+  switch (GET_CODE (op))
+    {
+    case CONST_INT:
+      return (satisfies_constraint_J (op)
+              || satisfies_constraint_K (op)
+              || satisfies_constraint_N (op)
+              || satisfies_constraint_P (op));
+
+    case HIGH:
+      return true;
+
+    case MEM:
+      return memory_address_p (mode, XEXP (op, 0));
+
+    default:
+      return register_operand (op, mode);
+    }
+})
+
+;; Returns 1 if OP is a symbolic operand, i.e. a symbol_ref or a label_ref,
+;; possibly with an offset.
+(define_predicate "symbolic_operand"
+  (ior (match_code "symbol_ref,label_ref")
+       (and (match_code "const")
+           (match_test "GET_CODE (XEXP (op,0)) == PLUS
+                        && (GET_CODE (XEXP (XEXP (op,0), 0)) == SYMBOL_REF
+                            || GET_CODE (XEXP (XEXP (op,0), 0)) == LABEL_REF)
+                        && CONST_INT_P (XEXP (XEXP (op,0), 1))"))))
+
+;; Returns 1 if OP is a symbolic operand, or a const unspec wrapper
+;; representing a got reference, a tls reference, or pc-relative
+;; reference.
+(define_predicate "const_symbolic_operand"
+  (ior (match_operand 0 "symbolic_operand")
+       (and (match_code "const")
+           (match_test "GET_CODE (XEXP (op,0)) == UNSPEC")
+           (ior (match_test "XINT (XEXP (op,0), 1) == UNSPEC_GOT16_SYM")
+                (match_test "XINT (XEXP (op,0), 1) == UNSPEC_GOT32_SYM")
+                (match_test "XINT (XEXP (op,0), 1) == UNSPEC_PCREL_SYM")
+                (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_GD")
+                (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_IE")
+                (match_test "XINT (XEXP (op,0), 1) == UNSPEC_TLS_LE")))))
+
+;; Return true if OP is an address suitable for a call insn.
+;; Call insn on TILE can take a PC-relative constant address
+;; or any regular memory address.
+(define_predicate "call_address_operand"
+  (ior (match_operand 0 "symbolic_operand")
+       (match_test "memory_address_p (Pmode, op)")))
+
+;; Return true if OP is an operand suitable for a call insn.
+(define_predicate "call_operand"
+  (and (match_code "mem")
+       (match_test "call_address_operand (XEXP (op, 0), mode)")))
+
+;; Return 1 if OP is a signed comparison operation.
+;; We can use these directly in compares against zero.
+(define_predicate "signed_comparison_operator"
+  (match_code "eq,ne,le,lt,ge,gt"))
+
+;; Return 1 if OP is a equal or not-equal operation.
+(define_predicate "eqne_operator"
+  (match_code "eq,ne"))
diff --git a/gcc/config/tilepro/t-tilepro b/gcc/config/tilepro/t-tilepro
new file mode 100644 (file)
index 0000000..bc2a5aa
--- /dev/null
@@ -0,0 +1,15 @@
+tilepro-c.o: $(srcdir)/config/tilepro/tilepro-c.c \
+    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(MACHMODE_H) \
+    $(TM_H) $(TM_P_H) $(CPPLIB_H) $(TREE_H) $(C_COMMON_H)
+       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
+
+$(srcdir)/config/tilepro/mul-tables.c: \
+    $(srcdir)/config/tilepro/gen-mul-tables.cc
+       $(CC_FOR_BUILD) $(BUILD_CPPFLAGS) -O2 -DTILEPRO \
+         -o gen-mul-tables -lstdc++ $<;
+       ./gen-mul-tables > $@
+
+mul-tables.o: $(srcdir)/config/tilepro/mul-tables.c \
+    $(CONFIG_H) $(SYSTEM_H) coretypes.h $(EXPR_H) $(OPTABS_H) \
+    $(srcdir)/config/tilepro/tilepro-multiply.h
+       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
diff --git a/gcc/config/tilepro/tilepro-builtins.h b/gcc/config/tilepro/tilepro-builtins.h
new file mode 100644 (file)
index 0000000..807401f
--- /dev/null
@@ -0,0 +1,217 @@
+/* Enum for builtin intrinsics for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TILEPRO_BUILTINS_H
+#define GCC_TILEPRO_BUILTINS_H
+
+enum tilepro_builtin
+{
+  TILEPRO_INSN_ADD,
+  TILEPRO_INSN_ADDB,
+  TILEPRO_INSN_ADDBS_U,
+  TILEPRO_INSN_ADDH,
+  TILEPRO_INSN_ADDHS,
+  TILEPRO_INSN_ADDIB,
+  TILEPRO_INSN_ADDIH,
+  TILEPRO_INSN_ADDLIS,
+  TILEPRO_INSN_ADDS,
+  TILEPRO_INSN_ADIFFB_U,
+  TILEPRO_INSN_ADIFFH,
+  TILEPRO_INSN_AND,
+  TILEPRO_INSN_AULI,
+  TILEPRO_INSN_AVGB_U,
+  TILEPRO_INSN_AVGH,
+  TILEPRO_INSN_BITX,
+  TILEPRO_INSN_BYTEX,
+  TILEPRO_INSN_CLZ,
+  TILEPRO_INSN_CRC32_32,
+  TILEPRO_INSN_CRC32_8,
+  TILEPRO_INSN_CTZ,
+  TILEPRO_INSN_DRAIN,
+  TILEPRO_INSN_DTLBPR,
+  TILEPRO_INSN_DWORD_ALIGN,
+  TILEPRO_INSN_FINV,
+  TILEPRO_INSN_FLUSH,
+  TILEPRO_INSN_FNOP,
+  TILEPRO_INSN_ICOH,
+  TILEPRO_INSN_ILL,
+  TILEPRO_INSN_INFO,
+  TILEPRO_INSN_INFOL,
+  TILEPRO_INSN_INTHB,
+  TILEPRO_INSN_INTHH,
+  TILEPRO_INSN_INTLB,
+  TILEPRO_INSN_INTLH,
+  TILEPRO_INSN_INV,
+  TILEPRO_INSN_LB,
+  TILEPRO_INSN_LB_U,
+  TILEPRO_INSN_LH,
+  TILEPRO_INSN_LH_U,
+  TILEPRO_INSN_LNK,
+  TILEPRO_INSN_LW,
+  TILEPRO_INSN_LW_NA,
+  TILEPRO_INSN_LB_L2,
+  TILEPRO_INSN_LB_U_L2,
+  TILEPRO_INSN_LH_L2,
+  TILEPRO_INSN_LH_U_L2,
+  TILEPRO_INSN_LW_L2,
+  TILEPRO_INSN_LW_NA_L2,
+  TILEPRO_INSN_LB_MISS,
+  TILEPRO_INSN_LB_U_MISS,
+  TILEPRO_INSN_LH_MISS,
+  TILEPRO_INSN_LH_U_MISS,
+  TILEPRO_INSN_LW_MISS,
+  TILEPRO_INSN_LW_NA_MISS,
+  TILEPRO_INSN_MAXB_U,
+  TILEPRO_INSN_MAXH,
+  TILEPRO_INSN_MAXIB_U,
+  TILEPRO_INSN_MAXIH,
+  TILEPRO_INSN_MF,
+  TILEPRO_INSN_MFSPR,
+  TILEPRO_INSN_MINB_U,
+  TILEPRO_INSN_MINH,
+  TILEPRO_INSN_MINIB_U,
+  TILEPRO_INSN_MINIH,
+  TILEPRO_INSN_MM,
+  TILEPRO_INSN_MNZ,
+  TILEPRO_INSN_MNZB,
+  TILEPRO_INSN_MNZH,
+  TILEPRO_INSN_MOVE,
+  TILEPRO_INSN_MOVELIS,
+  TILEPRO_INSN_MTSPR,
+  TILEPRO_INSN_MULHH_SS,
+  TILEPRO_INSN_MULHH_SU,
+  TILEPRO_INSN_MULHH_UU,
+  TILEPRO_INSN_MULHHA_SS,
+  TILEPRO_INSN_MULHHA_SU,
+  TILEPRO_INSN_MULHHA_UU,
+  TILEPRO_INSN_MULHHSA_UU,
+  TILEPRO_INSN_MULHL_SS,
+  TILEPRO_INSN_MULHL_SU,
+  TILEPRO_INSN_MULHL_US,
+  TILEPRO_INSN_MULHL_UU,
+  TILEPRO_INSN_MULHLA_SS,
+  TILEPRO_INSN_MULHLA_SU,
+  TILEPRO_INSN_MULHLA_US,
+  TILEPRO_INSN_MULHLA_UU,
+  TILEPRO_INSN_MULHLSA_UU,
+  TILEPRO_INSN_MULLL_SS,
+  TILEPRO_INSN_MULLL_SU,
+  TILEPRO_INSN_MULLL_UU,
+  TILEPRO_INSN_MULLLA_SS,
+  TILEPRO_INSN_MULLLA_SU,
+  TILEPRO_INSN_MULLLA_UU,
+  TILEPRO_INSN_MULLLSA_UU,
+  TILEPRO_INSN_MVNZ,
+  TILEPRO_INSN_MVZ,
+  TILEPRO_INSN_MZ,
+  TILEPRO_INSN_MZB,
+  TILEPRO_INSN_MZH,
+  TILEPRO_INSN_NAP,
+  TILEPRO_INSN_NOP,
+  TILEPRO_INSN_NOR,
+  TILEPRO_INSN_OR,
+  TILEPRO_INSN_PACKBS_U,
+  TILEPRO_INSN_PACKHB,
+  TILEPRO_INSN_PACKHS,
+  TILEPRO_INSN_PACKLB,
+  TILEPRO_INSN_PCNT,
+  TILEPRO_INSN_PREFETCH,
+  TILEPRO_INSN_PREFETCH_L1,
+  TILEPRO_INSN_RL,
+  TILEPRO_INSN_S1A,
+  TILEPRO_INSN_S2A,
+  TILEPRO_INSN_S3A,
+  TILEPRO_INSN_SADAB_U,
+  TILEPRO_INSN_SADAH,
+  TILEPRO_INSN_SADAH_U,
+  TILEPRO_INSN_SADB_U,
+  TILEPRO_INSN_SADH,
+  TILEPRO_INSN_SADH_U,
+  TILEPRO_INSN_SB,
+  TILEPRO_INSN_SEQ,
+  TILEPRO_INSN_SEQB,
+  TILEPRO_INSN_SEQH,
+  TILEPRO_INSN_SEQIB,
+  TILEPRO_INSN_SEQIH,
+  TILEPRO_INSN_SH,
+  TILEPRO_INSN_SHL,
+  TILEPRO_INSN_SHLB,
+  TILEPRO_INSN_SHLH,
+  TILEPRO_INSN_SHLIB,
+  TILEPRO_INSN_SHLIH,
+  TILEPRO_INSN_SHR,
+  TILEPRO_INSN_SHRB,
+  TILEPRO_INSN_SHRH,
+  TILEPRO_INSN_SHRIB,
+  TILEPRO_INSN_SHRIH,
+  TILEPRO_INSN_SLT,
+  TILEPRO_INSN_SLT_U,
+  TILEPRO_INSN_SLTB,
+  TILEPRO_INSN_SLTB_U,
+  TILEPRO_INSN_SLTE,
+  TILEPRO_INSN_SLTE_U,
+  TILEPRO_INSN_SLTEB,
+  TILEPRO_INSN_SLTEB_U,
+  TILEPRO_INSN_SLTEH,
+  TILEPRO_INSN_SLTEH_U,
+  TILEPRO_INSN_SLTH,
+  TILEPRO_INSN_SLTH_U,
+  TILEPRO_INSN_SLTIB,
+  TILEPRO_INSN_SLTIB_U,
+  TILEPRO_INSN_SLTIH,
+  TILEPRO_INSN_SLTIH_U,
+  TILEPRO_INSN_SNE,
+  TILEPRO_INSN_SNEB,
+  TILEPRO_INSN_SNEH,
+  TILEPRO_INSN_SRA,
+  TILEPRO_INSN_SRAB,
+  TILEPRO_INSN_SRAH,
+  TILEPRO_INSN_SRAIB,
+  TILEPRO_INSN_SRAIH,
+  TILEPRO_INSN_SUB,
+  TILEPRO_INSN_SUBB,
+  TILEPRO_INSN_SUBBS_U,
+  TILEPRO_INSN_SUBH,
+  TILEPRO_INSN_SUBHS,
+  TILEPRO_INSN_SUBS,
+  TILEPRO_INSN_SW,
+  TILEPRO_INSN_TBLIDXB0,
+  TILEPRO_INSN_TBLIDXB1,
+  TILEPRO_INSN_TBLIDXB2,
+  TILEPRO_INSN_TBLIDXB3,
+  TILEPRO_INSN_TNS,
+  TILEPRO_INSN_WH64,
+  TILEPRO_INSN_XOR,
+  TILEPRO_NETWORK_BARRIER,
+  TILEPRO_IDN0_RECEIVE,
+  TILEPRO_IDN1_RECEIVE,
+  TILEPRO_IDN_SEND,
+  TILEPRO_SN_RECEIVE,
+  TILEPRO_SN_SEND,
+  TILEPRO_UDN0_RECEIVE,
+  TILEPRO_UDN1_RECEIVE,
+  TILEPRO_UDN2_RECEIVE,
+  TILEPRO_UDN3_RECEIVE,
+  TILEPRO_UDN_SEND,
+  TILEPRO_BUILTIN_max
+};
+
+#endif /* !GCC_TILEPRO_BUILTINS_H */
diff --git a/gcc/config/tilepro/tilepro-c.c b/gcc/config/tilepro/tilepro-c.c
new file mode 100644 (file)
index 0000000..7eb95f1
--- /dev/null
@@ -0,0 +1,52 @@
+/* Definitions of C specific functions for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "machmode.h"
+#include "tm.h"
+#include "tm_p.h"
+#include "cpplib.h"
+#include "tree.h"
+#include "c-family/c-common.h"
+
+/* copy defines in c-cppbuiltin.c */
+# define builtin_define(TXT) cpp_define (pfile, TXT)
+# define builtin_assert(TXT) cpp_assert (pfile, TXT)
+
+
+/* Implement TARGET_CPU_CPP_BUILTINS.  */
+void
+tilepro_cpu_cpp_builtins (struct cpp_reader *pfile)
+{
+  builtin_define ("__tile__");
+  builtin_define ("__tilepro__");
+  builtin_assert ("cpu=tile");
+  builtin_assert ("machine=tile");
+  builtin_define ("__tile_chip__=1");
+  builtin_define ("__tile_chip_rev__=0");
+
+  TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
+  GNU_USER_TARGET_OS_CPP_BUILTINS ();
+}
+
+
diff --git a/gcc/config/tilepro/tilepro-generic.md b/gcc/config/tilepro/tilepro-generic.md
new file mode 100644 (file)
index 0000000..fcbb1d4
--- /dev/null
@@ -0,0 +1,108 @@
+;; Scheduling description for Tilera TILEPro chip.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_automaton "tile")
+
+; Make the scheduling automaton an ndfa.
+(automata_option "ndfa")
+
+; Name the three pipes.
+(define_cpu_unit "X0" "tile")
+(define_cpu_unit "X1" "tile")
+(define_cpu_unit "Y0" "tile")
+(define_cpu_unit "Y1" "tile")
+(define_cpu_unit "Y2" "tile")
+
+(define_insn_reservation "X0" 1
+  (eq_attr "type" "X0")
+  "X0")
+
+(define_insn_reservation "X0_2cycle" 2
+  (eq_attr "type" "X0_2cycle")
+  "X0,nothing")
+
+(define_insn_reservation "X1" 1
+  (eq_attr "type" "X1,X1_branch")
+  "X1")
+
+(define_insn_reservation "X1_2cycle" 2
+  (eq_attr "type" "X1_2cycle")
+  "X1,nothing")
+
+(define_insn_reservation "X1_L2" 8
+  (eq_attr "type" "X1_L2")
+  "X1")
+
+(define_insn_reservation "X1_miss" 80
+  (eq_attr "type" "X1_miss")
+  "X1")
+
+(define_insn_reservation "X01" 1
+  (eq_attr "type" "X01")
+  "X0|X1")
+
+(define_insn_reservation "Y0" 1
+  (eq_attr "type" "Y0")
+  "Y0|X0")
+
+(define_insn_reservation "Y0_2cycle" 2
+  (eq_attr "type" "Y0_2cycle")
+  "Y0|X0,nothing")
+
+(define_insn_reservation "Y2" 1
+  (eq_attr "type" "Y2")
+  "Y2|X1")
+
+(define_insn_reservation "Y2_2cycle" 2
+  (eq_attr "type" "Y2_2cycle")
+  "Y2|X1,nothing")
+
+(define_insn_reservation "Y2_L2" 8
+  (eq_attr "type" "Y2_L2")
+  "Y2|X1")
+
+(define_insn_reservation "Y2_miss" 80
+  (eq_attr "type" "Y2_miss")
+  "Y2|X1")
+
+(define_insn_reservation "Y01" 1
+  (eq_attr "type" "Y01")
+  "Y0|Y1|X0|X1")
+
+(define_insn_reservation "nothing" 0
+  (eq_attr "type" "nothing")
+  "nothing")
+
+(define_insn_reservation "cannot_bundle" 1
+  (eq_attr "type" "cannot_bundle")
+  "X0+X1")
+
+(define_insn_reservation "cannot_bundle_3cycle" 3
+  (eq_attr "type" "cannot_bundle_3cycle")
+  "X0+X1")
+
+(define_insn_reservation "cannot_bundle_4cycle" 4
+  (eq_attr "type" "cannot_bundle_4cycle")
+  "X0+X1")
+
+
+; A bundle must be in either X format or Y format.
+(exclusion_set "X0,X1" "Y0,Y1,Y2")
diff --git a/gcc/config/tilepro/tilepro-modes.def b/gcc/config/tilepro/tilepro-modes.def
new file mode 100644 (file)
index 0000000..0031f49
--- /dev/null
@@ -0,0 +1,35 @@
+/* TILEPro extra machine modes.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Extra modes for handling struct returns in up to 10 registers. */
+INT_MODE (R3I, 12);
+INT_MODE (R5I, 20);
+INT_MODE (R6I, 24);
+INT_MODE (R7I, 28);
+INT_MODE (R8I, 32);
+INT_MODE (R9I, 36);
+INT_MODE (R10I, 40);
+
+/* Vector modes.  */
+VECTOR_MODES (INT, 4);    /* V4QI V2HI */
+VECTOR_MODE (INT, QI, 8); /* V8QI */
+VECTOR_MODE (INT, HI, 4); /* V4HI */
+VECTOR_MODE (INT, QI, 2); /* V2QI */
diff --git a/gcc/config/tilepro/tilepro-multiply.h b/gcc/config/tilepro/tilepro-multiply.h
new file mode 100644 (file)
index 0000000..e3f8858
--- /dev/null
@@ -0,0 +1,83 @@
+/* Header for constant multiple table for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TILEPRO_MULTIPLY_H
+#define GCC_TILEPRO_MULTIPLY_H
+
+/* A node of a tilepro_multiply_insn_seq, corresponding to a single
+   machine instruction such as 'add', 's1a', or an shl by a
+   constant.  */
+struct tilepro_multiply_insn_seq_entry
+{
+  /* Which operation this node performs (e.g. an add or sub).  Don't
+     use this directly, call get_opcode() table to get a
+     insn_code.  */
+  unsigned char compressed_opcode;
+
+  /* The left-hand side of this expression tree.
+     If equal to 0, it refers to 'zero'.
+     If equal to 1, it refers to the original input to the multiply
+     operation.
+     Otherwise, subtract two and it is an index into the containing
+     tilepro_multiply_insn_seq's 'op' array. Since it can only point
+     to some value that has already been computed it will always point
+     to an earlier entry in the array.  */
+  unsigned char lhs;
+
+  /* This is like lhs, but for the right-hand side. However, for shift
+     opcodes this is a shift count rather than an operand index.  */
+  unsigned char rhs;
+};
+
+/* Maximum size of op array.  */
+#define tilepro_multiply_insn_seq_MAX_OPERATIONS 4
+
+/* This defines a DAG describing how to multiply by a constant in
+   terms of one or more machine instructions.  */
+struct tilepro_multiply_insn_seq
+{
+  /* The constant factor by which this expression tree multiplies its
+     input.  */
+  int multiplier;
+
+  /* The nodes of the parse tree. These are ordered so that
+     instructions can be emitted in the same order that they appear in
+     this array.  Entry entry in this array can only refer to earlier
+     entries in the array.  */
+  struct tilepro_multiply_insn_seq_entry
+    op[tilepro_multiply_insn_seq_MAX_OPERATIONS];
+
+};
+
+/* A mapping from the compressed opcode to the corresponding enum
+   insn_code.  */
+extern const enum insn_code tilepro_multiply_insn_seq_decode_opcode[];
+
+/* Table mapping constant int multipliers to an expression tree that
+   efficiently performs that multiplication.  This is sorted by its
+   'multiplier' field so a binary search can look for matches.  */
+extern const struct tilepro_multiply_insn_seq
+  tilepro_multiply_insn_seq_table[];
+
+/* The number of elements in multiply_insn_seq_table.  */
+extern const int tilepro_multiply_insn_seq_table_size;
+
+#endif /* !GCC_TILEPRO_MULTIPLY_H */
diff --git a/gcc/config/tilepro/tilepro-protos.h b/gcc/config/tilepro/tilepro-protos.h
new file mode 100644 (file)
index 0000000..9325bb9
--- /dev/null
@@ -0,0 +1,77 @@
+/* Prototypes of target machine for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC__TILEPRO_PROTOS_H
+#define GCC__TILEPRO_PROTOS_H
+
+
+extern void tilepro_init_expanders (void);
+extern bool tilepro_legitimate_pic_operand_p (rtx);
+extern rtx tilepro_simd_int (rtx, enum machine_mode);
+
+#ifdef RTX_CODE
+extern void split_di (rtx[], int, rtx[], rtx[]);
+extern bool tilepro_bitfield_operand_p (HOST_WIDE_INT, int *, int *);
+extern void tilepro_expand_set_const32 (rtx, rtx);
+extern bool tilepro_expand_mov (enum machine_mode, rtx *);
+extern void tilepro_expand_insv (rtx operands[4]);
+extern void tilepro_expand_unaligned_load (rtx, rtx, HOST_WIDE_INT,
+                                          HOST_WIDE_INT, bool);
+extern void tilepro_expand_movmisalign (enum machine_mode, rtx *);
+extern bool tilepro_expand_addsi (rtx, rtx, rtx);
+extern void tilepro_allocate_stack (rtx, rtx);
+extern bool tilepro_expand_mulsi (rtx, rtx, rtx);
+extern void tilepro_expand_smulsi3_highpart (rtx, rtx, rtx);
+extern void tilepro_expand_umulsi3_highpart (rtx, rtx, rtx);
+
+extern bool tilepro_emit_setcc (rtx[], enum machine_mode);
+extern void tilepro_emit_conditional_branch (rtx[], enum machine_mode);
+extern rtx tilepro_emit_conditional_move (rtx);
+extern const char *tilepro_output_cbranch_with_opcode (rtx, rtx *,
+                                                      const char *,
+                                                      const char *, int,
+                                                      bool);
+extern const char *tilepro_output_cbranch (rtx, rtx *, bool);
+extern void tilepro_expand_tablejump (rtx, rtx);
+extern void tilepro_expand_builtin_vector_binop (rtx (*)(rtx, rtx, rtx),
+                                                enum machine_mode, rtx,
+                                                enum machine_mode, rtx, rtx,
+                                                bool);
+#endif /* RTX_CODE */
+
+extern bool tilepro_can_use_return_insn_p (void);
+extern void tilepro_expand_prologue (void);
+extern void tilepro_expand_epilogue (bool);
+extern int tilepro_initial_elimination_offset (int, int);
+extern rtx tilepro_return_addr (int, rtx);
+extern rtx tilepro_eh_return_handler_rtx (void);
+extern int tilepro_adjust_insn_length (rtx, int);
+
+extern int tilepro_asm_preferred_eh_data_format (int, int);
+extern void tilepro_final_prescan_insn (rtx);
+extern const char *tilepro_asm_output_opcode (FILE *, const char *);
+extern void tilepro_function_profiler (FILE *, int);
+
+/* Declare functions in tile-c.c */
+
+extern void tilepro_cpu_cpp_builtins (struct cpp_reader *);
+
+#endif /* GCC_TILEPRO_PROTOS_H */
diff --git a/gcc/config/tilepro/tilepro.c b/gcc/config/tilepro/tilepro.c
new file mode 100644 (file)
index 0000000..71b5807
--- /dev/null
@@ -0,0 +1,5084 @@
+/* Subroutines used for code generation on the Tilera TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "rtl.h"
+#include "regs.h"
+#include "insn-config.h"
+#include "output.h"
+#include "insn-attr.h"
+#include "recog.h"
+#include "expr.h"
+#include "langhooks.h"
+#include "optabs.h"
+#include "sched-int.h"
+#include "sel-sched.h"
+#include "tm_p.h"
+#include "tm-constrs.h"
+#include "target.h"
+#include "target-def.h"
+#include "integrate.h"
+#include "dwarf2.h"
+#include "timevar.h"
+#include "gimple.h"
+#include "cfgloop.h"
+#include "tilepro-builtins.h"
+#include "tilepro-multiply.h"
+#include "diagnostic.h"
+
+/* SYMBOL_REF for GOT */
+static GTY(()) rtx g_got_symbol = NULL;
+
+/* In case of a POST_INC or POST_DEC memory reference, we must report
+   the mode of the memory reference from TARGET_PRINT_OPERAND to
+   TARGET_PRINT_OPERAND_ADDRESS.  */
+static enum machine_mode output_memory_reference_mode;
+
+/* Report whether we're printing out the first address fragment of a
+   POST_INC or POST_DEC memory reference, from TARGET_PRINT_OPERAND to
+   TARGET_PRINT_OPERAND_ADDRESS.  */
+static bool output_memory_autoinc_first;
+
+\f
+
+/* Option handling  */
+
+/* Implement TARGET_OPTION_OVERRIDE.  */
+static void
+tilepro_option_override (void)
+{
+  /* When modulo scheduling is enabled, we still rely on regular
+     scheduler for bundling.  */
+  if (flag_modulo_sched)
+    flag_resched_modulo_sched = 1;
+}
+\f
+
+
+/* Implement TARGET_SCALAR_MODE_SUPPORTED_P.  */
+static bool
+tilepro_scalar_mode_supported_p (enum machine_mode mode)
+{
+  switch (mode)
+    {
+    case QImode:
+    case HImode:
+    case SImode:
+    case DImode:
+      return true;
+
+    case SFmode:
+    case DFmode:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+
+/* Implement TARGET_VECTOR_MODE_SUPPORTED_P.  */
+static bool
+tile_vector_mode_supported_p (enum machine_mode mode)
+{
+  return mode == V4QImode || mode == V2HImode;
+}
+
+
+/* Implement TARGET_CANNOT_FORCE_CONST_MEM.  */
+static bool
+tilepro_cannot_force_const_mem (enum machine_mode mode ATTRIBUTE_UNUSED,
+                               rtx x ATTRIBUTE_UNUSED)
+{
+  return true;
+}
+
+
+/* Implement TARGET_FUNCTION_OK_FOR_SIBCALL.  */
+static bool
+tilepro_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
+{
+  return decl != NULL;
+}
+
+
+/* Implement TARGET_PASS_BY_REFERENCE.  Variable sized types are
+   passed by reference.  */
+static bool
+tilepro_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
+                          enum machine_mode mode ATTRIBUTE_UNUSED,
+                          const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  return (type && TYPE_SIZE (type)
+         && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST);
+}
+
+
+/* Implement TARGET_RETURN_IN_MEMORY.  */
+static bool
+tilepro_return_in_memory (const_tree type, const_tree fndecl ATTRIBUTE_UNUSED)
+{
+  return !IN_RANGE (int_size_in_bytes (type),
+                   0, TILEPRO_NUM_RETURN_REGS * UNITS_PER_WORD);
+}
+
+
+/* Implement TARGET_FUNCTION_ARG_BOUNDARY.  */
+static unsigned int
+tilepro_function_arg_boundary (enum machine_mode mode, const_tree type)
+{
+  unsigned int alignment;
+
+  alignment = type ? TYPE_ALIGN (type) : GET_MODE_ALIGNMENT (mode);
+  if (alignment < PARM_BOUNDARY)
+    alignment = PARM_BOUNDARY;
+  if (alignment > STACK_BOUNDARY)
+    alignment = STACK_BOUNDARY;
+  return alignment;
+}
+
+
+/* Implement TARGET_FUNCTION_ARG.  */
+static rtx
+tilepro_function_arg (cumulative_args_t cum_v,
+                     enum machine_mode mode,
+                     const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  CUMULATIVE_ARGS cum = *get_cumulative_args (cum_v);
+  int byte_size = ((mode == BLKmode)
+                  ? int_size_in_bytes (type) : GET_MODE_SIZE (mode));
+  bool doubleword_aligned_p;
+
+  if (cum >= TILEPRO_NUM_ARG_REGS)
+    return NULL_RTX;
+
+  /* See whether the argument has doubleword alignment.  */
+  doubleword_aligned_p =
+    tilepro_function_arg_boundary (mode, type) > BITS_PER_WORD;
+
+  if (doubleword_aligned_p)
+    cum += cum & 1;
+
+  /* The ABI does not allow parameters to be passed partially in reg
+     and partially in stack.  */
+  if ((cum + (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+      > TILEPRO_NUM_ARG_REGS)
+    return NULL_RTX;
+
+  return gen_rtx_REG (mode, cum);
+}
+
+
+/* Implement TARGET_FUNCTION_ARG_ADVANCE.  */
+static void
+tilepro_function_arg_advance (cumulative_args_t cum_v,
+                             enum machine_mode mode,
+                             const_tree type, bool named ATTRIBUTE_UNUSED)
+{
+  CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v);
+
+  int byte_size = ((mode == BLKmode)
+                  ? int_size_in_bytes (type) : GET_MODE_SIZE (mode));
+  int word_size = (byte_size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+  bool doubleword_aligned_p;
+
+  /* See whether the argument has doubleword alignment.  */
+  doubleword_aligned_p =
+    tilepro_function_arg_boundary (mode, type) > BITS_PER_WORD;
+
+  if (doubleword_aligned_p)
+    *cum += *cum & 1;
+
+  /* If the current argument does not fit in the pretend_args space,
+     skip over it.  */
+  if (*cum < TILEPRO_NUM_ARG_REGS
+      && *cum + word_size > TILEPRO_NUM_ARG_REGS)
+    *cum = TILEPRO_NUM_ARG_REGS;
+
+  *cum += word_size;
+}
+
+
+/* Implement TARGET_FUNCTION_VALUE.  */
+static rtx
+tilepro_function_value (const_tree valtype, const_tree fn_decl_or_type,
+                       bool outgoing ATTRIBUTE_UNUSED)
+{
+  enum machine_mode mode;
+  int unsigned_p;
+
+  mode = TYPE_MODE (valtype);
+  unsigned_p = TYPE_UNSIGNED (valtype);
+
+  mode = promote_function_mode (valtype, mode, &unsigned_p,
+                               fn_decl_or_type, 1);
+
+  return gen_rtx_REG (mode, 0);
+}
+
+
+/* Implement TARGET_LIBCALL_VALUE.  */
+static rtx
+tilepro_libcall_value (enum machine_mode mode,
+                      const_rtx fun ATTRIBUTE_UNUSED)
+{
+  return gen_rtx_REG (mode, 0);
+}
+
+
+/* Implement FUNCTION_VALUE_REGNO_P.  */
+static bool
+tilepro_function_value_regno_p (const unsigned int regno)
+{
+  return regno < TILEPRO_NUM_RETURN_REGS;
+}
+
+
+/* Implement TARGET_BUILD_BUILTIN_VA_LIST.  */
+static tree
+tilepro_build_builtin_va_list (void)
+{
+  tree f_args, f_skip, record, type_decl;
+  bool owp;
+
+  record = lang_hooks.types.make_type (RECORD_TYPE);
+
+  type_decl = build_decl (BUILTINS_LOCATION, TYPE_DECL,
+                         get_identifier ("__va_list_tag"), record);
+
+  f_args = build_decl (BUILTINS_LOCATION, FIELD_DECL,
+                      get_identifier ("__args"), ptr_type_node);
+  f_skip = build_decl (BUILTINS_LOCATION, FIELD_DECL,
+                      get_identifier ("__skip"), ptr_type_node);
+
+  DECL_FIELD_CONTEXT (f_args) = record;
+
+  DECL_FIELD_CONTEXT (f_skip) = record;
+
+  TREE_CHAIN (record) = type_decl;
+  TYPE_NAME (record) = type_decl;
+  TYPE_FIELDS (record) = f_args;
+  TREE_CHAIN (f_args) = f_skip;
+
+  /* We know this is being padded and we want it too.  It is an
+     internal type so hide the warnings from the user.  */
+  owp = warn_padded;
+  warn_padded = false;
+
+  layout_type (record);
+
+  warn_padded = owp;
+
+  /* The correct type is an array type of one element.  */
+  return record;
+}
+
+
+/* Implement TARGET_EXPAND_BUILTIN_VA_START.  */
+static void
+tilepro_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED)
+{
+  tree f_args, f_skip;
+  tree args, skip, t;
+
+  f_args = TYPE_FIELDS (TREE_TYPE (valist));
+  f_skip = TREE_CHAIN (f_args);
+
+  args =
+    build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
+  skip =
+    build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
+
+  /* Find the __args area.  */
+  t = make_tree (TREE_TYPE (args), virtual_incoming_args_rtx);
+  t = fold_build_pointer_plus_hwi (t,
+                                  UNITS_PER_WORD *
+                                  (crtl->args.info - TILEPRO_NUM_ARG_REGS));
+
+  if (crtl->args.pretend_args_size > 0)
+    t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
+
+  t = build2 (MODIFY_EXPR, TREE_TYPE (args), args, t);
+  TREE_SIDE_EFFECTS (t) = 1;
+  expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
+
+  /* Find the __skip area.  */
+  t = make_tree (TREE_TYPE (skip), virtual_incoming_args_rtx);
+  t = fold_build_pointer_plus_hwi (t, -STACK_POINTER_OFFSET);
+  t = build2 (MODIFY_EXPR, TREE_TYPE (skip), skip, t);
+  TREE_SIDE_EFFECTS (t) = 1;
+  expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
+}
+
+
+/* Implement TARGET_SETUP_INCOMING_VARARGS.  */
+static void
+tilepro_setup_incoming_varargs (cumulative_args_t cum,
+                               enum machine_mode mode,
+                               tree type, int *pretend_args, int no_rtl)
+{
+  CUMULATIVE_ARGS local_cum = *get_cumulative_args (cum);
+  int first_reg;
+
+  /* The caller has advanced CUM up to, but not beyond, the last named
+     argument.  Advance a local copy of CUM past the last "real" named
+     argument, to find out how many registers are left over.  */
+  targetm.calls.function_arg_advance (pack_cumulative_args (&local_cum),
+                                     mode, type, true);
+  first_reg = local_cum;
+
+  if (local_cum < TILEPRO_NUM_ARG_REGS)
+    {
+      *pretend_args = UNITS_PER_WORD * (TILEPRO_NUM_ARG_REGS - first_reg);
+
+      if (!no_rtl)
+       {
+         alias_set_type set = get_varargs_alias_set ();
+         rtx tmp =
+           gen_rtx_MEM (BLKmode, plus_constant (virtual_incoming_args_rtx,
+                                                -STACK_POINTER_OFFSET -
+                                                UNITS_PER_WORD *
+                                                (TILEPRO_NUM_ARG_REGS -
+                                                 first_reg)));
+         MEM_NOTRAP_P (tmp) = 1;
+         set_mem_alias_set (tmp, set);
+         move_block_from_reg (first_reg, tmp,
+                              TILEPRO_NUM_ARG_REGS - first_reg);
+       }
+    }
+  else
+    *pretend_args = 0;
+}
+
+
+/* Implement TARGET_GIMPLIFY_VA_ARG_EXPR.  Gimplify va_arg by updating
+   the va_list structure VALIST as required to retrieve an argument of
+   type TYPE, and returning that argument.
+   
+   ret = va_arg(VALIST, TYPE);
+
+   generates code equivalent to:
+  
+    paddedsize = (sizeof(TYPE) + 3) & -4;
+    if ((VALIST.__args + paddedsize > VALIST.__skip)
+       & (VALIST.__args <= VALIST.__skip))
+      addr = VALIST.__skip + STACK_POINTER_OFFSET;
+    else
+      addr = VALIST.__args;
+    VALIST.__args = addr + paddedsize;
+    ret = *(TYPE *)addr;                                          */
+static tree
+tilepro_gimplify_va_arg_expr (tree valist, tree type, gimple_seq * pre_p,
+                             gimple_seq * post_p ATTRIBUTE_UNUSED)
+{
+  tree f_args, f_skip;
+  tree args, skip;
+  HOST_WIDE_INT size, rsize;
+  tree addr, tmp;
+  bool pass_by_reference_p;
+
+  f_args = TYPE_FIELDS (va_list_type_node);
+  f_skip = TREE_CHAIN (f_args);
+
+  args =
+    build3 (COMPONENT_REF, TREE_TYPE (f_args), valist, f_args, NULL_TREE);
+  skip =
+    build3 (COMPONENT_REF, TREE_TYPE (f_skip), valist, f_skip, NULL_TREE);
+
+  addr = create_tmp_var (ptr_type_node, "va_arg");
+
+  /* if an object is dynamically sized, a pointer to it is passed
+     instead of the object itself.  */
+  pass_by_reference_p = pass_by_reference (NULL, TYPE_MODE (type), type,
+                                          false);
+
+  if (pass_by_reference_p)
+    type = build_pointer_type (type);
+
+  size = int_size_in_bytes (type);
+  rsize = ((size + UNITS_PER_WORD - 1) / UNITS_PER_WORD) * UNITS_PER_WORD;
+
+  /* If the alignment of the type is greater than the default for a
+     parameter, align to STACK_BOUNDARY.  */
+  if (TYPE_ALIGN (type) > PARM_BOUNDARY)
+    {
+      /* Assert the only case we generate code for: when
+         stack boundary = 2 * parm boundary.  */
+      gcc_assert (STACK_BOUNDARY == PARM_BOUNDARY * 2);
+
+      tmp = build2 (BIT_AND_EXPR, sizetype,
+                   fold_convert (sizetype, unshare_expr (args)),
+                   size_int (PARM_BOUNDARY / 8));
+      tmp = build2 (POINTER_PLUS_EXPR, ptr_type_node,
+                   unshare_expr (args), tmp);
+
+      gimplify_assign (unshare_expr (args), tmp, pre_p);
+    }
+
+  /* Build conditional expression to calculate addr. The expression
+     will be gimplified later.  */
+  tmp = fold_build_pointer_plus_hwi (unshare_expr (args), rsize);
+  tmp = build2 (TRUTH_AND_EXPR, boolean_type_node,
+               build2 (GT_EXPR, boolean_type_node, tmp, unshare_expr (skip)),
+               build2 (LE_EXPR, boolean_type_node, unshare_expr (args),
+                       unshare_expr (skip)));
+
+  tmp = build3 (COND_EXPR, ptr_type_node, tmp,
+               build2 (POINTER_PLUS_EXPR, ptr_type_node, unshare_expr (skip),
+                       size_int (STACK_POINTER_OFFSET)),
+               unshare_expr (args));
+
+  gimplify_assign (addr, tmp, pre_p);
+
+  /* Update VALIST.__args.  */
+  tmp = fold_build_pointer_plus_hwi (addr, rsize);
+  gimplify_assign (unshare_expr (args), tmp, pre_p);
+
+  addr = fold_convert (build_pointer_type (type), addr);
+
+  if (pass_by_reference_p)
+    addr = build_va_arg_indirect_ref (addr);
+
+  return build_va_arg_indirect_ref (addr);
+}
+\f
+
+
+/* Implement TARGET_RTX_COSTS.  */
+static bool
+tilepro_rtx_costs (rtx x, int code, int outer_code, int opno, int *total,
+                  bool speed)
+{
+  switch (code)
+    {
+    case CONST_INT:
+      /* If this is an 8-bit constant, return zero since it can be
+         used nearly anywhere with no cost.  If it is a valid operand
+         for an ADD or AND, likewise return 0 if we know it will be
+         used in that context.  Otherwise, return 2 since it might be
+         used there later.  All other constants take at least two
+         insns.  */
+      if (satisfies_constraint_I (x))
+       {
+         *total = 0;
+         return true;
+       }
+      else if (outer_code == PLUS && add_operand (x, VOIDmode))
+       {
+         /* Slightly penalize large constants even though we can add
+            them in one instruction, because it forces the use of
+            2-wide bundling mode.  */
+         *total = 1;
+         return true;
+       }
+      else if (move_operand (x, SImode))
+       {
+         /* We can materialize in one move.  */
+         *total = COSTS_N_INSNS (1);
+         return true;
+       }
+      else
+       {
+         /* We can materialize in two moves.  */
+         *total = COSTS_N_INSNS (2);
+         return true;
+       }
+
+      return false;
+
+    case CONST:
+    case LABEL_REF:
+    case SYMBOL_REF:
+      *total = COSTS_N_INSNS (2);
+      return true;
+
+    case CONST_DOUBLE:
+      *total = COSTS_N_INSNS (4);
+      return true;
+
+    case HIGH:
+      *total = 0;
+      return true;
+
+    case MEM:
+      /* If outer-code was a sign or zero extension, a cost of
+         COSTS_N_INSNS (1) was already added in, so account for
+         that.  */
+      if (outer_code == ZERO_EXTEND || outer_code == SIGN_EXTEND)
+       *total = COSTS_N_INSNS (1);
+      else
+       *total = COSTS_N_INSNS (2);
+      return true;
+
+    case PLUS:
+      /* Convey that s[123]a are efficient.  */
+      if (GET_CODE (XEXP (x, 0)) == MULT
+         && cint_248_operand (XEXP (XEXP (x, 0), 1), VOIDmode))
+       {
+         *total = (rtx_cost (XEXP (XEXP (x, 0), 0),
+                             (enum rtx_code) outer_code, opno, speed)
+                   + rtx_cost (XEXP (x, 1),
+                               (enum rtx_code) outer_code, opno, speed)
+                   + COSTS_N_INSNS (1));
+         return true;
+       }
+      return false;
+
+    case MULT:
+      *total = COSTS_N_INSNS (2);
+      return false;
+
+    case SIGN_EXTEND:
+    case ZERO_EXTEND:
+      if (outer_code == MULT)
+       *total = 0;
+      else
+       *total = COSTS_N_INSNS (1);
+      return false;
+
+    case DIV:
+    case UDIV:
+    case MOD:
+    case UMOD:
+      /* These are handled by software and are very expensive.  */
+      *total = COSTS_N_INSNS (100);
+      return false;
+
+    case UNSPEC:
+    case UNSPEC_VOLATILE:
+      {
+       int num = XINT (x, 1);
+
+       if (num <= TILEPRO_LAST_LATENCY_1_INSN)
+         *total = COSTS_N_INSNS (1);
+       else if (num <= TILEPRO_LAST_LATENCY_2_INSN)
+         *total = COSTS_N_INSNS (2);
+       else if (num > TILEPRO_LAST_LATENCY_INSN)
+         {
+           if (outer_code == PLUS)
+             *total = 0;
+           else
+             *total = COSTS_N_INSNS (1);
+         }
+       else
+         {
+           switch (num)
+             {
+             case UNSPEC_BLOCKAGE:
+             case UNSPEC_NETWORK_BARRIER:
+               *total = 0;
+               break;
+
+             case UNSPEC_LNK_AND_LABEL:
+             case UNSPEC_MF:
+             case UNSPEC_NETWORK_RECEIVE:
+             case UNSPEC_NETWORK_SEND:
+             case UNSPEC_TLS_GD_ADD:
+               *total = COSTS_N_INSNS (1);
+               break;
+
+             case UNSPEC_TLS_IE_LOAD:
+               *total = COSTS_N_INSNS (2);
+               break;
+
+             case UNSPEC_SP_SET:
+               *total = COSTS_N_INSNS (3);
+               break;
+
+             case UNSPEC_SP_TEST:
+               *total = COSTS_N_INSNS (4);
+               break;
+
+             case UNSPEC_LATENCY_L2:
+               *total = COSTS_N_INSNS (8);
+               break;
+
+             case UNSPEC_TLS_GD_CALL:
+               *total = COSTS_N_INSNS (30);
+               break;
+
+             case UNSPEC_LATENCY_MISS:
+               *total = COSTS_N_INSNS (80);
+               break;
+
+             default:
+               *total = COSTS_N_INSNS (1);
+             }
+         }
+       return true;
+      }
+
+    default:
+      return false;
+    }
+}
+\f
+
+
+/* Returns an SImode integer rtx with value VAL.  */
+static rtx
+gen_int_si (HOST_WIDE_INT val)
+{
+  return gen_int_mode (val, SImode);
+}
+
+
+/* Create a temporary variable to hold a partial result, to enable
+   CSE.  */
+static rtx
+create_temp_reg_if_possible (enum machine_mode mode, rtx default_reg)
+{
+  return can_create_pseudo_p ()? gen_reg_rtx (mode) : default_reg;
+}
+
+
+/* Functions to save and restore machine-specific function data.  */
+static struct machine_function *
+tilepro_init_machine_status (void)
+{
+  return ggc_alloc_cleared_machine_function ();
+}
+
+
+/* Do anything needed before RTL is emitted for each function.  */
+void
+tilepro_init_expanders (void)
+{
+  /* Arrange to initialize and mark the machine per-function
+     status.  */
+  init_machine_status = tilepro_init_machine_status;
+
+  if (cfun && cfun->machine && flag_pic)
+    {
+      static int label_num = 0;
+
+      char text_label_name[32];
+
+      struct machine_function *machine = cfun->machine;
+
+      ASM_GENERATE_INTERNAL_LABEL (text_label_name, "L_PICLNK", label_num++);
+
+      machine->text_label_symbol =
+       gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (text_label_name));
+
+      machine->text_label_rtx =
+       gen_rtx_REG (Pmode, TILEPRO_PIC_TEXT_LABEL_REGNUM);
+
+      machine->got_rtx = gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM);
+
+      machine->calls_tls_get_addr = false;
+    }
+}
+
+
+/* Return true if X contains a thread-local symbol.  */
+static bool
+tilepro_tls_referenced_p (rtx x)
+{
+  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == PLUS)
+    x = XEXP (XEXP (x, 0), 0);
+
+  if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (x))
+    return true;
+
+  /* That's all we handle in tilepro_legitimize_tls_address for
+     now.  */
+  return false;
+}
+
+
+/* Return true if X requires a scratch register.  It is given that
+   flag_pic is on and that X satisfies CONSTANT_P.  */
+static int
+tilepro_pic_address_needs_scratch (rtx x)
+{
+  if (GET_CODE (x) == CONST
+      && GET_CODE (XEXP (x, 0)) == PLUS
+      && (GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF
+         || GET_CODE (XEXP (XEXP (x, 0), 0)) == LABEL_REF)
+      && CONST_INT_P (XEXP (XEXP (x, 0), 1)))
+    return true;
+
+  return false;
+}
+
+
+/* Implement TARGET_LEGITIMATE_CONSTANT_P.  This is all constants for
+   which we are willing to load the value into a register via a move
+   pattern.  TLS cannot be treated as a constant because it can
+   include a function call.  */
+static bool
+tilepro_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
+{
+  switch (GET_CODE (x))
+    {
+    case CONST:
+    case SYMBOL_REF:
+      return !tilepro_tls_referenced_p (x);
+
+    default:
+      return true;
+    }
+}
+
+
+/* Return true if the constant value X is a legitimate general operand
+   when generating PIC code.  It is given that flag_pic is on and that
+   X satisfies CONSTANT_P.  */
+bool
+tilepro_legitimate_pic_operand_p (rtx x)
+{
+  if (tilepro_pic_address_needs_scratch (x))
+    return false;
+
+  if (tilepro_tls_referenced_p (x))
+    return false;
+
+  return true;
+}
+
+
+/* Return true if the rtx X can be used as an address operand.  */
+static bool
+tilepro_legitimate_address_p (enum machine_mode ARG_UNUSED (mode), rtx x,
+                             bool strict)
+{
+  if (GET_CODE (x) == SUBREG)
+    x = SUBREG_REG (x);
+
+  switch (GET_CODE (x))
+    {
+    case POST_INC:
+    case POST_DEC:
+      if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+       return false;
+
+      x = XEXP (x, 0);
+      break;
+
+    case POST_MODIFY:
+      if (GET_MODE_SIZE (GET_MODE (x)) > UNITS_PER_WORD)
+       return false;
+
+      if (GET_CODE (XEXP (x, 1)) != PLUS)
+       return false;
+
+      if (!rtx_equal_p (XEXP (x, 0), XEXP (XEXP (x, 1), 0)))
+       return false;
+
+      if (!satisfies_constraint_I (XEXP (XEXP (x, 1), 1)))
+       return false;
+
+      x = XEXP (x, 0);
+      break;
+
+    case REG:
+      break;
+
+    default:
+      return false;
+    }
+
+  /* Check if x is a valid reg.  */
+  if (!REG_P (x))
+    return false;
+
+  if (strict)
+    return REGNO_OK_FOR_BASE_P (REGNO (x));
+  else
+    return true;
+}
+
+
+/* Return the rtx containing SYMBOL_REF to the text label.  */
+static rtx
+tilepro_text_label_symbol (void)
+{
+  return cfun->machine->text_label_symbol;
+}
+
+
+/* Return the register storing the value of the text label.  */
+static rtx
+tilepro_text_label_rtx (void)
+{
+  return cfun->machine->text_label_rtx;
+}
+
+
+/* Return the register storing the value of the global offset
+   table.  */
+static rtx
+tilepro_got_rtx (void)
+{
+  return cfun->machine->got_rtx;
+}
+
+
+/* Return the SYMBOL_REF for _GLOBAL_OFFSET_TABLE_.  */
+static rtx
+tilepro_got_symbol (void)
+{
+  if (g_got_symbol == NULL)
+    g_got_symbol = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_");
+
+  return g_got_symbol;
+}
+
+
+/* Return a reference to the got to be used by tls references.  */
+static rtx
+tilepro_tls_got (void)
+{
+  rtx temp;
+  if (flag_pic)
+    {
+      crtl->uses_pic_offset_table = 1;
+      return tilepro_got_rtx ();
+    }
+
+  temp = gen_reg_rtx (Pmode);
+  emit_move_insn (temp, tilepro_got_symbol ());
+
+  return temp;
+}
+
+
+/* ADDR contains a thread-local SYMBOL_REF.  Generate code to compute
+   this (thread-local) address.  */
+static rtx
+tilepro_legitimize_tls_address (rtx addr)
+{
+  rtx ret;
+
+  gcc_assert (can_create_pseudo_p ());
+
+  if (GET_CODE (addr) == SYMBOL_REF)
+    switch (SYMBOL_REF_TLS_MODEL (addr))
+      {
+      case TLS_MODEL_GLOBAL_DYNAMIC:
+      case TLS_MODEL_LOCAL_DYNAMIC:
+       {
+         rtx r0, temp1, temp2, temp3, got, last;
+
+         ret = gen_reg_rtx (Pmode);
+         r0 = gen_rtx_REG (Pmode, 0);
+         temp1 = gen_reg_rtx (Pmode);
+         temp2 = gen_reg_rtx (Pmode);
+         temp3 = gen_reg_rtx (Pmode);
+
+         got = tilepro_tls_got ();
+         emit_insn (gen_tls_gd_addhi (temp1, got, addr));
+         emit_insn (gen_tls_gd_addlo (temp2, temp1, addr));
+         emit_move_insn (r0, temp2);
+         emit_insn (gen_tls_gd_call (addr));
+         emit_move_insn (temp3, r0);
+         last = emit_insn (gen_tls_gd_add (ret, temp3, addr));
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      case TLS_MODEL_INITIAL_EXEC:
+       {
+         rtx temp1, temp2, temp3, got, last;
+
+         ret = gen_reg_rtx (Pmode);
+         temp1 = gen_reg_rtx (Pmode);
+         temp2 = gen_reg_rtx (Pmode);
+         temp3 = gen_reg_rtx (Pmode);
+
+         got = tilepro_tls_got ();
+         emit_insn (gen_tls_ie_addhi (temp1, got, addr));
+         emit_insn (gen_tls_ie_addlo (temp2, temp1, addr));
+         emit_insn (gen_tls_ie_load (temp3, temp2, addr));
+         last =
+           emit_move_insn(ret,
+                          gen_rtx_PLUS (Pmode,
+                                        gen_rtx_REG (Pmode,
+                                                     THREAD_POINTER_REGNUM),
+                                        temp3));
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      case TLS_MODEL_LOCAL_EXEC:
+       {
+         rtx temp1, last;
+
+         ret = gen_reg_rtx (Pmode);
+         temp1 = gen_reg_rtx (Pmode);
+
+         emit_insn (gen_tls_le_addhi (temp1,
+                                      gen_rtx_REG (Pmode,
+                                                   THREAD_POINTER_REGNUM),
+                                      addr));
+         last = emit_insn (gen_tls_le_addlo (ret, temp1, addr));
+         set_unique_reg_note (last, REG_EQUAL, copy_rtx (addr));
+         break;
+       }
+      default:
+       gcc_unreachable ();
+      }
+  else if (GET_CODE (addr) == CONST)
+    {
+      rtx base, offset;
+
+      gcc_assert (GET_CODE (XEXP (addr, 0)) == PLUS);
+
+      base = tilepro_legitimize_tls_address (XEXP (XEXP (addr, 0), 0));
+      offset = XEXP (XEXP (addr, 0), 1);
+
+      base = force_operand (base, NULL_RTX);
+      ret = force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
+    }
+  else
+    gcc_unreachable ();
+
+  return ret;
+}
+
+
+/* Legitimize PIC addresses.  If the address is already
+   position-independent, we return ORIG.  Newly generated
+   position-independent addresses go into a reg.  This is REG if
+   nonzero, otherwise we allocate register(s) as necessary.  */
+static rtx
+tilepro_legitimize_pic_address (rtx orig,
+                               enum machine_mode mode ATTRIBUTE_UNUSED,
+                               rtx reg)
+{
+  if (GET_CODE (orig) == SYMBOL_REF)
+    {
+      rtx address, pic_ref;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      if (SYMBOL_REF_LOCAL_P (orig))
+       {
+         /* If not during reload, allocate another temp reg here for
+            loading in the address, so that these instructions can be
+            optimized properly.  */
+         rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
+         rtx text_label_symbol = tilepro_text_label_symbol ();
+         rtx text_label_rtx = tilepro_text_label_rtx ();
+
+         emit_insn (gen_addli_pcrel (temp_reg, text_label_rtx, orig,
+                                     text_label_symbol));
+         emit_insn (gen_auli_pcrel (temp_reg, temp_reg, orig,
+                                    text_label_symbol));
+
+         /* Note: this is conservative.  We use the text_label but we
+            don't use the pic_offset_table.  However, in some cases
+            we may need the pic_offset_table (see
+            tilepro_fixup_pcrel_references).  */
+         crtl->uses_pic_offset_table = 1;
+
+         address = temp_reg;
+
+         emit_move_insn (reg, address);
+         return reg;
+       }
+      else
+       {
+         /* If not during reload, allocate another temp reg here for
+            loading in the address, so that these instructions can be
+            optimized properly.  */
+         rtx temp_reg = create_temp_reg_if_possible (Pmode, reg);
+
+         gcc_assert (flag_pic);
+         if (flag_pic == 1)
+           {
+             emit_insn (gen_add_got16 (temp_reg,
+                                       tilepro_got_rtx (), orig));
+           }
+         else
+           {
+             rtx temp_reg2 = create_temp_reg_if_possible (Pmode, reg);
+             emit_insn (gen_addhi_got32 (temp_reg2,
+                                         tilepro_got_rtx (), orig));
+             emit_insn (gen_addlo_got32 (temp_reg, temp_reg2, orig));
+           }
+
+         address = temp_reg;
+
+         pic_ref = gen_const_mem (Pmode, address);
+         crtl->uses_pic_offset_table = 1;
+         emit_move_insn (reg, pic_ref);
+         /* The following put a REG_EQUAL note on this insn, so that
+            it can be optimized by loop.  But it causes the label to
+            be optimized away.  */
+         /* set_unique_reg_note (insn, REG_EQUAL, orig); */
+         return reg;
+       }
+    }
+  else if (GET_CODE (orig) == CONST)
+    {
+      rtx base, offset;
+
+      if (GET_CODE (XEXP (orig, 0)) == PLUS
+         && XEXP (XEXP (orig, 0), 0) == tilepro_got_rtx ())
+       return orig;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      gcc_assert (GET_CODE (XEXP (orig, 0)) == PLUS);
+      base = tilepro_legitimize_pic_address (XEXP (XEXP (orig, 0), 0), Pmode,
+                                            reg);
+      offset =
+       tilepro_legitimize_pic_address (XEXP (XEXP (orig, 0), 1), Pmode,
+                                       base == reg ? 0 : reg);
+
+      if (CONST_INT_P (offset))
+       {
+         if (can_create_pseudo_p ())
+           offset = force_reg (Pmode, offset);
+         else
+           /* If we reach here, then something is seriously
+              wrong.  */
+           gcc_unreachable ();
+       }
+
+      if (can_create_pseudo_p ())
+       return force_reg (Pmode, gen_rtx_PLUS (Pmode, base, offset));
+      else
+       gcc_unreachable ();
+    }
+  else if (GET_CODE (orig) == LABEL_REF)
+    {
+      rtx address, temp_reg;
+      rtx text_label_symbol;
+      rtx text_label_rtx;
+
+      if (reg == 0)
+       {
+         gcc_assert (can_create_pseudo_p ());
+         reg = gen_reg_rtx (Pmode);
+       }
+
+      /* If not during reload, allocate another temp reg here for
+         loading in the address, so that these instructions can be
+         optimized properly.  */
+      temp_reg = create_temp_reg_if_possible (Pmode, reg);
+      text_label_symbol = tilepro_text_label_symbol ();
+      text_label_rtx = tilepro_text_label_rtx ();
+
+      emit_insn (gen_addli_pcrel (temp_reg, text_label_rtx, orig,
+                                 text_label_symbol));
+      emit_insn (gen_auli_pcrel (temp_reg, temp_reg, orig,
+                                text_label_symbol));
+
+      /* Note: this is conservative.  We use the text_label but we
+         don't use the pic_offset_table.  */
+      crtl->uses_pic_offset_table = 1;
+
+      address = temp_reg;
+
+      emit_move_insn (reg, address);
+
+      return reg;
+    }
+
+  return orig;
+}
+
+
+/* Implement TARGET_LEGITIMIZE_ADDRESS.  */
+static rtx
+tilepro_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
+                           enum machine_mode mode)
+{
+  if (GET_MODE_SIZE (mode) <= UNITS_PER_WORD
+      && symbolic_operand (x, Pmode) && tilepro_tls_referenced_p (x))
+    {
+      return tilepro_legitimize_tls_address (x);
+    }
+  else if (flag_pic)
+    {
+      return tilepro_legitimize_pic_address (x, mode, 0);
+    }
+  else
+    return x;
+}
+
+
+/* Implement TARGET_DELEGITIMIZE_ADDRESS.  */
+static rtx
+tilepro_delegitimize_address (rtx x)
+{
+  x = delegitimize_mem_from_attrs (x);
+
+  if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == UNSPEC)
+    {
+      switch (XINT (XEXP (x, 0), 1))
+       {
+       case UNSPEC_PCREL_SYM:
+       case UNSPEC_GOT16_SYM:
+       case UNSPEC_GOT32_SYM:
+       case UNSPEC_TLS_GD:
+       case UNSPEC_TLS_IE:
+         x = XVECEXP (XEXP (x, 0), 0, 0);
+         break;
+       }
+    }
+
+  return x;
+}
+
+
+/* Emit code to load the PIC register.  */
+static void
+load_pic_register (bool delay_pic_helper ATTRIBUTE_UNUSED)
+{
+  int orig_flag_pic = flag_pic;
+
+  rtx got_symbol = tilepro_got_symbol ();
+  rtx text_label_symbol = tilepro_text_label_symbol ();
+  rtx text_label_rtx = tilepro_text_label_rtx ();
+  flag_pic = 0;
+
+  emit_insn (gen_insn_lnk_and_label (text_label_rtx, text_label_symbol));
+
+  emit_insn (gen_addli_pcrel (tilepro_got_rtx (),
+                             text_label_rtx, got_symbol, text_label_symbol));
+
+  emit_insn (gen_auli_pcrel (tilepro_got_rtx (),
+                            tilepro_got_rtx (),
+                            got_symbol, text_label_symbol));
+
+  flag_pic = orig_flag_pic;
+
+  /* Need to emit this whether or not we obey regdecls, since
+     setjmp/longjmp can cause life info to screw up.  ??? In the case
+     where we don't obey regdecls, this is not sufficient since we may
+     not fall out the bottom.  */
+  emit_use (tilepro_got_rtx ());
+}
+
+
+/* Return the simd variant of the constant NUM of mode MODE, by
+   replicating it to fill an interger of mode SImode.  NUM is first
+   truncated to fit in MODE.  */
+rtx
+tilepro_simd_int (rtx num, enum machine_mode mode)
+{
+  HOST_WIDE_INT n = 0;
+
+  gcc_assert (CONST_INT_P (num));
+
+  n = INTVAL (num);
+
+  switch (mode)
+    {
+    case QImode:
+      n = 0x01010101 * (n & 0x000000FF);
+      break;
+    case HImode:
+      n = 0x00010001 * (n & 0x0000FFFF);
+      break;
+    case SImode:
+      break;
+    case DImode:
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  return gen_int_si (n);
+}
+
+
+/* Split one or more DImode RTL references into pairs of SImode
+   references.  The RTL can be REG, offsettable MEM, integer constant,
+   or CONST_DOUBLE.  "operands" is a pointer to an array of DImode RTL
+   to split and "num" is its length.  lo_half and hi_half are output
+   arrays that parallel "operands".  */
+void
+split_di (rtx operands[], int num, rtx lo_half[], rtx hi_half[])
+{
+  while (num--)
+    {
+      rtx op = operands[num];
+
+      /* simplify_subreg refuse to split volatile memory addresses,
+         but we still have to handle it.  */
+      if (MEM_P (op))
+       {
+         lo_half[num] = adjust_address (op, SImode, 0);
+         hi_half[num] = adjust_address (op, SImode, 4);
+       }
+      else
+       {
+         lo_half[num] = simplify_gen_subreg (SImode, op,
+                                             GET_MODE (op) == VOIDmode
+                                             ? DImode : GET_MODE (op), 0);
+         hi_half[num] = simplify_gen_subreg (SImode, op,
+                                             GET_MODE (op) == VOIDmode
+                                             ? DImode : GET_MODE (op), 4);
+       }
+    }
+}
+
+
+/* Returns true iff val can be moved into a register in one
+   instruction.  And if it can, it emits the code to move the
+   constant.
+
+   If three_wide_only is true, this insists on an instruction that
+   works in a bundle containing three instructions.  */
+static bool
+expand_set_cint32_one_inst (rtx dest_reg,
+                           HOST_WIDE_INT val, bool three_wide_only)
+{
+  val = trunc_int_for_mode (val, SImode);
+
+  if (val == trunc_int_for_mode (val, QImode))
+    {
+      /* Success! */
+      emit_move_insn (dest_reg, GEN_INT (val));
+      return true;
+    }
+  else if (!three_wide_only)
+    {
+      rtx imm_op = GEN_INT (val);
+
+      if (satisfies_constraint_J (imm_op)
+         || satisfies_constraint_K (imm_op)
+         || satisfies_constraint_N (imm_op)
+         || satisfies_constraint_P (imm_op))
+       {
+         emit_move_insn (dest_reg, imm_op);
+         return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Implement SImode rotatert.  */
+static HOST_WIDE_INT
+rotate_right (HOST_WIDE_INT n, int count)
+{
+  unsigned HOST_WIDE_INT x = n & 0xFFFFFFFF;
+  if (count == 0)
+    return x;
+  return ((x >> count) | (x << (32 - count))) & 0xFFFFFFFF;
+}
+
+
+/* Return true iff n contains exactly one contiguous sequence of 1
+   bits, possibly wrapping around from high bits to low bits.  */
+bool
+tilepro_bitfield_operand_p (HOST_WIDE_INT n, int *first_bit, int *last_bit)
+{
+  int i;
+
+  if (n == 0)
+    return false;
+
+  for (i = 0; i < 32; i++)
+    {
+      unsigned HOST_WIDE_INT x = rotate_right (n, i);
+      if (!(x & 1))
+       continue;
+
+      /* See if x is a power of two minus one, i.e. only consecutive 1
+         bits starting from bit 0.  */
+      if ((x & (x + 1)) == 0)
+       {
+         if (first_bit != NULL)
+           *first_bit = i;
+         if (last_bit != NULL)
+           *last_bit = (i + exact_log2 (x ^ (x >> 1))) & 31;
+
+         return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Create code to move the CONST_INT value in src_val to dest_reg.  */
+static void
+expand_set_cint32 (rtx dest_reg, rtx src_val)
+{
+  HOST_WIDE_INT val;
+  int leading_zeroes, trailing_zeroes;
+  int lower, upper;
+  int three_wide_only;
+  rtx temp;
+
+  gcc_assert (CONST_INT_P (src_val));
+  val = trunc_int_for_mode (INTVAL (src_val), SImode);
+
+  /* See if we can generate the constant in one instruction.  */
+  if (expand_set_cint32_one_inst (dest_reg, val, false))
+    return;
+
+  /* Create a temporary variable to hold a partial result, to enable
+     CSE.  */
+  temp = create_temp_reg_if_possible (SImode, dest_reg);
+
+  leading_zeroes = 31 - floor_log2 (val & 0xFFFFFFFF);
+  trailing_zeroes = exact_log2 (val & -val);
+
+  lower = trunc_int_for_mode (val, HImode);
+  upper = trunc_int_for_mode ((val - lower) >> 16, HImode);
+
+  /* First try all three-wide instructions that generate a constant
+     (i.e. movei) followed by various shifts and rotates. If none of
+     those work, try various two-wide ways of generating a constant
+     followed by various shifts and rotates.  */
+  for (three_wide_only = 1; three_wide_only >= 0; three_wide_only--)
+    {
+      int count;
+
+      if (expand_set_cint32_one_inst (temp, val >> trailing_zeroes,
+                                     three_wide_only))
+       {
+         /* 0xFFFFA500 becomes:
+            movei temp, 0xFFFFFFA5
+            shli dest, temp, 8  */
+         emit_move_insn (dest_reg,
+                         gen_rtx_ASHIFT (SImode, temp,
+                                         GEN_INT (trailing_zeroes)));
+         return;
+       }
+
+      if (expand_set_cint32_one_inst (temp, val << leading_zeroes,
+                                     three_wide_only))
+       {
+         /* 0x7FFFFFFF becomes:
+            movei temp, -2
+            shri dest, temp, 1  */
+         emit_move_insn (dest_reg,
+                         gen_rtx_LSHIFTRT (SImode, temp,
+                                           GEN_INT (leading_zeroes)));
+         return;
+       }
+
+      /* Try rotating a one-instruction immediate, since rotate is
+         3-wide.  */
+      for (count = 1; count < 32; count++)
+       {
+         HOST_WIDE_INT r = rotate_right (val, count);
+         if (expand_set_cint32_one_inst (temp, r, three_wide_only))
+           {
+             /* 0xFFA5FFFF becomes:
+                movei temp, 0xFFFFFFA5
+                rli dest, temp, 16  */
+             emit_move_insn (dest_reg,
+                             gen_rtx_ROTATE (SImode, temp, GEN_INT (count)));
+             return;
+           }
+       }
+
+      if (lower == trunc_int_for_mode (lower, QImode))
+       {
+         /* We failed to use two 3-wide instructions, but the low 16
+            bits are a small number so just use a 2-wide + 3-wide
+            auli + addi pair rather than anything more exotic.
+
+            0x12340056 becomes:
+            auli temp, zero, 0x1234
+            addi dest, temp, 0x56  */
+         break;
+       }
+    }
+
+  /* Fallback case: use a auli + addli/addi pair.  */
+  emit_move_insn (temp, GEN_INT (upper << 16));
+  emit_move_insn (dest_reg, (gen_rtx_PLUS (SImode, temp, GEN_INT (lower))));
+}
+
+
+/* Load OP1, a 32-bit constant, into OP0, a register.  We know it
+   can't be done in one insn when we get here, the move expander
+   guarantees this.  */
+void
+tilepro_expand_set_const32 (rtx op0, rtx op1)
+{
+  enum machine_mode mode = GET_MODE (op0);
+  rtx temp;
+
+  if (CONST_INT_P (op1))
+    {
+      /* TODO: I don't know if we want to split large constants now,
+         or wait until later (with a define_split).
+
+         Does splitting early help CSE?  Does it harm other
+         optimizations that might fold loads? */
+      expand_set_cint32 (op0, op1);
+    }
+  else
+    {
+      temp = create_temp_reg_if_possible (mode, op0);
+
+      /* A symbol, emit in the traditional way.  */
+      emit_move_insn (temp, gen_rtx_HIGH (mode, op1));
+      emit_move_insn (op0, gen_rtx_LO_SUM (mode, temp, op1));
+    }
+}
+
+
+/* Expand a move instruction.  Return true if all work is done.  */
+bool
+tilepro_expand_mov (enum machine_mode mode, rtx *operands)
+{
+  /* Handle sets of MEM first.  */
+  if (MEM_P (operands[0]))
+    {
+      if (can_create_pseudo_p ())
+       operands[0] = validize_mem (operands[0]);
+
+      if (reg_or_0_operand (operands[1], mode))
+       return false;
+
+      if (!reload_in_progress)
+       operands[1] = force_reg (mode, operands[1]);
+    }
+
+  /* Fixup TLS cases.  */
+  if (CONSTANT_P (operands[1]) && tilepro_tls_referenced_p (operands[1]))
+    {
+      operands[1] = tilepro_legitimize_tls_address (operands[1]);
+      return false;
+    }
+
+  /* Fixup PIC cases.  */
+  if (flag_pic && CONSTANT_P (operands[1]))
+    {
+      if (tilepro_pic_address_needs_scratch (operands[1]))
+       operands[1] = tilepro_legitimize_pic_address (operands[1], mode, 0);
+
+      if (symbolic_operand (operands[1], mode))
+       {
+         operands[1] = tilepro_legitimize_pic_address (operands[1],
+                                                       mode,
+                                                       (reload_in_progress ?
+                                                        operands[0] :
+                                                        NULL_RTX));
+         return false;
+       }
+    }
+
+  /* Fixup for UNSPEC addresses.  */
+  if (flag_pic
+      && GET_CODE (operands[1]) == HIGH
+      && GET_CODE (XEXP (operands[1], 0)) == CONST
+      && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == UNSPEC)
+    {
+      rtx unspec = XEXP (XEXP (operands[1], 0), 0);
+      int unspec_num = XINT (unspec, 1);
+      if (unspec_num == UNSPEC_PCREL_SYM)
+       {
+         emit_insn (gen_auli_pcrel (operands[0], const0_rtx,
+                                    XVECEXP (unspec, 0, 0),
+                                    XVECEXP (unspec, 0, 1)));
+         return true;
+       }
+      else if (flag_pic == 2 && unspec_num == UNSPEC_GOT32_SYM)
+       {
+         emit_insn (gen_addhi_got32 (operands[0], const0_rtx,
+                                     XVECEXP (unspec, 0, 0)));
+         return true;
+       }
+      else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_GD)
+       {
+         emit_insn (gen_tls_gd_addhi (operands[0], const0_rtx,
+                                      XVECEXP (unspec, 0, 0)));
+         return true;
+       }
+      else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_IE)
+       {
+         emit_insn (gen_tls_ie_addhi (operands[0], const0_rtx,
+                                      XVECEXP (unspec, 0, 0)));
+         return true;
+       }
+      else if (HAVE_AS_TLS && unspec_num == UNSPEC_TLS_LE)
+       {
+         emit_insn (gen_tls_le_addhi (operands[0], const0_rtx,
+                                      XVECEXP (unspec, 0, 0)));
+         return true;
+       }
+    }
+
+  /* Accept non-constants and valid constants unmodified.  */
+  if (!CONSTANT_P (operands[1])
+      || GET_CODE (operands[1]) == HIGH || move_operand (operands[1], mode))
+    return false;
+
+  /* Split large integers.  */
+  if (GET_MODE_SIZE (mode) <= 4)
+    {
+      tilepro_expand_set_const32 (operands[0], operands[1]);
+      return true;
+    }
+
+  return false;
+}
+
+
+/* Expand the "insv" pattern.  */
+void
+tilepro_expand_insv (rtx operands[4])
+{
+  rtx first_rtx = operands[2];
+  HOST_WIDE_INT first = INTVAL (first_rtx);
+  HOST_WIDE_INT width = INTVAL (operands[1]);
+  rtx v = operands[3];
+
+  /* Shift the inserted bits into position.  */
+  if (first != 0)
+    {
+      if (CONST_INT_P (v))
+       {
+         /* Shift the constant into mm position.  */
+         v = gen_int_si (INTVAL (v) << first);
+       }
+      else
+       {
+         /* Shift over the value to be inserted.  */
+         rtx tmp = gen_reg_rtx (SImode);
+         emit_insn (gen_ashlsi3 (tmp, v, first_rtx));
+         v = tmp;
+       }
+    }
+
+  /* Insert the shifted bits using an 'mm' insn.  */
+  emit_insn (gen_insn_mm (operands[0], v, operands[0], first_rtx,
+                         GEN_INT (first + width - 1)));
+}
+
+
+/* Expand unaligned loads.  */
+void
+tilepro_expand_unaligned_load (rtx dest_reg, rtx mem, HOST_WIDE_INT bitsize,
+                              HOST_WIDE_INT bit_offset, bool sign)
+{
+  enum machine_mode mode;
+  rtx addr_lo, addr_hi;
+  rtx mem_lo, mem_hi, hi;
+  rtx mema, wide_result;
+  int last_byte_offset;
+  HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
+
+  mode = GET_MODE (dest_reg);
+
+  hi = gen_reg_rtx (mode);
+
+  if (bitsize == 2 * BITS_PER_UNIT && (bit_offset % BITS_PER_UNIT) == 0)
+    {
+      rtx lo;
+
+      /* When just loading a two byte value, we can load the two bytes
+         individually and combine them efficiently.  */
+
+      mem_lo = adjust_address (mem, QImode, byte_offset);
+      mem_hi = adjust_address (mem, QImode, byte_offset + 1);
+
+      lo = gen_reg_rtx (mode);
+      emit_insn (gen_zero_extendqisi2 (lo, mem_lo));
+
+      if (sign)
+       {
+         rtx tmp = gen_reg_rtx (mode);
+
+         /* Do a signed load of the second byte then shift and OR it
+            in.  */
+         emit_insn (gen_extendqisi2 (gen_lowpart (SImode, hi), mem_hi));
+         emit_insn (gen_ashlsi3 (gen_lowpart (SImode, tmp),
+                                 gen_lowpart (SImode, hi), GEN_INT (8)));
+         emit_insn (gen_iorsi3 (gen_lowpart (SImode, dest_reg),
+                                gen_lowpart (SImode, lo),
+                                gen_lowpart (SImode, tmp)));
+       }
+      else
+       {
+         /* Do two unsigned loads and use intlb to interleave
+            them.  */
+         emit_insn (gen_zero_extendqisi2 (gen_lowpart (SImode, hi), mem_hi));
+         emit_insn (gen_insn_intlb (gen_lowpart (SImode, dest_reg),
+                                    gen_lowpart (SImode, hi),
+                                    gen_lowpart (SImode, lo)));
+       }
+
+      return;
+    }
+
+  mema = XEXP (mem, 0);
+
+  /* AND addresses cannot be in any alias set, since they may
+     implicitly alias surrounding code.  Ideally we'd have some alias
+     set that covered all types except those with alignment 8 or
+     higher.  */
+  addr_lo = force_reg (Pmode, plus_constant (mema, byte_offset));
+  mem_lo = change_address (mem, mode,
+                          gen_rtx_AND (Pmode, addr_lo, GEN_INT (-4)));
+  set_mem_alias_set (mem_lo, 0);
+
+  /* Load the high word at an address that will not fault if the low
+     address is aligned and at the very end of a page.  */
+  last_byte_offset = (bit_offset + bitsize - 1) / BITS_PER_UNIT;
+  addr_hi = force_reg (Pmode, plus_constant (mema, last_byte_offset));
+  mem_hi = change_address (mem, mode,
+                          gen_rtx_AND (Pmode, addr_hi, GEN_INT (-4)));
+  set_mem_alias_set (mem_hi, 0);
+
+  if (bitsize == 32)
+    {
+      addr_lo = make_safe_from (addr_lo, dest_reg);
+      wide_result = dest_reg;
+    }
+  else
+    {
+      wide_result = gen_reg_rtx (mode);
+    }
+
+  /* Load hi first in case dest_reg is used in mema.  */
+  emit_move_insn (hi, mem_hi);
+  emit_move_insn (wide_result, mem_lo);
+
+  emit_insn (gen_insn_dword_align (gen_lowpart (SImode, wide_result),
+                                  gen_lowpart (SImode, wide_result),
+                                  gen_lowpart (SImode, hi), addr_lo));
+
+  if (bitsize != 32)
+    {
+      rtx extracted =
+       extract_bit_field (gen_lowpart (SImode, wide_result),
+                          bitsize, bit_offset % BITS_PER_UNIT,
+                          !sign, false, gen_lowpart (SImode, dest_reg),
+                          SImode, SImode);
+
+      if (extracted != dest_reg)
+       emit_move_insn (dest_reg, gen_lowpart (SImode, extracted));
+    }
+}
+
+
+/* Expand unaligned stores.  */
+static void
+tilepro_expand_unaligned_store (rtx mem, rtx src, HOST_WIDE_INT bitsize,
+                               HOST_WIDE_INT bit_offset)
+{
+  HOST_WIDE_INT byte_offset = bit_offset / BITS_PER_UNIT;
+  HOST_WIDE_INT bytesize = bitsize / BITS_PER_UNIT;
+  HOST_WIDE_INT shift_amt;
+  HOST_WIDE_INT i;
+  rtx mem_addr;
+  rtx store_val;
+
+  for (i = 0, shift_amt = 0; i < bytesize; i++, shift_amt += BITS_PER_UNIT)
+    {
+      mem_addr = adjust_address (mem, QImode, byte_offset + i);
+
+      if (shift_amt)
+       {
+         store_val = expand_simple_binop (SImode, LSHIFTRT,
+                                          gen_lowpart (SImode, src),
+                                          GEN_INT (shift_amt), NULL, 1,
+                                          OPTAB_LIB_WIDEN);
+         store_val = gen_lowpart (QImode, store_val);
+       }
+      else
+       {
+         store_val = gen_lowpart (QImode, src);
+       }
+
+      emit_move_insn (mem_addr, store_val);
+    }
+}
+
+
+/* Implement the movmisalign patterns.  One of the operands is a
+   memory that is not naturally aligned.  Emit instructions to load
+   it.  */
+void
+tilepro_expand_movmisalign (enum machine_mode mode, rtx *operands)
+{
+  if (MEM_P (operands[1]))
+    {
+      rtx tmp;
+
+      if (register_operand (operands[0], mode))
+       tmp = operands[0];
+      else
+       tmp = gen_reg_rtx (mode);
+
+      tilepro_expand_unaligned_load (tmp, operands[1],
+                                    GET_MODE_BITSIZE (mode), 0, true);
+
+      if (tmp != operands[0])
+       emit_move_insn (operands[0], tmp);
+    }
+  else if (MEM_P (operands[0]))
+    {
+      if (!reg_or_0_operand (operands[1], mode))
+       operands[1] = force_reg (mode, operands[1]);
+
+      tilepro_expand_unaligned_store (operands[0], operands[1],
+                                     GET_MODE_BITSIZE (mode), 0);
+    }
+  else
+    gcc_unreachable ();
+}
+
+
+/* Implement the addsi3 pattern.  */
+bool
+tilepro_expand_addsi (rtx op0, rtx op1, rtx op2)
+{
+  rtx temp;
+  HOST_WIDE_INT n;
+  HOST_WIDE_INT high;
+
+  /* Skip anything that only takes one instruction.  */
+  if (add_operand (op2, SImode))
+    return false;
+
+  /* We can only optimize ints here (it should be impossible to get
+     here with any other type, but it is harmless to check.  */
+  if (!CONST_INT_P (op2))
+    return false;
+
+  temp = create_temp_reg_if_possible (SImode, op0);
+  n = INTVAL (op2);
+  high = (n + (n & 0x8000)) & ~0xffff;
+
+  emit_move_insn (temp, gen_rtx_PLUS (SImode, op1, gen_int_si (high)));
+  emit_move_insn (op0, gen_rtx_PLUS (SImode, temp, gen_int_si (n - high)));
+
+  return true;
+}
+
+
+/* Implement the allocate_stack pattern (alloca).  */
+void
+tilepro_allocate_stack (rtx op0, rtx op1)
+{
+  /* Technically the correct way to initialize chain_loc is with
+   * gen_frame_mem() instead of gen_rtx_MEM(), but gen_frame_mem()
+   * sets the alias_set to that of a frame reference.  Some of our
+   * tests rely on some unsafe assumption about when the chaining
+   * update is done, we need to be conservative about reordering the
+   * chaining instructions.
+   */
+  rtx fp_addr = gen_reg_rtx (Pmode);
+  rtx fp_value = gen_reg_rtx (Pmode);
+  rtx fp_loc;
+
+  emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                        GEN_INT (UNITS_PER_WORD)));
+
+  fp_loc = gen_frame_mem (Pmode, fp_addr);
+
+  emit_move_insn (fp_value, fp_loc);
+
+  op1 = force_reg (Pmode, op1);
+
+  emit_move_insn (stack_pointer_rtx,
+                 gen_rtx_MINUS (Pmode, stack_pointer_rtx, op1));
+
+  emit_move_insn (fp_addr, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                        GEN_INT (UNITS_PER_WORD)));
+
+  fp_loc = gen_frame_mem (Pmode, fp_addr);
+
+  emit_move_insn (fp_loc, fp_value);
+
+  emit_move_insn (op0, virtual_stack_dynamic_rtx);
+}
+\f
+
+
+/* Multiplies */
+
+/* Returns the insn_code in ENTRY.  */
+static enum insn_code
+tilepro_multiply_get_opcode (const struct tilepro_multiply_insn_seq_entry
+                            *entry)
+{
+  return tilepro_multiply_insn_seq_decode_opcode[entry->compressed_opcode];
+}
+
+
+/* Returns the length of the 'op' array.  */
+static int
+tilepro_multiply_get_num_ops (const struct tilepro_multiply_insn_seq *seq)
+{
+  /* The array either uses all of its allocated slots or is terminated
+     by a bogus opcode. Either way, the array size is the index of the
+     last valid opcode plus one.  */
+  int i;
+  for (i = tilepro_multiply_insn_seq_MAX_OPERATIONS - 1; i >= 0; i--)
+    if (tilepro_multiply_get_opcode (&seq->op[i]) != CODE_FOR_nothing)
+      return i + 1;
+
+  /* An empty array is not allowed.  */
+  gcc_unreachable ();
+}
+
+
+/* We precompute a number of expression trees for multiplying by
+   constants.  This generates code for such an expression tree by
+   walking through the nodes in the tree (which are conveniently
+   pre-linearized) and emitting an instruction for each one.  */
+static void
+tilepro_expand_constant_multiply_given_sequence (rtx result, rtx src,
+                                                const struct
+                                                tilepro_multiply_insn_seq
+                                                *seq)
+{
+  int i;
+  int num_ops;
+
+  /* Keep track of the subexpressions computed so far, so later
+     instructions can refer to them.  We seed the array with zero and
+     the value being multiplied.  */
+  int num_subexprs = 2;
+  rtx subexprs[tilepro_multiply_insn_seq_MAX_OPERATIONS + 2];
+  subexprs[0] = const0_rtx;
+  subexprs[1] = src;
+
+  /* Determine how many instructions we are going to generate.  */
+  num_ops = tilepro_multiply_get_num_ops (seq);
+  gcc_assert (num_ops > 0
+             && num_ops <= tilepro_multiply_insn_seq_MAX_OPERATIONS);
+
+  for (i = 0; i < num_ops; i++)
+    {
+      const struct tilepro_multiply_insn_seq_entry *entry = &seq->op[i];
+
+      /* Figure out where to store the output of this instruction.  */
+      const bool is_last_op = (i + 1 == num_ops);
+      rtx out = is_last_op ? result : gen_reg_rtx (SImode);
+
+      enum insn_code opcode = tilepro_multiply_get_opcode (entry);
+      if (opcode == CODE_FOR_ashlsi3)
+       {
+         /* Handle shift by immediate. This is a special case because
+            the meaning of the second operand is a constant shift
+            count rather than an operand index.  */
+
+         /* Make sure the shift count is in range. Zero should not
+            happen.  */
+         const int shift_count = entry->rhs;
+         gcc_assert (shift_count > 0 && shift_count < 32);
+
+         /* Emit the actual instruction.  */
+         emit_insn (GEN_FCN (opcode)
+                    (out, subexprs[entry->lhs],
+                     gen_rtx_CONST_INT (SImode, shift_count)));
+       }
+      else
+       {
+         /* Handle a normal two-operand instruction, such as add or
+            s1a.  */
+
+         /* Make sure we are referring to a previously computed
+            subexpression.  */
+         gcc_assert (entry->rhs < num_subexprs);
+
+         /* Emit the actual instruction.  */
+         emit_insn (GEN_FCN (opcode)
+                    (out, subexprs[entry->lhs], subexprs[entry->rhs]));
+       }
+
+      /* Record this subexpression for use by later expressions.  */
+      subexprs[num_subexprs++] = out;
+    }
+}
+
+
+/* bsearch helper function.  */
+static int
+tilepro_compare_multipliers (const void *key, const void *t)
+{
+  return *(const int *) key -
+    ((const struct tilepro_multiply_insn_seq *) t)->multiplier;
+}
+
+
+/* Returns the tilepro_multiply_insn_seq for multiplier, or NULL if
+   none exists.  */
+static const struct tilepro_multiply_insn_seq *
+tilepro_find_multiply_insn_seq_for_constant (int multiplier)
+{
+  return ((const struct tilepro_multiply_insn_seq *)
+         bsearch (&multiplier, tilepro_multiply_insn_seq_table,
+                  tilepro_multiply_insn_seq_table_size,
+                  sizeof tilepro_multiply_insn_seq_table[0],
+                  tilepro_compare_multipliers));
+}
+
+
+/* Try to a expand constant multiply in SImode by looking it up in a
+   precompiled table.  OP0 is the result operand, OP1 is the source
+   operand, and MULTIPLIER is the value of the constant.  Return true
+   if it succeeds.  */
+static bool
+tilepro_expand_const_mulsi (rtx op0, rtx op1, int multiplier)
+{
+  /* See if we have precomputed an efficient way to multiply by this
+     constant.  */
+  const struct tilepro_multiply_insn_seq *seq =
+    tilepro_find_multiply_insn_seq_for_constant (multiplier);
+  if (seq != NULL)
+    {
+      tilepro_expand_constant_multiply_given_sequence (op0, op1, seq);
+      return true;
+    }
+  else
+    return false;
+}
+
+
+/* Expand the mulsi pattern.  */
+bool
+tilepro_expand_mulsi (rtx op0, rtx op1, rtx op2)
+{
+  if (CONST_INT_P (op2))
+    {
+      HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op2), SImode);
+      return tilepro_expand_const_mulsi (op0, op1, n);
+    }
+  return false;
+}
+
+
+/* Expand a high multiply pattern in SImode.  RESULT, OP1, OP2 are the
+   operands, and SIGN is true if it's a signed multiply, and false if
+   it's an unsigned multiply.  */
+static void
+tilepro_expand_high_multiply (rtx result, rtx op1, rtx op2, bool sign)
+{
+  rtx tmp0 = gen_reg_rtx (SImode);
+  rtx tmp1 = gen_reg_rtx (SImode);
+  rtx tmp2 = gen_reg_rtx (SImode);
+  rtx tmp3 = gen_reg_rtx (SImode);
+  rtx tmp4 = gen_reg_rtx (SImode);
+  rtx tmp5 = gen_reg_rtx (SImode);
+  rtx tmp6 = gen_reg_rtx (SImode);
+  rtx tmp7 = gen_reg_rtx (SImode);
+  rtx tmp8 = gen_reg_rtx (SImode);
+  rtx tmp9 = gen_reg_rtx (SImode);
+  rtx tmp10 = gen_reg_rtx (SImode);
+  rtx tmp11 = gen_reg_rtx (SImode);
+  rtx tmp12 = gen_reg_rtx (SImode);
+  rtx tmp13 = gen_reg_rtx (SImode);
+  rtx result_lo = gen_reg_rtx (SImode);
+
+  if (sign)
+    {
+      emit_insn (gen_insn_mulhl_su (tmp0, op1, op2));
+      emit_insn (gen_insn_mulhl_su (tmp1, op2, op1));
+      emit_insn (gen_insn_mulll_uu (tmp2, op1, op2));
+      emit_insn (gen_insn_mulhh_ss (tmp3, op1, op2));
+    }
+  else
+    {
+      emit_insn (gen_insn_mulhl_uu (tmp0, op1, op2));
+      emit_insn (gen_insn_mulhl_uu (tmp1, op2, op1));
+      emit_insn (gen_insn_mulll_uu (tmp2, op1, op2));
+      emit_insn (gen_insn_mulhh_uu (tmp3, op1, op2));
+    }
+
+  emit_move_insn (tmp4, (gen_rtx_ASHIFT (SImode, tmp0, GEN_INT (16))));
+
+  emit_move_insn (tmp5, (gen_rtx_ASHIFT (SImode, tmp1, GEN_INT (16))));
+
+  emit_move_insn (tmp6, (gen_rtx_PLUS (SImode, tmp4, tmp5)));
+  emit_move_insn (result_lo, (gen_rtx_PLUS (SImode, tmp2, tmp6)));
+
+  emit_move_insn (tmp7, gen_rtx_LTU (SImode, tmp6, tmp4));
+  emit_move_insn (tmp8, gen_rtx_LTU (SImode, result_lo, tmp2));
+
+  if (sign)
+    {
+      emit_move_insn (tmp9, (gen_rtx_ASHIFTRT (SImode, tmp0, GEN_INT (16))));
+      emit_move_insn (tmp10, (gen_rtx_ASHIFTRT (SImode, tmp1, GEN_INT (16))));
+    }
+  else
+    {
+      emit_move_insn (tmp9, (gen_rtx_LSHIFTRT (SImode, tmp0, GEN_INT (16))));
+      emit_move_insn (tmp10, (gen_rtx_LSHIFTRT (SImode, tmp1, GEN_INT (16))));
+    }
+
+  emit_move_insn (tmp11, (gen_rtx_PLUS (SImode, tmp3, tmp7)));
+  emit_move_insn (tmp12, (gen_rtx_PLUS (SImode, tmp8, tmp9)));
+  emit_move_insn (tmp13, (gen_rtx_PLUS (SImode, tmp11, tmp12)));
+  emit_move_insn (result, (gen_rtx_PLUS (SImode, tmp13, tmp10)));
+}
+
+
+/* Implement smulsi3_highpart.  */
+void
+tilepro_expand_smulsi3_highpart (rtx op0, rtx op1, rtx op2)
+{
+  tilepro_expand_high_multiply (op0, op1, op2, true);
+}
+
+
+/* Implement umulsi3_highpart.  */
+void
+tilepro_expand_umulsi3_highpart (rtx op0, rtx op1, rtx op2)
+{
+  tilepro_expand_high_multiply (op0, op1, op2, false);
+}
+\f
+
+
+/* Compare and branches  */
+
+/* Helper function to handle DImode for tilepro_emit_setcc_internal.  */
+static bool
+tilepro_emit_setcc_internal_di (rtx res, enum rtx_code code, rtx op0, rtx op1)
+{
+  rtx operands[2], lo_half[2], hi_half[2];
+  rtx tmp, tmp0, tmp1, tmp2;
+  bool swap = false;
+
+  /* Reduce the number of cases we need to handle by reversing the
+     operands.  */
+  switch (code)
+    {
+    case EQ:
+    case NE:
+    case LE:
+    case LT:
+    case LEU:
+    case LTU:
+      /* We handle these compares directly.  */
+      break;
+
+    case GE:
+    case GT:
+    case GEU:
+    case GTU:
+      /* Reverse the operands.  */
+      swap = true;
+      break;
+
+    default:
+      /* We should not have called this with any other code.  */
+      gcc_unreachable ();
+    }
+
+  if (swap)
+    {
+      code = swap_condition (code);
+      tmp = op0, op0 = op1, op1 = tmp;
+    }
+
+  operands[0] = op0;
+  operands[1] = op1;
+
+  split_di (operands, 2, lo_half, hi_half);
+
+  if (!reg_or_0_operand (lo_half[0], SImode))
+    lo_half[0] = force_reg (SImode, lo_half[0]);
+
+  if (!reg_or_0_operand (hi_half[0], SImode))
+    hi_half[0] = force_reg (SImode, hi_half[0]);
+
+  if (!CONST_INT_P (lo_half[1]) && !register_operand (lo_half[1], SImode))
+    lo_half[1] = force_reg (SImode, lo_half[1]);
+
+  if (!CONST_INT_P (hi_half[1]) && !register_operand (hi_half[1], SImode))
+    hi_half[1] = force_reg (SImode, hi_half[1]);
+
+  tmp0 = gen_reg_rtx (SImode);
+  tmp1 = gen_reg_rtx (SImode);
+  tmp2 = gen_reg_rtx (SImode);
+
+  switch (code)
+    {
+    case EQ:
+      emit_insn (gen_insn_seq (tmp0, lo_half[0], lo_half[1]));
+      emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
+      emit_insn (gen_andsi3 (res, tmp0, tmp1));
+      return true;
+      break;
+    case NE:
+      emit_insn (gen_insn_sne (tmp0, lo_half[0], lo_half[1]));
+      emit_insn (gen_insn_sne (tmp1, hi_half[0], hi_half[1]));
+      emit_insn (gen_iorsi3 (res, tmp0, tmp1));
+      return true;
+      break;
+    case LE:
+      emit_insn (gen_insn_slte (tmp0, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_slte_u (tmp2, lo_half[0], lo_half[1]));
+      emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
+      return true;
+    case LT:
+      if (operands[1] == const0_rtx)
+       {
+         emit_insn (gen_lshrsi3 (res, hi_half[0], GEN_INT (31)));
+         return true;
+       }
+      else
+       {
+         emit_insn (gen_insn_slt (tmp0, hi_half[0], hi_half[1]));
+         emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
+         emit_insn (gen_insn_slt_u (tmp2, lo_half[0], lo_half[1]));
+         emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
+       }
+      return true;
+    case LEU:
+      emit_insn (gen_insn_slte_u (tmp0, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_slte_u (tmp2, lo_half[0], lo_half[1]));
+      emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
+      return true;
+    case LTU:
+      emit_insn (gen_insn_slt_u (tmp0, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_seq (tmp1, hi_half[0], hi_half[1]));
+      emit_insn (gen_insn_slt_u (tmp2, lo_half[0], lo_half[1]));
+      emit_insn (gen_insn_mvnz (res, tmp0, tmp1, tmp2));
+      return true;
+    default:
+      gcc_unreachable ();
+    }
+
+  return false;
+}
+
+
+/* Certain simplifications can be done to make invalid setcc
+   operations valid.  Return the final comparison, or NULL if we can't
+   work.  */
+static bool
+tilepro_emit_setcc_internal (rtx res, enum rtx_code code, rtx op0, rtx op1,
+                            enum machine_mode cmp_mode)
+{
+  rtx tmp;
+  bool swap = false;
+
+  if (cmp_mode == DImode)
+    {
+      return tilepro_emit_setcc_internal_di (res, code, op0, op1);
+    }
+
+  /* The general case: fold the comparison code to the types of
+     compares that we have, choosing the branch as necessary.  */
+
+  switch (code)
+    {
+    case EQ:
+    case NE:
+    case LE:
+    case LT:
+    case LEU:
+    case LTU:
+      /* We have these compares.  */
+      break;
+
+    case GE:
+    case GT:
+    case GEU:
+    case GTU:
+      /* We do not have these compares, so we reverse the
+         operands.  */
+      swap = true;
+      break;
+
+    default:
+      /* We should not have called this with any other code.  */
+      gcc_unreachable ();
+    }
+
+  if (swap)
+    {
+      code = swap_condition (code);
+      tmp = op0, op0 = op1, op1 = tmp;
+    }
+
+  if (!reg_or_0_operand (op0, SImode))
+    op0 = force_reg (SImode, op0);
+
+  if (!CONST_INT_P (op1) && !register_operand (op1, SImode))
+    op1 = force_reg (SImode, op1);
+
+  /* Return the setcc comparison.  */
+  emit_insn (gen_rtx_SET (VOIDmode, res,
+                         gen_rtx_fmt_ee (code, SImode, op0, op1)));
+
+  return true;
+}
+
+
+/* Implement cstore patterns.  */
+bool
+tilepro_emit_setcc (rtx operands[], enum machine_mode cmp_mode)
+{
+  return
+    tilepro_emit_setcc_internal (operands[0], GET_CODE (operands[1]),
+                                operands[2], operands[3], cmp_mode);
+}
+
+
+/* Return whether CODE is a signed comparison.  */
+static bool
+signed_compare_p (enum rtx_code code)
+{
+  return (code == EQ || code == NE || code == LT || code == LE
+         || code == GT || code == GE);
+}
+
+
+/* Generate the comparison for an SImode conditional branch.  */
+static rtx
+tilepro_emit_cc_test (enum rtx_code code, rtx op0, rtx op1,
+                     enum machine_mode cmp_mode, bool eq_ne_only)
+{
+  enum rtx_code branch_code;
+  rtx temp;
+
+  /* Check for a compare against zero using a comparison we can do
+     directly.  */
+  if (cmp_mode != DImode
+      && op1 == const0_rtx
+      && (code == EQ || code == NE
+         || (!eq_ne_only && signed_compare_p (code))))
+    {
+      op0 = force_reg (SImode, op0);
+      return gen_rtx_fmt_ee (code, VOIDmode, op0, const0_rtx);
+    }
+
+  /* The general case: fold the comparison code to the types of
+     compares that we have, choosing the branch as necessary.  */
+  switch (code)
+    {
+    case EQ:
+    case LE:
+    case LT:
+    case LEU:
+    case LTU:
+      /* We have these compares.  */
+      branch_code = NE;
+      break;
+
+    case NE:
+    case GE:
+    case GT:
+    case GEU:
+    case GTU:
+      /* These must be reversed (except NE, but let's
+         canonicalize).  */
+      code = reverse_condition (code);
+      branch_code = EQ;
+      break;
+
+    default:
+      gcc_unreachable ();
+    }
+
+  if (cmp_mode != DImode
+      && CONST_INT_P (op1) && (!satisfies_constraint_I (op1) || code == LEU))
+    {
+      HOST_WIDE_INT n = trunc_int_for_mode (INTVAL (op1), SImode);
+
+      switch (code)
+       {
+       case EQ:
+         /* Subtract off the value we want to compare against and see
+            if we get zero.  This is cheaper than creating a constant
+            in a register. Except that subtracting -128 is more
+            expensive than seqi to -128, so we leave that alone.  */
+         /* ??? Don't do this when comparing against symbols,
+            otherwise we'll reduce (&x == 0x1234) to (&x-0x1234 ==
+            0), which will be declared false out of hand (at least
+            for non-weak).  */
+         if (!(symbolic_operand (op0, VOIDmode)
+               || (REG_P (op0) && REG_POINTER (op0))))
+           {
+             /* To compare against MIN_INT, we add MIN_INT and check
+                for 0.  */
+             HOST_WIDE_INT add;
+             if (n != -2147483647 - 1)
+               add = -n;
+             else
+               add = n;
+
+             op0 = force_reg (SImode, op0);
+             temp = gen_reg_rtx (SImode);
+             emit_insn (gen_addsi3 (temp, op0, gen_int_si (add)));
+             return gen_rtx_fmt_ee (reverse_condition (branch_code),
+                                    VOIDmode, temp, const0_rtx);
+           }
+         break;
+
+       case LEU:
+         if (n == -1)
+           break;
+         /* FALLTHRU */
+
+       case LTU:
+         /* Change ((unsigned)x < 0x1000) into !((unsigned)x >> 12),
+            etc.  */
+         {
+           int first = exact_log2 (code == LTU ? n : n + 1);
+           if (first != -1)
+             {
+               op0 = force_reg (SImode, op0);
+               temp = gen_reg_rtx (SImode);
+               emit_move_insn (temp,
+                               gen_rtx_LSHIFTRT (SImode, op0,
+                                                 gen_int_si (first)));
+               return gen_rtx_fmt_ee (reverse_condition (branch_code),
+                                      VOIDmode, temp, const0_rtx);
+             }
+         }
+         break;
+
+       default:
+         break;
+       }
+    }
+
+  /* Compute a flag saying whether we should branch.  */
+  temp = gen_reg_rtx (SImode);
+  tilepro_emit_setcc_internal (temp, code, op0, op1, cmp_mode);
+
+  /* Return the branch comparison.  */
+  return gen_rtx_fmt_ee (branch_code, VOIDmode, temp, const0_rtx);
+}
+
+
+/* Generate the comparison for a conditional branch.  */
+void
+tilepro_emit_conditional_branch (rtx operands[], enum machine_mode cmp_mode)
+{
+  rtx cmp_rtx =
+    tilepro_emit_cc_test (GET_CODE (operands[0]), operands[1], operands[2],
+                         cmp_mode, false);
+  rtx branch_rtx = gen_rtx_SET (VOIDmode, pc_rtx,
+                               gen_rtx_IF_THEN_ELSE (VOIDmode, cmp_rtx,
+                                                     gen_rtx_LABEL_REF
+                                                     (VOIDmode,
+                                                      operands[3]),
+                                                     pc_rtx));
+  emit_jump_insn (branch_rtx);
+}
+
+
+/* Implement the movsicc pattern.  */
+rtx
+tilepro_emit_conditional_move (rtx cmp)
+{
+  return
+    tilepro_emit_cc_test (GET_CODE (cmp), XEXP (cmp, 0), XEXP (cmp, 1),
+                         GET_MODE (XEXP (cmp, 0)), true);
+}
+
+
+/* Return true if INSN is annotated with a REG_BR_PROB note that
+   indicates it's a branch that's predicted taken.  */
+static bool
+cbranch_predicted_p (rtx insn)
+{
+  rtx x = find_reg_note (insn, REG_BR_PROB, 0);
+
+  if (x)
+    {
+      int pred_val = INTVAL (XEXP (x, 0));
+
+      return pred_val >= REG_BR_PROB_BASE / 2;
+    }
+
+  return false;
+}
+
+
+/* Output assembly code for a specific branch instruction, appending
+   the branch prediction flag to the opcode if appropriate.  */
+static const char *
+tilepro_output_simple_cbranch_with_opcode (rtx insn, const char *opcode,
+                                          int regop, bool netreg_p,
+                                          bool reverse_predicted)
+{
+  static char buf[64];
+  sprintf (buf, "%s%s\t%%%c%d, %%l0", opcode,
+          (cbranch_predicted_p (insn) ^ reverse_predicted) ? "t" : "",
+          netreg_p ? 'N' : 'r', regop);
+  return buf;
+}
+
+
+/* Output assembly code for a specific branch instruction, appending
+   the branch prediction flag to the opcode if appropriate.  */
+const char *
+tilepro_output_cbranch_with_opcode (rtx insn, rtx *operands,
+                                   const char *opcode,
+                                   const char *rev_opcode,
+                                   int regop, bool netreg_p)
+{
+  const char *branch_if_false;
+  rtx taken, not_taken;
+  bool is_simple_branch;
+
+  gcc_assert (LABEL_P (operands[0]));
+
+  is_simple_branch = true;
+  if (INSN_ADDRESSES_SET_P ())
+    {
+      int from_addr = INSN_ADDRESSES (INSN_UID (insn));
+      int to_addr = INSN_ADDRESSES (INSN_UID (operands[0]));
+      int delta = to_addr - from_addr;
+      is_simple_branch = IN_RANGE (delta, -524288, 524280);
+    }
+
+  if (is_simple_branch)
+    {
+      /* Just a simple conditional branch.  */
+      return
+       tilepro_output_simple_cbranch_with_opcode (insn, opcode, regop,
+                                                  netreg_p, false);
+    }
+
+  /* Generate a reversed branch around a direct jump.  This fallback
+     does not use branch-likely instructions.  */
+  not_taken = gen_label_rtx ();
+  taken = operands[0];
+
+  /* Generate the reversed branch to NOT_TAKEN.  */
+  operands[0] = not_taken;
+  branch_if_false =
+    tilepro_output_simple_cbranch_with_opcode (insn, rev_opcode, regop,
+                                              netreg_p, true);
+  output_asm_insn (branch_if_false, operands);
+
+  output_asm_insn ("j\t%l0", &taken);
+
+  /* Output NOT_TAKEN.  */
+  targetm.asm_out.internal_label (asm_out_file, "L",
+                                 CODE_LABEL_NUMBER (not_taken));
+  return "";
+}
+
+
+/* Output assembly code for a conditional branch instruction.  */
+const char *
+tilepro_output_cbranch (rtx insn, rtx *operands, bool reversed)
+{
+  enum rtx_code code = GET_CODE (operands[1]);
+  const char *opcode;
+  const char *rev_opcode;
+
+  if (reversed)
+    code = reverse_condition (code);
+
+  switch (code)
+    {
+    case NE:
+      opcode = "bnz";
+      rev_opcode = "bz";
+      break;
+    case EQ:
+      opcode = "bz";
+      rev_opcode = "bnz";
+      break;
+    case GE:
+      opcode = "bgez";
+      rev_opcode = "blz";
+      break;
+    case GT:
+      opcode = "bgz";
+      rev_opcode = "blez";
+      break;
+    case LE:
+      opcode = "blez";
+      rev_opcode = "bgz";
+      break;
+    case LT:
+      opcode = "blz";
+      rev_opcode = "bgez";
+      break;
+    default:
+      gcc_unreachable ();
+    }
+
+  return
+    tilepro_output_cbranch_with_opcode (insn, operands, opcode, rev_opcode,
+                                       2, false);
+}
+
+
+/* Implement the tablejump pattern.  */
+void
+tilepro_expand_tablejump (rtx op0, rtx op1)
+{
+  if (flag_pic)
+    {
+      rtx table = gen_rtx_LABEL_REF (Pmode, op1);
+      rtx temp = gen_reg_rtx (Pmode);
+      rtx text_label_symbol = tilepro_text_label_symbol ();
+      rtx text_label_rtx = tilepro_text_label_rtx ();
+
+      emit_insn (gen_addli_pcrel (temp, text_label_rtx,
+                                 table, text_label_symbol));
+      emit_insn (gen_auli_pcrel (temp, temp, table, text_label_symbol));
+      emit_move_insn (temp,
+                     gen_rtx_PLUS (Pmode,
+                                   convert_to_mode (Pmode, op0, false),
+                                   temp));
+      op0 = temp;
+    }
+
+  emit_jump_insn (gen_tablejump_aux (op0, op1));
+}
+
+
+/* Expand a builtin vector binary op, by calling gen function GEN with
+   operands in the proper modes.  DEST is converted to DEST_MODE, and
+   src0 and src1 (if DO_SRC1 is true) is converted to SRC_MODE.  */
+void
+tilepro_expand_builtin_vector_binop (rtx (*gen) (rtx, rtx, rtx),
+                                    enum machine_mode dest_mode,
+                                    rtx dest,
+                                    enum machine_mode src_mode,
+                                    rtx src0, rtx src1, bool do_src1)
+{
+  dest = gen_lowpart (dest_mode, dest);
+
+  if (src0 == const0_rtx)
+    src0 = CONST0_RTX (src_mode);
+  else
+    src0 = gen_lowpart (src_mode, src0);
+
+  if (do_src1)
+    {
+      if (src1 == const0_rtx)
+       src1 = CONST0_RTX (src_mode);
+      else
+       src1 = gen_lowpart (src_mode, src1);
+    }
+
+  emit_insn ((*gen) (dest, src0, src1));
+}
+\f
+
+
+/* Intrinsics  */
+
+struct tile_builtin_info
+{
+  enum insn_code icode;
+  tree fndecl;
+};
+
+static struct tile_builtin_info tilepro_builtin_info[TILEPRO_BUILTIN_max] = {
+  { CODE_FOR_addsi3,                    NULL }, /* add */
+  { CODE_FOR_insn_addb,                 NULL }, /* addb */
+  { CODE_FOR_insn_addbs_u,              NULL }, /* addbs_u */
+  { CODE_FOR_insn_addh,                 NULL }, /* addh */
+  { CODE_FOR_insn_addhs,                NULL }, /* addhs */
+  { CODE_FOR_insn_addib,                NULL }, /* addib */
+  { CODE_FOR_insn_addih,                NULL }, /* addih */
+  { CODE_FOR_insn_addlis,               NULL }, /* addlis */
+  { CODE_FOR_ssaddsi3,                  NULL }, /* adds */
+  { CODE_FOR_insn_adiffb_u,             NULL }, /* adiffb_u */
+  { CODE_FOR_insn_adiffh,               NULL }, /* adiffh */
+  { CODE_FOR_andsi3,                    NULL }, /* and */
+  { CODE_FOR_insn_auli,                 NULL }, /* auli */
+  { CODE_FOR_insn_avgb_u,               NULL }, /* avgb_u */
+  { CODE_FOR_insn_avgh,                 NULL }, /* avgh */
+  { CODE_FOR_insn_bitx,                 NULL }, /* bitx */
+  { CODE_FOR_bswapsi2,                  NULL }, /* bytex */
+  { CODE_FOR_clzsi2,                    NULL }, /* clz */
+  { CODE_FOR_insn_crc32_32,             NULL }, /* crc32_32 */
+  { CODE_FOR_insn_crc32_8,              NULL }, /* crc32_8 */
+  { CODE_FOR_ctzsi2,                    NULL }, /* ctz */
+  { CODE_FOR_insn_drain,                NULL }, /* drain */
+  { CODE_FOR_insn_dtlbpr,               NULL }, /* dtlbpr */
+  { CODE_FOR_insn_dword_align,          NULL }, /* dword_align */
+  { CODE_FOR_insn_finv,                 NULL }, /* finv */
+  { CODE_FOR_insn_flush,                NULL }, /* flush */
+  { CODE_FOR_insn_fnop,                 NULL }, /* fnop */
+  { CODE_FOR_insn_icoh,                 NULL }, /* icoh */
+  { CODE_FOR_insn_ill,                  NULL }, /* ill */
+  { CODE_FOR_insn_info,                 NULL }, /* info */
+  { CODE_FOR_insn_infol,                NULL }, /* infol */
+  { CODE_FOR_insn_inthb,                NULL }, /* inthb */
+  { CODE_FOR_insn_inthh,                NULL }, /* inthh */
+  { CODE_FOR_insn_intlb,                NULL }, /* intlb */
+  { CODE_FOR_insn_intlh,                NULL }, /* intlh */
+  { CODE_FOR_insn_inv,                  NULL }, /* inv */
+  { CODE_FOR_insn_lb,                   NULL }, /* lb */
+  { CODE_FOR_insn_lb_u,                 NULL }, /* lb_u */
+  { CODE_FOR_insn_lh,                   NULL }, /* lh */
+  { CODE_FOR_insn_lh_u,                 NULL }, /* lh_u */
+  { CODE_FOR_insn_lnk,                  NULL }, /* lnk */
+  { CODE_FOR_insn_lw,                   NULL }, /* lw */
+  { CODE_FOR_insn_lw_na,                NULL }, /* lw_na */
+  { CODE_FOR_insn_lb_L2,                NULL }, /* lb_L2 */
+  { CODE_FOR_insn_lb_u_L2,              NULL }, /* lb_u_L2 */
+  { CODE_FOR_insn_lh_L2,                NULL }, /* lh_L2 */
+  { CODE_FOR_insn_lh_u_L2,              NULL }, /* lh_u_L2 */
+  { CODE_FOR_insn_lw_L2,                NULL }, /* lw_L2 */
+  { CODE_FOR_insn_lw_na_L2,             NULL }, /* lw_na_L2 */
+  { CODE_FOR_insn_lb_miss,              NULL }, /* lb_miss */
+  { CODE_FOR_insn_lb_u_miss,            NULL }, /* lb_u_miss */
+  { CODE_FOR_insn_lh_miss,              NULL }, /* lh_miss */
+  { CODE_FOR_insn_lh_u_miss,            NULL }, /* lh_u_miss */
+  { CODE_FOR_insn_lw_miss,              NULL }, /* lw_miss */
+  { CODE_FOR_insn_lw_na_miss,           NULL }, /* lw_na_miss */
+  { CODE_FOR_insn_maxb_u,               NULL }, /* maxb_u */
+  { CODE_FOR_insn_maxh,                 NULL }, /* maxh */
+  { CODE_FOR_insn_maxib_u,              NULL }, /* maxib_u */
+  { CODE_FOR_insn_maxih,                NULL }, /* maxih */
+  { CODE_FOR_memory_barrier,            NULL }, /* mf */
+  { CODE_FOR_insn_mfspr,                NULL }, /* mfspr */
+  { CODE_FOR_insn_minb_u,               NULL }, /* minb_u */
+  { CODE_FOR_insn_minh,                 NULL }, /* minh */
+  { CODE_FOR_insn_minib_u,              NULL }, /* minib_u */
+  { CODE_FOR_insn_minih,                NULL }, /* minih */
+  { CODE_FOR_insn_mm,                   NULL }, /* mm */
+  { CODE_FOR_insn_mnz,                  NULL }, /* mnz */
+  { CODE_FOR_insn_mnzb,                 NULL }, /* mnzb */
+  { CODE_FOR_insn_mnzh,                 NULL }, /* mnzh */
+  { CODE_FOR_movsi,                     NULL }, /* move */
+  { CODE_FOR_insn_movelis,              NULL }, /* movelis */
+  { CODE_FOR_insn_mtspr,                NULL }, /* mtspr */
+  { CODE_FOR_insn_mulhh_ss,             NULL }, /* mulhh_ss */
+  { CODE_FOR_insn_mulhh_su,             NULL }, /* mulhh_su */
+  { CODE_FOR_insn_mulhh_uu,             NULL }, /* mulhh_uu */
+  { CODE_FOR_insn_mulhha_ss,            NULL }, /* mulhha_ss */
+  { CODE_FOR_insn_mulhha_su,            NULL }, /* mulhha_su */
+  { CODE_FOR_insn_mulhha_uu,            NULL }, /* mulhha_uu */
+  { CODE_FOR_insn_mulhhsa_uu,           NULL }, /* mulhhsa_uu */
+  { CODE_FOR_insn_mulhl_ss,             NULL }, /* mulhl_ss */
+  { CODE_FOR_insn_mulhl_su,             NULL }, /* mulhl_su */
+  { CODE_FOR_insn_mulhl_us,             NULL }, /* mulhl_us */
+  { CODE_FOR_insn_mulhl_uu,             NULL }, /* mulhl_uu */
+  { CODE_FOR_insn_mulhla_ss,            NULL }, /* mulhla_ss */
+  { CODE_FOR_insn_mulhla_su,            NULL }, /* mulhla_su */
+  { CODE_FOR_insn_mulhla_us,            NULL }, /* mulhla_us */
+  { CODE_FOR_insn_mulhla_uu,            NULL }, /* mulhla_uu */
+  { CODE_FOR_insn_mulhlsa_uu,           NULL }, /* mulhlsa_uu */
+  { CODE_FOR_insn_mulll_ss,             NULL }, /* mulll_ss */
+  { CODE_FOR_insn_mulll_su,             NULL }, /* mulll_su */
+  { CODE_FOR_insn_mulll_uu,             NULL }, /* mulll_uu */
+  { CODE_FOR_insn_mullla_ss,            NULL }, /* mullla_ss */
+  { CODE_FOR_insn_mullla_su,            NULL }, /* mullla_su */
+  { CODE_FOR_insn_mullla_uu,            NULL }, /* mullla_uu */
+  { CODE_FOR_insn_mulllsa_uu,           NULL }, /* mulllsa_uu */
+  { CODE_FOR_insn_mvnz,                 NULL }, /* mvnz */
+  { CODE_FOR_insn_mvz,                  NULL }, /* mvz */
+  { CODE_FOR_insn_mz,                   NULL }, /* mz */
+  { CODE_FOR_insn_mzb,                  NULL }, /* mzb */
+  { CODE_FOR_insn_mzh,                  NULL }, /* mzh */
+  { CODE_FOR_insn_nap,                  NULL }, /* nap */
+  { CODE_FOR_nop,                       NULL }, /* nop */
+  { CODE_FOR_insn_nor,                  NULL }, /* nor */
+  { CODE_FOR_iorsi3,                    NULL }, /* or */
+  { CODE_FOR_insn_packbs_u,             NULL }, /* packbs_u */
+  { CODE_FOR_insn_packhb,               NULL }, /* packhb */
+  { CODE_FOR_insn_packhs,               NULL }, /* packhs */
+  { CODE_FOR_insn_packlb,               NULL }, /* packlb */
+  { CODE_FOR_popcountsi2,               NULL }, /* pcnt */
+  { CODE_FOR_insn_prefetch,             NULL }, /* prefetch */
+  { CODE_FOR_insn_prefetch_L1,          NULL }, /* prefetch_L1 */
+  { CODE_FOR_rotlsi3,                   NULL }, /* rl */
+  { CODE_FOR_insn_s1a,                  NULL }, /* s1a */
+  { CODE_FOR_insn_s2a,                  NULL }, /* s2a */
+  { CODE_FOR_insn_s3a,                  NULL }, /* s3a */
+  { CODE_FOR_insn_sadab_u,              NULL }, /* sadab_u */
+  { CODE_FOR_insn_sadah,                NULL }, /* sadah */
+  { CODE_FOR_insn_sadah_u,              NULL }, /* sadah_u */
+  { CODE_FOR_insn_sadb_u,               NULL }, /* sadb_u */
+  { CODE_FOR_insn_sadh,                 NULL }, /* sadh */
+  { CODE_FOR_insn_sadh_u,               NULL }, /* sadh_u */
+  { CODE_FOR_insn_sb,                   NULL }, /* sb */
+  { CODE_FOR_insn_seq,                  NULL }, /* seq */
+  { CODE_FOR_insn_seqb,                 NULL }, /* seqb */
+  { CODE_FOR_insn_seqh,                 NULL }, /* seqh */
+  { CODE_FOR_insn_seqib,                NULL }, /* seqib */
+  { CODE_FOR_insn_seqih,                NULL }, /* seqih */
+  { CODE_FOR_insn_sh,                   NULL }, /* sh */
+  { CODE_FOR_ashlsi3,                   NULL }, /* shl */
+  { CODE_FOR_insn_shlb,                 NULL }, /* shlb */
+  { CODE_FOR_insn_shlh,                 NULL }, /* shlh */
+  { CODE_FOR_insn_shlb,                 NULL }, /* shlib */
+  { CODE_FOR_insn_shlh,                 NULL }, /* shlih */
+  { CODE_FOR_lshrsi3,                   NULL }, /* shr */
+  { CODE_FOR_insn_shrb,                 NULL }, /* shrb */
+  { CODE_FOR_insn_shrh,                 NULL }, /* shrh */
+  { CODE_FOR_insn_shrb,                 NULL }, /* shrib */
+  { CODE_FOR_insn_shrh,                 NULL }, /* shrih */
+  { CODE_FOR_insn_slt,                  NULL }, /* slt */
+  { CODE_FOR_insn_slt_u,                NULL }, /* slt_u */
+  { CODE_FOR_insn_sltb,                 NULL }, /* sltb */
+  { CODE_FOR_insn_sltb_u,               NULL }, /* sltb_u */
+  { CODE_FOR_insn_slte,                 NULL }, /* slte */
+  { CODE_FOR_insn_slte_u,               NULL }, /* slte_u */
+  { CODE_FOR_insn_slteb,                NULL }, /* slteb */
+  { CODE_FOR_insn_slteb_u,              NULL }, /* slteb_u */
+  { CODE_FOR_insn_slteh,                NULL }, /* slteh */
+  { CODE_FOR_insn_slteh_u,              NULL }, /* slteh_u */
+  { CODE_FOR_insn_slth,                 NULL }, /* slth */
+  { CODE_FOR_insn_slth_u,               NULL }, /* slth_u */
+  { CODE_FOR_insn_sltib,                NULL }, /* sltib */
+  { CODE_FOR_insn_sltib_u,              NULL }, /* sltib_u */
+  { CODE_FOR_insn_sltih,                NULL }, /* sltih */
+  { CODE_FOR_insn_sltih_u,              NULL }, /* sltih_u */
+  { CODE_FOR_insn_sne,                  NULL }, /* sne */
+  { CODE_FOR_insn_sneb,                 NULL }, /* sneb */
+  { CODE_FOR_insn_sneh,                 NULL }, /* sneh */
+  { CODE_FOR_ashrsi3,                   NULL }, /* sra */
+  { CODE_FOR_insn_srab,                 NULL }, /* srab */
+  { CODE_FOR_insn_srah,                 NULL }, /* srah */
+  { CODE_FOR_insn_srab,                 NULL }, /* sraib */
+  { CODE_FOR_insn_srah,                 NULL }, /* sraih */
+  { CODE_FOR_subsi3,                    NULL }, /* sub */
+  { CODE_FOR_insn_subb,                 NULL }, /* subb */
+  { CODE_FOR_insn_subbs_u,              NULL }, /* subbs_u */
+  { CODE_FOR_insn_subh,                 NULL }, /* subh */
+  { CODE_FOR_insn_subhs,                NULL }, /* subhs */
+  { CODE_FOR_sssubsi3,                  NULL }, /* subs */
+  { CODE_FOR_insn_sw,                   NULL }, /* sw */
+  { CODE_FOR_insn_tblidxb0,             NULL }, /* tblidxb0 */
+  { CODE_FOR_insn_tblidxb1,             NULL }, /* tblidxb1 */
+  { CODE_FOR_insn_tblidxb2,             NULL }, /* tblidxb2 */
+  { CODE_FOR_insn_tblidxb3,             NULL }, /* tblidxb3 */
+  { CODE_FOR_insn_tns,                  NULL }, /* tns */
+  { CODE_FOR_insn_wh64,                 NULL }, /* wh64 */
+  { CODE_FOR_xorsi3,                    NULL }, /* xor */
+  { CODE_FOR_tilepro_network_barrier,   NULL }, /* network_barrier */
+  { CODE_FOR_tilepro_idn0_receive,      NULL }, /* idn0_receive */
+  { CODE_FOR_tilepro_idn1_receive,      NULL }, /* idn1_receive */
+  { CODE_FOR_tilepro_idn_send,          NULL }, /* idn_send */
+  { CODE_FOR_tilepro_sn_receive,        NULL }, /* sn_receive */
+  { CODE_FOR_tilepro_sn_send,           NULL }, /* sn_send */
+  { CODE_FOR_tilepro_udn0_receive,      NULL }, /* udn0_receive */
+  { CODE_FOR_tilepro_udn1_receive,      NULL }, /* udn1_receive */
+  { CODE_FOR_tilepro_udn2_receive,      NULL }, /* udn2_receive */
+  { CODE_FOR_tilepro_udn3_receive,      NULL }, /* udn3_receive */
+  { CODE_FOR_tilepro_udn_send,          NULL }, /* udn_send */
+};
+
+
+struct tilepro_builtin_def
+{
+  const char *name;
+  enum tilepro_builtin code;
+  bool is_const;
+  /* The first character is the return type.  Subsequent characters
+     are the argument types. See char_to_type.  */
+  const char *type;
+};
+
+
+static const struct tilepro_builtin_def tilepro_builtins[] = {
+  { "__insn_add",             TILEPRO_INSN_ADD,         true,  "lll"   },
+  { "__insn_addb",            TILEPRO_INSN_ADDB,        true,  "lll"   },
+  { "__insn_addbs_u",         TILEPRO_INSN_ADDBS_U,     false, "lll"   },
+  { "__insn_addh",            TILEPRO_INSN_ADDH,        true,  "lll"   },
+  { "__insn_addhs",           TILEPRO_INSN_ADDHS,       false, "lll"   },
+  { "__insn_addi",            TILEPRO_INSN_ADD,         true,  "lll"   },
+  { "__insn_addib",           TILEPRO_INSN_ADDIB,       true,  "lll"   },
+  { "__insn_addih",           TILEPRO_INSN_ADDIH,       true,  "lll"   },
+  { "__insn_addli",           TILEPRO_INSN_ADD,         true,  "lll"   },
+  { "__insn_addlis",          TILEPRO_INSN_ADDLIS,      false, "lll"   },
+  { "__insn_adds",            TILEPRO_INSN_ADDS,        false, "lll"   },
+  { "__insn_adiffb_u",        TILEPRO_INSN_ADIFFB_U,    true,  "lll"   },
+  { "__insn_adiffh",          TILEPRO_INSN_ADIFFH,      true,  "lll"   },
+  { "__insn_and",             TILEPRO_INSN_AND,         true,  "lll"   },
+  { "__insn_andi",            TILEPRO_INSN_AND,         true,  "lll"   },
+  { "__insn_auli",            TILEPRO_INSN_AULI,        true,  "lll"   },
+  { "__insn_avgb_u",          TILEPRO_INSN_AVGB_U,      true,  "lll"   },
+  { "__insn_avgh",            TILEPRO_INSN_AVGH,        true,  "lll"   },
+  { "__insn_bitx",            TILEPRO_INSN_BITX,        true,  "ll"    },
+  { "__insn_bytex",           TILEPRO_INSN_BYTEX,       true,  "ll"    },
+  { "__insn_clz",             TILEPRO_INSN_CLZ,         true,  "ll"    },
+  { "__insn_crc32_32",        TILEPRO_INSN_CRC32_32,    true,  "lll"   },
+  { "__insn_crc32_8",         TILEPRO_INSN_CRC32_8,     true,  "lll"   },
+  { "__insn_ctz",             TILEPRO_INSN_CTZ,         true,  "ll"    },
+  { "__insn_drain",           TILEPRO_INSN_DRAIN,       false, "v"     },
+  { "__insn_dtlbpr",          TILEPRO_INSN_DTLBPR,      false, "vl"    },
+  { "__insn_dword_align",     TILEPRO_INSN_DWORD_ALIGN, true,  "lllk"  },
+  { "__insn_finv",            TILEPRO_INSN_FINV,        false, "vk"    },
+  { "__insn_flush",           TILEPRO_INSN_FLUSH,       false, "vk"    },
+  { "__insn_fnop",            TILEPRO_INSN_FNOP,        false, "v"     },
+  { "__insn_icoh",            TILEPRO_INSN_ICOH,        false, "vk"    },
+  { "__insn_ill",             TILEPRO_INSN_ILL,         false, "v"     },
+  { "__insn_info",            TILEPRO_INSN_INFO,        false, "vl"    },
+  { "__insn_infol",           TILEPRO_INSN_INFOL,       false, "vl"    },
+  { "__insn_inthb",           TILEPRO_INSN_INTHB,       true,  "lll"   },
+  { "__insn_inthh",           TILEPRO_INSN_INTHH,       true,  "lll"   },
+  { "__insn_intlb",           TILEPRO_INSN_INTLB,       true,  "lll"   },
+  { "__insn_intlh",           TILEPRO_INSN_INTLH,       true,  "lll"   },
+  { "__insn_inv",             TILEPRO_INSN_INV,         false, "vp"    },
+  { "__insn_lb",              TILEPRO_INSN_LB,          false, "lk"    },
+  { "__insn_lb_u",            TILEPRO_INSN_LB_U,        false, "lk"    },
+  { "__insn_lh",              TILEPRO_INSN_LH,          false, "lk"    },
+  { "__insn_lh_u",            TILEPRO_INSN_LH_U,        false, "lk"    },
+  { "__insn_lnk",             TILEPRO_INSN_LNK,         true,  "l"     },
+  { "__insn_lw",              TILEPRO_INSN_LW,          false, "lk"    },
+  { "__insn_lw_na",           TILEPRO_INSN_LW_NA,       false, "lk"    },
+  { "__insn_lb_L2",           TILEPRO_INSN_LB_L2,       false, "lk"    },
+  { "__insn_lb_u_L2",         TILEPRO_INSN_LB_U_L2,     false, "lk"    },
+  { "__insn_lh_L2",           TILEPRO_INSN_LH_L2,       false, "lk"    },
+  { "__insn_lh_u_L2",         TILEPRO_INSN_LH_U_L2,     false, "lk"    },
+  { "__insn_lw_L2",           TILEPRO_INSN_LW_L2,       false, "lk"    },
+  { "__insn_lw_na_L2",        TILEPRO_INSN_LW_NA_L2,    false, "lk"    },
+  { "__insn_lb_miss",         TILEPRO_INSN_LB_MISS,     false, "lk"    },
+  { "__insn_lb_u_miss",       TILEPRO_INSN_LB_U_MISS,   false, "lk"    },
+  { "__insn_lh_miss",         TILEPRO_INSN_LH_MISS,     false, "lk"    },
+  { "__insn_lh_u_miss",       TILEPRO_INSN_LH_U_MISS,   false, "lk"    },
+  { "__insn_lw_miss",         TILEPRO_INSN_LW_MISS,     false, "lk"    },
+  { "__insn_lw_na_miss",      TILEPRO_INSN_LW_NA_MISS,  false, "lk"    },
+  { "__insn_maxb_u",          TILEPRO_INSN_MAXB_U,      true,  "lll"   },
+  { "__insn_maxh",            TILEPRO_INSN_MAXH,        true,  "lll"   },
+  { "__insn_maxib_u",         TILEPRO_INSN_MAXIB_U,     true,  "lll"   },
+  { "__insn_maxih",           TILEPRO_INSN_MAXIH,       true,  "lll"   },
+  { "__insn_mf",              TILEPRO_INSN_MF,          false, "v"     },
+  { "__insn_mfspr",           TILEPRO_INSN_MFSPR,       false, "ll"    },
+  { "__insn_minb_u",          TILEPRO_INSN_MINB_U,      true,  "lll"   },
+  { "__insn_minh",            TILEPRO_INSN_MINH,        true,  "lll"   },
+  { "__insn_minib_u",         TILEPRO_INSN_MINIB_U,     true,  "lll"   },
+  { "__insn_minih",           TILEPRO_INSN_MINIH,       true,  "lll"   },
+  { "__insn_mm",              TILEPRO_INSN_MM,          true,  "lllll" },
+  { "__insn_mnz",             TILEPRO_INSN_MNZ,         true,  "lll"   },
+  { "__insn_mnzb",            TILEPRO_INSN_MNZB,        true,  "lll"   },
+  { "__insn_mnzh",            TILEPRO_INSN_MNZH,        true,  "lll"   },
+  { "__insn_move",            TILEPRO_INSN_MOVE,        true,  "ll"    },
+  { "__insn_movei",           TILEPRO_INSN_MOVE,        true,  "ll"    },
+  { "__insn_moveli",          TILEPRO_INSN_MOVE,        true,  "ll"    },
+  { "__insn_movelis",         TILEPRO_INSN_MOVELIS,     false, "ll"    },
+  { "__insn_mtspr",           TILEPRO_INSN_MTSPR,       false, "vll"   },
+  { "__insn_mulhh_ss",        TILEPRO_INSN_MULHH_SS,    true,  "lll"   },
+  { "__insn_mulhh_su",        TILEPRO_INSN_MULHH_SU,    true,  "lll"   },
+  { "__insn_mulhh_uu",        TILEPRO_INSN_MULHH_UU,    true,  "lll"   },
+  { "__insn_mulhha_ss",       TILEPRO_INSN_MULHHA_SS,   true,  "llll"  },
+  { "__insn_mulhha_su",       TILEPRO_INSN_MULHHA_SU,   true,  "llll"  },
+  { "__insn_mulhha_uu",       TILEPRO_INSN_MULHHA_UU,   true,  "llll"  },
+  { "__insn_mulhhsa_uu",      TILEPRO_INSN_MULHHSA_UU,  true,  "llll"  },
+  { "__insn_mulhl_ss",        TILEPRO_INSN_MULHL_SS,    true,  "lll"   },
+  { "__insn_mulhl_su",        TILEPRO_INSN_MULHL_SU,    true,  "lll"   },
+  { "__insn_mulhl_us",        TILEPRO_INSN_MULHL_US,    true,  "lll"   },
+  { "__insn_mulhl_uu",        TILEPRO_INSN_MULHL_UU,    true,  "lll"   },
+  { "__insn_mulhla_ss",       TILEPRO_INSN_MULHLA_SS,   true,  "llll"  },
+  { "__insn_mulhla_su",       TILEPRO_INSN_MULHLA_SU,   true,  "llll"  },
+  { "__insn_mulhla_us",       TILEPRO_INSN_MULHLA_US,   true,  "llll"  },
+  { "__insn_mulhla_uu",       TILEPRO_INSN_MULHLA_UU,   true,  "llll"  },
+  { "__insn_mulhlsa_uu",      TILEPRO_INSN_MULHLSA_UU,  true,  "llll"  },
+  { "__insn_mulll_ss",        TILEPRO_INSN_MULLL_SS,    true,  "lll"   },
+  { "__insn_mulll_su",        TILEPRO_INSN_MULLL_SU,    true,  "lll"   },
+  { "__insn_mulll_uu",        TILEPRO_INSN_MULLL_UU,    true,  "lll"   },
+  { "__insn_mullla_ss",       TILEPRO_INSN_MULLLA_SS,   true,  "llll"  },
+  { "__insn_mullla_su",       TILEPRO_INSN_MULLLA_SU,   true,  "llll"  },
+  { "__insn_mullla_uu",       TILEPRO_INSN_MULLLA_UU,   true,  "llll"  },
+  { "__insn_mulllsa_uu",      TILEPRO_INSN_MULLLSA_UU,  true,  "llll"  },
+  { "__insn_mvnz",            TILEPRO_INSN_MVNZ,        true,  "llll"  },
+  { "__insn_mvz",             TILEPRO_INSN_MVZ,         true,  "llll"  },
+  { "__insn_mz",              TILEPRO_INSN_MZ,          true,  "lll"   },
+  { "__insn_mzb",             TILEPRO_INSN_MZB,         true,  "lll"   },
+  { "__insn_mzh",             TILEPRO_INSN_MZH,         true,  "lll"   },
+  { "__insn_nap",             TILEPRO_INSN_NAP,         false, "v"     },
+  { "__insn_nop",             TILEPRO_INSN_NOP,         true,  "v"     },
+  { "__insn_nor",             TILEPRO_INSN_NOR,         true,  "lll"   },
+  { "__insn_or",              TILEPRO_INSN_OR,          true,  "lll"   },
+  { "__insn_ori",             TILEPRO_INSN_OR,          true,  "lll"   },
+  { "__insn_packbs_u",        TILEPRO_INSN_PACKBS_U,    false, "lll"   },
+  { "__insn_packhb",          TILEPRO_INSN_PACKHB,      true,  "lll"   },
+  { "__insn_packhs",          TILEPRO_INSN_PACKHS,      false, "lll"   },
+  { "__insn_packlb",          TILEPRO_INSN_PACKLB,      true,  "lll"   },
+  { "__insn_pcnt",            TILEPRO_INSN_PCNT,        true,  "ll"    },
+  { "__insn_prefetch",        TILEPRO_INSN_PREFETCH,    false, "vk"    },
+  { "__insn_prefetch_L1",     TILEPRO_INSN_PREFETCH_L1, false, "vk"    },
+  { "__insn_rl",              TILEPRO_INSN_RL,          true,  "lll"   },
+  { "__insn_rli",             TILEPRO_INSN_RL,          true,  "lll"   },
+  { "__insn_s1a",             TILEPRO_INSN_S1A,         true,  "lll"   },
+  { "__insn_s2a",             TILEPRO_INSN_S2A,         true,  "lll"   },
+  { "__insn_s3a",             TILEPRO_INSN_S3A,         true,  "lll"   },
+  { "__insn_sadab_u",         TILEPRO_INSN_SADAB_U,     true,  "llll"  },
+  { "__insn_sadah",           TILEPRO_INSN_SADAH,       true,  "llll"  },
+  { "__insn_sadah_u",         TILEPRO_INSN_SADAH_U,     true,  "llll"  },
+  { "__insn_sadb_u",          TILEPRO_INSN_SADB_U,      true,  "lll"   },
+  { "__insn_sadh",            TILEPRO_INSN_SADH,        true,  "lll"   },
+  { "__insn_sadh_u",          TILEPRO_INSN_SADH_U,      true,  "lll"   },
+  { "__insn_sb",              TILEPRO_INSN_SB,          false, "vpl"   },
+  { "__insn_seq",             TILEPRO_INSN_SEQ,         true,  "lll"   },
+  { "__insn_seqb",            TILEPRO_INSN_SEQB,        true,  "lll"   },
+  { "__insn_seqh",            TILEPRO_INSN_SEQH,        true,  "lll"   },
+  { "__insn_seqi",            TILEPRO_INSN_SEQ,         true,  "lll"   },
+  { "__insn_seqib",           TILEPRO_INSN_SEQIB,       true,  "lll"   },
+  { "__insn_seqih",           TILEPRO_INSN_SEQIH,       true,  "lll"   },
+  { "__insn_sh",              TILEPRO_INSN_SH,          false, "vpl"   },
+  { "__insn_shl",             TILEPRO_INSN_SHL,         true,  "lll"   },
+  { "__insn_shlb",            TILEPRO_INSN_SHLB,        true,  "lll"   },
+  { "__insn_shlh",            TILEPRO_INSN_SHLH,        true,  "lll"   },
+  { "__insn_shli",            TILEPRO_INSN_SHL,         true,  "lll"   },
+  { "__insn_shlib",           TILEPRO_INSN_SHLIB,       true,  "lll"   },
+  { "__insn_shlih",           TILEPRO_INSN_SHLIH,       true,  "lll"   },
+  { "__insn_shr",             TILEPRO_INSN_SHR,         true,  "lll"   },
+  { "__insn_shrb",            TILEPRO_INSN_SHRB,        true,  "lll"   },
+  { "__insn_shrh",            TILEPRO_INSN_SHRH,        true,  "lll"   },
+  { "__insn_shri",            TILEPRO_INSN_SHR,         true,  "lll"   },
+  { "__insn_shrib",           TILEPRO_INSN_SHRIB,       true,  "lll"   },
+  { "__insn_shrih",           TILEPRO_INSN_SHRIH,       true,  "lll"   },
+  { "__insn_slt",             TILEPRO_INSN_SLT,         true,  "lll"   },
+  { "__insn_slt_u",           TILEPRO_INSN_SLT_U,       true,  "lll"   },
+  { "__insn_sltb",            TILEPRO_INSN_SLTB,        true,  "lll"   },
+  { "__insn_sltb_u",          TILEPRO_INSN_SLTB_U,      true,  "lll"   },
+  { "__insn_slte",            TILEPRO_INSN_SLTE,        true,  "lll"   },
+  { "__insn_slte_u",          TILEPRO_INSN_SLTE_U,      true,  "lll"   },
+  { "__insn_slteb",           TILEPRO_INSN_SLTEB,       true,  "lll"   },
+  { "__insn_slteb_u",         TILEPRO_INSN_SLTEB_U,     true,  "lll"   },
+  { "__insn_slteh",           TILEPRO_INSN_SLTEH,       true,  "lll"   },
+  { "__insn_slteh_u",         TILEPRO_INSN_SLTEH_U,     true,  "lll"   },
+  { "__insn_slth",            TILEPRO_INSN_SLTH,        true,  "lll"   },
+  { "__insn_slth_u",          TILEPRO_INSN_SLTH_U,      true,  "lll"   },
+  { "__insn_slti",            TILEPRO_INSN_SLT,         true,  "lll"   },
+  { "__insn_slti_u",          TILEPRO_INSN_SLT_U,       true,  "lll"   },
+  { "__insn_sltib",           TILEPRO_INSN_SLTIB,       true,  "lll"   },
+  { "__insn_sltib_u",         TILEPRO_INSN_SLTIB_U,     true,  "lll"   },
+  { "__insn_sltih",           TILEPRO_INSN_SLTIH,       true,  "lll"   },
+  { "__insn_sltih_u",         TILEPRO_INSN_SLTIH_U,     true,  "lll"   },
+  { "__insn_sne",             TILEPRO_INSN_SNE,         true,  "lll"   },
+  { "__insn_sneb",            TILEPRO_INSN_SNEB,        true,  "lll"   },
+  { "__insn_sneh",            TILEPRO_INSN_SNEH,        true,  "lll"   },
+  { "__insn_sra",             TILEPRO_INSN_SRA,         true,  "lll"   },
+  { "__insn_srab",            TILEPRO_INSN_SRAB,        true,  "lll"   },
+  { "__insn_srah",            TILEPRO_INSN_SRAH,        true,  "lll"   },
+  { "__insn_srai",            TILEPRO_INSN_SRA,         true,  "lll"   },
+  { "__insn_sraib",           TILEPRO_INSN_SRAIB,       true,  "lll"   },
+  { "__insn_sraih",           TILEPRO_INSN_SRAIH,       true,  "lll"   },
+  { "__insn_sub",             TILEPRO_INSN_SUB,         true,  "lll"   },
+  { "__insn_subb",            TILEPRO_INSN_SUBB,        true,  "lll"   },
+  { "__insn_subbs_u",         TILEPRO_INSN_SUBBS_U,     false, "lll"   },
+  { "__insn_subh",            TILEPRO_INSN_SUBH,        true,  "lll"   },
+  { "__insn_subhs",           TILEPRO_INSN_SUBHS,       false, "lll"   },
+  { "__insn_subs",            TILEPRO_INSN_SUBS,        false, "lll"   },
+  { "__insn_sw",              TILEPRO_INSN_SW,          false, "vpl"   },
+  { "__insn_tblidxb0",        TILEPRO_INSN_TBLIDXB0,    true,  "lll"   },
+  { "__insn_tblidxb1",        TILEPRO_INSN_TBLIDXB1,    true,  "lll"   },
+  { "__insn_tblidxb2",        TILEPRO_INSN_TBLIDXB2,    true,  "lll"   },
+  { "__insn_tblidxb3",        TILEPRO_INSN_TBLIDXB3,    true,  "lll"   },
+  { "__insn_tns",             TILEPRO_INSN_TNS,         false, "lp"    },
+  { "__insn_wh64",            TILEPRO_INSN_WH64,        false, "vp"    },
+  { "__insn_xor",             TILEPRO_INSN_XOR,         true,  "lll"   },
+  { "__insn_xori",            TILEPRO_INSN_XOR,         true,  "lll"   },
+  { "__tile_network_barrier", TILEPRO_NETWORK_BARRIER,  false, "v"     },
+  { "__tile_idn0_receive",    TILEPRO_IDN0_RECEIVE,     false, "l"     },
+  { "__tile_idn1_receive",    TILEPRO_IDN1_RECEIVE,     false, "l"     },
+  { "__tile_idn_send",        TILEPRO_IDN_SEND,         false, "vl"    },
+  { "__tile_sn_receive",      TILEPRO_SN_RECEIVE,       false, "l"     },
+  { "__tile_sn_send",         TILEPRO_SN_SEND,          false, "vl"    },
+  { "__tile_udn0_receive",    TILEPRO_UDN0_RECEIVE,     false, "l"     },
+  { "__tile_udn1_receive",    TILEPRO_UDN1_RECEIVE,     false, "l"     },
+  { "__tile_udn2_receive",    TILEPRO_UDN2_RECEIVE,     false, "l"     },
+  { "__tile_udn3_receive",    TILEPRO_UDN3_RECEIVE,     false, "l"     },
+  { "__tile_udn_send",        TILEPRO_UDN_SEND,         false, "vl"    },
+};
+
+
+/* Convert a character in a builtin type string to a tree type.  */
+static tree
+char_to_type (char c)
+{
+  static tree volatile_ptr_type_node = NULL;
+  static tree volatile_const_ptr_type_node = NULL;
+
+  if (volatile_ptr_type_node == NULL)
+    {
+      volatile_ptr_type_node =
+       build_pointer_type (build_qualified_type (void_type_node,
+                                                 TYPE_QUAL_VOLATILE));
+      volatile_const_ptr_type_node =
+       build_pointer_type (build_qualified_type (void_type_node,
+                                                 TYPE_QUAL_CONST
+                                                 | TYPE_QUAL_VOLATILE));
+    }
+
+  switch (c)
+    {
+    case 'v':
+      return void_type_node;
+    case 'l':
+      return long_unsigned_type_node;
+    case 'p':
+      return volatile_ptr_type_node;
+    case 'k':
+      return volatile_const_ptr_type_node;
+    default:
+      gcc_unreachable ();
+    }
+}
+
+
+/* Implement TARGET_INIT_BUILTINS.  */
+static void
+tilepro_init_builtins (void)
+{
+  size_t i;
+
+  for (i = 0; i < ARRAY_SIZE (tilepro_builtins); i++)
+    {
+      const struct tilepro_builtin_def *p = &tilepro_builtins[i];
+      tree ftype, ret_type, arg_type_list = void_list_node;
+      tree decl;
+      int j;
+
+      for (j = strlen (p->type) - 1; j > 0; j--)
+       {
+         arg_type_list =
+           tree_cons (NULL_TREE, char_to_type (p->type[j]), arg_type_list);
+       }
+
+      ret_type = char_to_type (p->type[0]);
+
+      ftype = build_function_type (ret_type, arg_type_list);
+
+      decl = add_builtin_function (p->name, ftype, p->code, BUILT_IN_MD,
+                                  NULL, NULL);
+
+      if (p->is_const)
+       TREE_READONLY (decl) = 1;
+      TREE_NOTHROW (decl) = 1;
+
+      if (tilepro_builtin_info[p->code].fndecl == NULL)
+       tilepro_builtin_info[p->code].fndecl = decl;
+    }
+}
+
+
+/* Implement TARGET_EXPAND_BUILTIN.  */
+static rtx
+tilepro_expand_builtin (tree exp,
+                       rtx target,
+                       rtx subtarget ATTRIBUTE_UNUSED,
+                       enum machine_mode mode ATTRIBUTE_UNUSED,
+                       int ignore ATTRIBUTE_UNUSED)
+{
+#define MAX_BUILTIN_ARGS 4
+
+  tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
+  unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
+  tree arg;
+  call_expr_arg_iterator iter;
+  enum insn_code icode;
+  rtx op[MAX_BUILTIN_ARGS + 1], pat;
+  int opnum;
+  bool nonvoid;
+  insn_gen_fn fn;
+
+  if (fcode >= TILEPRO_BUILTIN_max)
+    internal_error ("bad builtin fcode");
+  icode = tilepro_builtin_info[fcode].icode;
+  if (icode == 0)
+    internal_error ("bad builtin icode");
+
+  nonvoid = TREE_TYPE (TREE_TYPE (fndecl)) != void_type_node;
+
+  opnum = nonvoid;
+  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
+  {
+    const struct insn_operand_data *insn_op;
+
+    if (arg == error_mark_node)
+      return NULL_RTX;
+    if (opnum > MAX_BUILTIN_ARGS)
+      return NULL_RTX;
+
+    insn_op = &insn_data[icode].operand[opnum];
+
+    op[opnum] = expand_expr (arg, NULL_RTX, insn_op->mode, EXPAND_NORMAL);
+
+    if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
+      op[opnum] = copy_to_mode_reg (insn_op->mode, op[opnum]);
+
+    if (!(*insn_op->predicate) (op[opnum], insn_op->mode))
+      {
+       /* We still failed to meet the predicate even after moving
+          into a register. Assume we needed an immediate.  */
+       error_at (EXPR_LOCATION (exp),
+                 "operand must be an immediate of the right size");
+       return const0_rtx;
+      }
+
+    opnum++;
+  }
+
+  if (nonvoid)
+    {
+      enum machine_mode tmode = insn_data[icode].operand[0].mode;
+      if (!target
+         || GET_MODE (target) != tmode
+         || !(*insn_data[icode].operand[0].predicate) (target, tmode))
+       target = gen_reg_rtx (tmode);
+      op[0] = target;
+    }
+
+  fn = GEN_FCN (icode);
+  switch (opnum)
+    {
+    case 0:
+      pat = fn (NULL_RTX);
+      break;
+    case 1:
+      pat = fn (op[0]);
+      break;
+    case 2:
+      pat = fn (op[0], op[1]);
+      break;
+    case 3:
+      pat = fn (op[0], op[1], op[2]);
+      break;
+    case 4:
+      pat = fn (op[0], op[1], op[2], op[3]);
+      break;
+    case 5:
+      pat = fn (op[0], op[1], op[2], op[3], op[4]);
+      break;
+    default:
+      gcc_unreachable ();
+    }
+  if (!pat)
+    return NULL_RTX;
+  emit_insn (pat);
+
+  if (nonvoid)
+    return target;
+  else
+    return const0_rtx;
+}
+
+
+/* Implement TARGET_BUILTIN_DECL.  */
+static tree
+tilepro_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
+{
+  if (code >= TILEPRO_BUILTIN_max)
+    return error_mark_node;
+
+  return tilepro_builtin_info[code].fndecl;
+}
+\f
+
+
+/* Stack frames  */
+
+/* Return whether REGNO needs to be saved in the stack frame.  */
+static bool
+need_to_save_reg (unsigned int regno)
+{
+  if (!fixed_regs[regno] && !call_used_regs[regno]
+      && df_regs_ever_live_p (regno))
+    return true;
+
+  if (flag_pic
+      && (regno == PIC_OFFSET_TABLE_REGNUM
+         || regno == TILEPRO_PIC_TEXT_LABEL_REGNUM)
+      && (crtl->uses_pic_offset_table || crtl->saves_all_registers))
+    return true;
+
+  if (crtl->calls_eh_return)
+    {
+      unsigned i;
+      for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; i++)
+       {
+         if (regno == EH_RETURN_DATA_REGNO (i))
+           return true;
+       }
+    }
+
+  return false;
+}
+
+
+/* Return the size of the register savev area.  This function is only
+   correct starting with local register allocation */
+static int
+tilepro_saved_regs_size (void)
+{
+  int reg_save_size = 0;
+  int regno;
+  int offset_to_frame;
+  int align_mask;
+
+  for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
+    if (need_to_save_reg (regno))
+      reg_save_size += UNITS_PER_WORD;
+
+  /* Pad out the register save area if necessary to make
+     frame_pointer_rtx be as aligned as the stack pointer.  */
+  offset_to_frame = crtl->args.pretend_args_size + reg_save_size;
+  align_mask = (STACK_BOUNDARY / BITS_PER_UNIT) - 1;
+  reg_save_size += (-offset_to_frame) & align_mask;
+
+  return reg_save_size;
+}
+
+
+/* Round up frame size SIZE.  */
+static int
+round_frame_size (int size)
+{
+  return ((size + STACK_BOUNDARY / BITS_PER_UNIT - 1)
+         & -STACK_BOUNDARY / BITS_PER_UNIT);
+}
+
+
+/* Emit a store in the stack frame to save REGNO at address ADDR, and
+   emit the corresponding REG_CFA_OFFSET note described by CFA and
+   CFA_OFFSET.  Return the emitted insn.  */
+static rtx
+frame_emit_store (int regno, int regno_note, rtx addr, rtx cfa,
+                 int cfa_offset)
+{
+  rtx reg = gen_rtx_REG (Pmode, regno);
+  rtx mem = gen_frame_mem (Pmode, addr);
+  rtx mov = gen_movsi (mem, reg);
+
+  /* Describe what just happened in a way that dwarf understands.  We
+     use temporary registers to hold the address to make scheduling
+     easier, and use the REG_CFA_OFFSET to describe the address as an
+     offset from the CFA.  */
+  rtx reg_note = gen_rtx_REG (Pmode, regno_note);
+  rtx cfa_relative_addr = gen_rtx_PLUS (Pmode, cfa, gen_int_si (cfa_offset));
+  rtx cfa_relative_mem = gen_frame_mem (Pmode, cfa_relative_addr);
+  rtx real = gen_rtx_SET (VOIDmode, cfa_relative_mem, reg_note);
+  add_reg_note (mov, REG_CFA_OFFSET, real);
+
+  return emit_insn (mov);
+}
+
+
+/* Emit a load in the stack frame to load REGNO from address ADDR.
+   Add a REG_CFA_RESTORE note to CFA_RESTORES if CFA_RESTORES is
+   non-null.  Return the emitted insn.  */
+static rtx
+frame_emit_load (int regno, rtx addr, rtx *cfa_restores)
+{
+  rtx reg = gen_rtx_REG (Pmode, regno);
+  rtx mem = gen_frame_mem (Pmode, addr);
+  if (cfa_restores)
+    *cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, *cfa_restores);
+  return emit_insn (gen_movsi (reg, mem));
+}
+
+
+/* Helper function to set RTX_FRAME_RELATED_P on instructions,
+   including sequences.  */
+static rtx
+set_frame_related_p (void)
+{
+  rtx seq = get_insns ();
+  rtx insn;
+
+  end_sequence ();
+
+  if (!seq)
+    return NULL_RTX;
+
+  if (INSN_P (seq))
+    {
+      insn = seq;
+      while (insn != NULL_RTX)
+       {
+         RTX_FRAME_RELATED_P (insn) = 1;
+         insn = NEXT_INSN (insn);
+       }
+      seq = emit_insn (seq);
+    }
+  else
+    {
+      seq = emit_insn (seq);
+      RTX_FRAME_RELATED_P (seq) = 1;
+    }
+  return seq;
+}
+
+
+#define FRP(exp)  (start_sequence (), exp, set_frame_related_p ())
+
+/* This emits code for 'sp += offset'.
+   
+   The ABI only allows us to modify 'sp' in a single 'addi' or
+   'addli', so the backtracer understands it. Larger amounts cannot
+   use those instructions, so are added by placing the offset into a
+   large register and using 'add'.
+
+   This happens after reload, so we need to expand it ourselves.  */
+static rtx
+emit_sp_adjust (int offset, int *next_scratch_regno, bool frame_related,
+               rtx reg_notes)
+{
+  rtx to_add;
+  rtx imm_rtx = gen_int_si (offset);
+
+  rtx insn;
+  if (satisfies_constraint_J (imm_rtx))
+    {
+      /* We can add this using a single addi or addli.  */
+      to_add = imm_rtx;
+    }
+  else
+    {
+      rtx tmp = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
+      tilepro_expand_set_const32 (tmp, imm_rtx);
+      to_add = tmp;
+    }
+
+  /* Actually adjust the stack pointer.  */
+  insn = emit_insn (gen_sp_adjust (stack_pointer_rtx, stack_pointer_rtx,
+                                  to_add));
+  REG_NOTES (insn) = reg_notes;
+
+  /* Describe what just happened in a way that dwarf understands.  */
+  if (frame_related)
+    {
+      rtx real = gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+                             gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                                           imm_rtx));
+      RTX_FRAME_RELATED_P (insn) = 1;
+      add_reg_note (insn, REG_CFA_ADJUST_CFA, real);
+    }
+
+  return insn;
+}
+
+
+/* Return whether the current function is leaf.  This takes into
+   account whether the function calls tls_get_addr.  */
+static bool
+tilepro_current_function_is_leaf (void)
+{
+  return current_function_is_leaf && !cfun->machine->calls_tls_get_addr;
+}
+
+
+/* Return the frame size.  */
+static int
+compute_total_frame_size (void)
+{
+  int total_size = (get_frame_size () + tilepro_saved_regs_size ()
+                   + crtl->outgoing_args_size
+                   + crtl->args.pretend_args_size);
+
+  if (!tilepro_current_function_is_leaf () || cfun->calls_alloca)
+    {
+      /* Make room for save area in callee.  */
+      total_size += STACK_POINTER_OFFSET;
+    }
+
+  return round_frame_size (total_size);
+}
+
+
+/* Return nonzero if this function is known to have a null epilogue.
+   This allows the optimizer to omit jumps to jumps if no stack was
+   created.  */
+bool
+tilepro_can_use_return_insn_p (void)
+{
+  return (reload_completed
+         && cfun->static_chain_decl == 0
+         && compute_total_frame_size () == 0
+         && tilepro_current_function_is_leaf ()
+         && !crtl->profile && !df_regs_ever_live_p (TILEPRO_LINK_REGNUM));
+}
+
+
+/* Returns an rtx for a stack slot at 'FP + offset_from_fp'.  If there
+   is a frame pointer, it computes the value relative to
+   that. Otherwise it uses the stack pointer.  */
+static rtx
+compute_frame_addr (int offset_from_fp, int *next_scratch_regno)
+{
+  rtx base_reg_rtx, tmp_reg_rtx, offset_rtx;
+  int offset_from_base;
+
+  if (frame_pointer_needed)
+    {
+      base_reg_rtx = hard_frame_pointer_rtx;
+      offset_from_base = offset_from_fp;
+    }
+  else
+    {
+      int offset_from_sp = compute_total_frame_size () + offset_from_fp;
+      base_reg_rtx = stack_pointer_rtx;
+      offset_from_base = offset_from_sp;
+    }
+
+  if (offset_from_base == 0)
+    return base_reg_rtx;
+
+  /* Compute the new value of the stack pointer.  */
+  tmp_reg_rtx = gen_rtx_REG (Pmode, (*next_scratch_regno)--);
+  offset_rtx = gen_int_si (offset_from_base);
+
+  if (!tilepro_expand_addsi (tmp_reg_rtx, base_reg_rtx, offset_rtx))
+    {
+      emit_insn (gen_rtx_SET (VOIDmode, tmp_reg_rtx,
+                             gen_rtx_PLUS (Pmode, base_reg_rtx,
+                                           offset_rtx)));
+    }
+
+  return tmp_reg_rtx;
+}
+
+
+/* The stack frame looks like this:
+         +-------------+
+         |    ...      | 
+         |  incoming   | 
+         | stack args  | 
+   AP -> +-------------+
+         | caller's HFP|
+         +-------------+
+         | lr save     |
+  HFP -> +-------------+
+         |  var args   | 
+         |  reg save   | crtl->args.pretend_args_size bytes
+         +-------------+
+         |    ...      | 
+         | saved regs  | tilepro_saved_regs_size() bytes
+   FP -> +-------------+
+         |    ...      | 
+         |   vars      | get_frame_size() bytes
+         +-------------+
+         |    ...      | 
+         |  outgoing   | 
+         |  stack args | crtl->outgoing_args_size bytes
+         +-------------+
+         | HFP         | 4 bytes (only here if nonleaf / alloca)
+         +-------------+
+         | callee lr   | 4 bytes (only here if nonleaf / alloca)
+         | save        | 
+   SP -> +-------------+
+
+  HFP == incoming SP.
+
+  For functions with a frame larger than 32767 bytes, or which use
+  alloca (), r52 is used as a frame pointer.  Otherwise there is no
+  frame pointer.
+
+  FP is saved at SP+4 before calling a subroutine so the
+  callee can chain.  */
+void
+tilepro_expand_prologue (void)
+{
+#define ROUND_ROBIN_SIZE 4
+  /* We round-robin through four scratch registers to hold temporary
+     addresses for saving registers, to make instruction scheduling
+     easier.  */
+  rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
+    NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
+  };
+  rtx insn, cfa;
+  unsigned int which_scratch;
+  int offset, start_offset, regno;
+
+  /* A register that holds a copy of the incoming fp.  */
+  int fp_copy_regno = -1;
+
+  /* A register that holds a copy of the incoming sp.  */
+  int sp_copy_regno = -1;
+
+  /* Next scratch register number to hand out (postdecrementing).  */
+  int next_scratch_regno = 29;
+
+  int total_size = compute_total_frame_size ();
+
+  if (flag_stack_usage_info)
+    current_function_static_stack_size = total_size;
+
+  /* Save lr first in its special location because code after this
+     might use the link register as a scratch register.  */
+  if (df_regs_ever_live_p (TILEPRO_LINK_REGNUM) || crtl->calls_eh_return)
+    FRP (frame_emit_store (TILEPRO_LINK_REGNUM, TILEPRO_LINK_REGNUM,
+                          stack_pointer_rtx, stack_pointer_rtx, 0));
+
+  if (total_size == 0)
+    {
+      /* Load the PIC register if needed.  */
+      if (flag_pic && crtl->uses_pic_offset_table)
+       load_pic_register (false);
+
+      return;
+    }
+
+  cfa = stack_pointer_rtx;
+
+  if (frame_pointer_needed)
+    {
+      fp_copy_regno = next_scratch_regno--;
+
+      /* Copy the old frame pointer aside so we can save it later.  */
+      insn = FRP (emit_move_insn (gen_rtx_REG (word_mode, fp_copy_regno),
+                                 hard_frame_pointer_rtx));
+      add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
+
+      /* Set up the frame pointer.  */
+      insn = FRP (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx));
+      add_reg_note (insn, REG_CFA_DEF_CFA, hard_frame_pointer_rtx);
+      cfa = hard_frame_pointer_rtx;
+      REGNO_POINTER_ALIGN (HARD_FRAME_POINTER_REGNUM) = STACK_BOUNDARY;
+
+      /* fp holds a copy of the incoming sp, in case we need to store
+         it.  */
+      sp_copy_regno = HARD_FRAME_POINTER_REGNUM;
+    }
+  else if (!tilepro_current_function_is_leaf ())
+    {
+      /* Copy the old stack pointer aside so we can save it later.  */
+      sp_copy_regno = next_scratch_regno--;
+      insn = FRP (emit_move_insn (gen_rtx_REG (Pmode, sp_copy_regno),
+                                 stack_pointer_rtx));
+      add_reg_note (insn, REG_CFA_REGISTER, NULL_RTX);
+    }
+
+  if (tilepro_current_function_is_leaf ())
+    {
+      /* No need to store chain pointer to caller's frame.  */
+      emit_sp_adjust (-total_size, &next_scratch_regno,
+                     !frame_pointer_needed, NULL_RTX);
+    }
+  else
+    {
+      /* Save the frame pointer (incoming sp value) to support
+         backtracing.  First we need to create an rtx with the store
+         address.  */
+      rtx chain_addr = gen_rtx_REG (Pmode, next_scratch_regno--);
+      rtx size_rtx = gen_int_si (-(total_size - UNITS_PER_WORD));
+      int cfa_offset =
+       frame_pointer_needed ? UNITS_PER_WORD - total_size : UNITS_PER_WORD;
+
+      if (add_operand (size_rtx, Pmode))
+       {
+         /* Expose more parallelism by computing this value from the
+            original stack pointer, not the one after we have pushed
+            the frame.  */
+         rtx p = gen_rtx_PLUS (Pmode, stack_pointer_rtx, size_rtx);
+         emit_insn (gen_rtx_SET (VOIDmode, chain_addr, p));
+         emit_sp_adjust (-total_size, &next_scratch_regno,
+                         !frame_pointer_needed, NULL_RTX);
+       }
+      else
+       {
+         /* The stack frame is large, so just store the incoming sp
+            value at *(new_sp + UNITS_PER_WORD).  */
+         rtx p;
+         emit_sp_adjust (-total_size, &next_scratch_regno,
+                         !frame_pointer_needed, NULL_RTX);
+         p = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+                           GEN_INT (UNITS_PER_WORD));
+         emit_insn (gen_rtx_SET (VOIDmode, chain_addr, p));
+       }
+
+      /* Save our frame pointer for backtrace chaining.  */
+      FRP (frame_emit_store (sp_copy_regno, STACK_POINTER_REGNUM,
+                            chain_addr, cfa, cfa_offset));
+    }
+
+  /* Compute where to start storing registers we need to save.  */
+  start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
+  offset = start_offset;
+
+  /* Store all registers that need saving.  */
+  which_scratch = 0;
+  for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
+    if (need_to_save_reg (regno))
+      {
+       rtx r = reg_save_addr[which_scratch];
+       int from_regno;
+       int cfa_offset = frame_pointer_needed ? offset : total_size + offset;
+
+       if (r == NULL_RTX)
+         {
+           rtx p = compute_frame_addr (offset, &next_scratch_regno);
+           r = gen_rtx_REG (word_mode, next_scratch_regno--);
+           reg_save_addr[which_scratch] = r;
+
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+       else
+         {
+           /* Advance to the next stack slot to store this register.  */
+           int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
+           rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+
+       /* Save this register to the stack (but use the old fp value
+          we copied aside if appropriate).  */
+       from_regno = (fp_copy_regno >= 0
+                     && regno ==
+                     HARD_FRAME_POINTER_REGNUM) ? fp_copy_regno : regno;
+       FRP (frame_emit_store (from_regno, regno, r, cfa, cfa_offset));
+
+       offset -= UNITS_PER_WORD;
+       which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
+      }
+
+  /* If profiling, force that to happen after the frame is set up.  */
+  if (crtl->profile)
+    emit_insn (gen_blockage ());
+
+  /* Load the PIC register if needed.  */
+  if (flag_pic && crtl->uses_pic_offset_table)
+    load_pic_register (false);
+}
+
+
+/* Implement the epilogue and sibcall_epilogue patterns.  SIBCALL_P is
+   true for a sibcall_epilogue pattern, and false for an epilogue
+   pattern.  */
+void
+tilepro_expand_epilogue (bool sibcall_p)
+{
+  /* We round-robin through four scratch registers to hold temporary
+     addresses for saving registers, to make instruction scheduling
+     easier.  */
+  rtx reg_save_addr[ROUND_ROBIN_SIZE] = {
+    NULL_RTX, NULL_RTX, NULL_RTX, NULL_RTX
+  };
+  rtx last_insn, insn;
+  unsigned int which_scratch;
+  int offset, start_offset, regno;
+  rtx cfa_restores = NULL_RTX;
+
+  /* A register that holds a copy of the incoming fp.  */
+  int fp_copy_regno = -1;
+
+  /* Next scratch register number to hand out (postdecrementing).  */
+  int next_scratch_regno = 29;
+
+  int total_size = compute_total_frame_size ();
+
+  last_insn = get_last_insn ();
+
+  /* Load lr first since we are going to need it first.  */
+  insn = NULL;
+  if (df_regs_ever_live_p (TILEPRO_LINK_REGNUM))
+    {
+      insn = frame_emit_load (TILEPRO_LINK_REGNUM,
+                             compute_frame_addr (0, &next_scratch_regno),
+                             &cfa_restores);
+    }
+
+  if (total_size == 0)
+    {
+      if (insn)
+       {
+         RTX_FRAME_RELATED_P (insn) = 1;
+         REG_NOTES (insn) = cfa_restores;
+       }
+      goto done;
+    }
+
+  /* Compute where to start restoring registers.  */
+  start_offset = -crtl->args.pretend_args_size - UNITS_PER_WORD;
+  offset = start_offset;
+
+  if (frame_pointer_needed)
+    fp_copy_regno = next_scratch_regno--;
+
+  /* Restore all callee-saved registers.  */
+  which_scratch = 0;
+  for (regno = FIRST_PSEUDO_REGISTER - 1; regno >= 0; regno--)
+    if (need_to_save_reg (regno))
+      {
+       rtx r = reg_save_addr[which_scratch];
+       if (r == NULL_RTX)
+         {
+           r = compute_frame_addr (offset, &next_scratch_regno);
+           reg_save_addr[which_scratch] = r;
+         }
+       else
+         {
+           /* Advance to the next stack slot to store this
+              register.  */
+           int stride = ROUND_ROBIN_SIZE * -UNITS_PER_WORD;
+           rtx p = gen_rtx_PLUS (Pmode, r, GEN_INT (stride));
+           emit_insn (gen_rtx_SET (VOIDmode, r, p));
+         }
+
+       if (fp_copy_regno >= 0 && regno == HARD_FRAME_POINTER_REGNUM)
+         frame_emit_load (fp_copy_regno, r, NULL);
+       else
+         frame_emit_load (regno, r, &cfa_restores);
+
+       offset -= UNITS_PER_WORD;
+       which_scratch = (which_scratch + 1) % ROUND_ROBIN_SIZE;
+      }
+
+  if (!tilepro_current_function_is_leaf ())
+    cfa_restores =
+      alloc_reg_note (REG_CFA_RESTORE, stack_pointer_rtx, cfa_restores);
+
+  emit_insn (gen_blockage ());
+
+  if (crtl->calls_eh_return)
+    {
+      rtx r = compute_frame_addr (-total_size + UNITS_PER_WORD,
+                                 &next_scratch_regno);
+      insn = emit_move_insn (gen_rtx_REG (Pmode, STACK_POINTER_REGNUM),
+                            gen_frame_mem (Pmode, r));
+      RTX_FRAME_RELATED_P (insn) = 1;
+      REG_NOTES (insn) = cfa_restores;
+    }
+  else if (frame_pointer_needed)
+    {
+      /* Restore the old stack pointer by copying from the frame
+         pointer.  */
+      insn = emit_insn (gen_sp_restore (stack_pointer_rtx,
+                                       hard_frame_pointer_rtx));
+      RTX_FRAME_RELATED_P (insn) = 1;
+      REG_NOTES (insn) = cfa_restores;
+      add_reg_note (insn, REG_CFA_DEF_CFA, stack_pointer_rtx);
+    }
+  else
+    {
+      insn = emit_sp_adjust (total_size, &next_scratch_regno, true,
+                            cfa_restores);
+    }
+
+  /* Restore the old frame pointer.  */
+  if (frame_pointer_needed)
+    {
+      insn = emit_move_insn (hard_frame_pointer_rtx,
+                            gen_rtx_REG (Pmode, fp_copy_regno));
+      add_reg_note (insn, REG_CFA_RESTORE, hard_frame_pointer_rtx);
+    }
+
+  /* Mark the pic registers as live outside of the function.  */
+  if (flag_pic)
+    {
+      emit_use (cfun->machine->text_label_rtx);
+      emit_use (cfun->machine->got_rtx);
+    }
+
+done:
+  if (!sibcall_p)
+    {
+      /* Emit the actual 'return' instruction.  */
+      emit_jump_insn (gen__return ());
+    }
+  else
+    {
+      emit_use (gen_rtx_REG (Pmode, TILEPRO_LINK_REGNUM));
+    }
+
+  /* Mark all insns we just emitted as frame-related.  */
+  for (; last_insn != NULL_RTX; last_insn = next_insn (last_insn))
+    RTX_FRAME_RELATED_P (last_insn) = 1;
+}
+
+#undef ROUND_ROBIN_SIZE
+
+
+/* Implement INITIAL_ELIMINATION_OFFSET.  */
+int
+tilepro_initial_elimination_offset (int from, int to)
+{
+  int total_size = compute_total_frame_size ();
+
+  if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
+    {
+      return (total_size - crtl->args.pretend_args_size
+             - tilepro_saved_regs_size ());
+    }
+  else if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
+    {
+      return -(crtl->args.pretend_args_size + tilepro_saved_regs_size ());
+    }
+  else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM)
+    {
+      return STACK_POINTER_OFFSET + total_size;
+    }
+  else if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
+    {
+      return STACK_POINTER_OFFSET;
+    }
+  else
+    gcc_unreachable ();
+}
+
+
+/* Return an RTX indicating where the return address to the
+   calling function can be found.  */
+rtx
+tilepro_return_addr (int count, rtx frame ATTRIBUTE_UNUSED)
+{
+  if (count != 0)
+    return const0_rtx;
+
+  return get_hard_reg_initial_val (Pmode, TILEPRO_LINK_REGNUM);
+}
+
+
+/* Implement EH_RETURN_HANDLER_RTX.  */
+rtx
+tilepro_eh_return_handler_rtx (void)
+{
+  /* The MEM needs to be volatile to prevent it from being
+     deleted.  */
+  rtx tmp = gen_frame_mem (Pmode, hard_frame_pointer_rtx);
+  MEM_VOLATILE_P (tmp) = true;
+  return tmp;
+}
+\f
+
+
+/* Registers  */
+
+/* Implemnet TARGET_CONDITIONAL_REGISTER_USAGE.  */
+static void
+tilepro_conditional_register_usage (void)
+{
+  global_regs[TILEPRO_NETORDER_REGNUM] = 1;
+  /* TILEPRO_PIC_TEXT_LABEL_REGNUM is conditionally used.  It is a
+     member of fixed_regs, and therefore must be member of
+     call_used_regs, but it is not a member of call_really_used_regs[]
+     because it is not clobbered by a call.  */
+  if (TILEPRO_PIC_TEXT_LABEL_REGNUM != INVALID_REGNUM)
+    {
+      fixed_regs[TILEPRO_PIC_TEXT_LABEL_REGNUM] = 1;
+      call_used_regs[TILEPRO_PIC_TEXT_LABEL_REGNUM] = 1;
+    }
+  if (PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM)
+    {
+      fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+      call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1;
+    }
+}
+
+
+/* Implement TARGET_FRAME_POINTER_REQUIRED.  */
+static bool
+tilepro_frame_pointer_required (void)
+{
+  return crtl->calls_eh_return || cfun->calls_alloca;
+}
+\f
+
+
+/* Scheduling and reorg  */
+
+/* Return the length of INSN.  LENGTH is the initial length computed
+   by attributes in the machine-description file.  This is where we
+   account for bundles.  */
+int
+tilepro_adjust_insn_length (rtx insn, int length)
+{
+  enum machine_mode mode = GET_MODE (insn);
+
+  /* A non-termininating instruction in a bundle has length 0.  */
+  if (mode == SImode)
+    return 0;
+
+  /* By default, there is not length adjustment.  */
+  return length;
+}
+
+
+/* Implement TARGET_SCHED_ISSUE_RATE.  */
+static int
+tilepro_issue_rate (void)
+{
+  return 3;
+}
+
+
+/* Return the rtx for the jump target.  */
+static rtx
+get_jump_target (rtx branch)
+{
+  if (CALL_P (branch))
+    {
+      rtx call;
+      call = PATTERN (branch);
+
+      if (GET_CODE (call) == PARALLEL)
+       call = XVECEXP (call, 0, 0);
+
+      if (GET_CODE (call) == SET)
+       call = SET_SRC (call);
+
+      if (GET_CODE (call) == CALL)
+       return XEXP (XEXP (call, 0), 0);
+    }
+  return 0;
+}
+
+/* Implement TARGET_SCHED_ADJUST_COST.  */
+static int
+tilepro_sched_adjust_cost (rtx insn, rtx link, rtx dep_insn, int cost)
+{
+  /* If we have a true dependence, INSN is a call, and DEP_INSN
+     defines a register that is needed by the call (argument or stack
+     pointer), set its latency to 0 so that it can be bundled with
+     the call.  Explicitly check for and exclude the case when
+     DEP_INSN defines the target of the jump.  */
+  if (CALL_P (insn) && REG_NOTE_KIND (link) == REG_DEP_TRUE)
+    {
+      rtx target = get_jump_target (insn);
+      if (!REG_P (target) || !set_of (target, dep_insn))
+       return 0;
+    }
+
+  return cost;
+}
+
+
+/* Skip over irrelevant NOTEs and such and look for the next insn we
+   would consider bundling.  */
+static rtx
+next_insn_to_bundle (rtx r, rtx end)
+{
+  for (; r != end; r = NEXT_INSN (r))
+    {
+      if (NONDEBUG_INSN_P (r)
+         && GET_CODE (PATTERN (r)) != USE
+         && GET_CODE (PATTERN (r)) != CLOBBER)
+       return r;
+    }
+
+  return NULL_RTX;
+}
+
+
+/* Go through all insns, and use the information generated during
+   scheduling to generate SEQUENCEs to represent bundles of
+   instructions issued simultaneously.  */
+static void
+tilepro_gen_bundles (void)
+{
+  basic_block bb;
+  FOR_EACH_BB (bb)
+  {
+    rtx insn, next;
+    rtx end = NEXT_INSN (BB_END (bb));
+
+    for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
+      {
+       next = next_insn_to_bundle (NEXT_INSN (insn), end);
+
+       /* Never wrap {} around inline asm.  */
+       if (GET_CODE (PATTERN (insn)) != ASM_INPUT)
+         {
+           if (next == NULL_RTX || GET_MODE (next) == TImode
+               /* NOTE: The scheduler incorrectly believes a call
+                  insn can execute in the same cycle as the insn
+                  after the call.  This is of course impossible.
+                  Really we need to fix the scheduler somehow, so
+                  the code after the call gets scheduled
+                  optimally.  */
+               || CALL_P (insn))
+             {
+               /* Mark current insn as the end of a bundle.  */
+               PUT_MODE (insn, QImode);
+             }
+           else
+             {
+               /* Mark it as part of a bundle.  */
+               PUT_MODE (insn, SImode);
+             }
+         }
+      }
+  }
+}
+
+
+/* Helper function for tilepro_fixup_pcrel_references.  */
+static void
+replace_pc_relative_symbol_ref (rtx insn, rtx opnds[4], bool first_insn_p)
+{
+  rtx new_insns;
+
+  start_sequence ();
+
+  if (flag_pic == 1)
+    {
+      if (!first_insn_p)
+       {
+         emit_insn (gen_add_got16 (opnds[0], tilepro_got_rtx (),
+                                   opnds[2]));
+         emit_insn (gen_insn_lw (opnds[0], opnds[0]));
+       }
+    }
+  else
+    {
+      if (first_insn_p)
+       {
+         emit_insn (gen_addhi_got32 (opnds[0], tilepro_got_rtx (),
+                                     opnds[2]));
+       }
+      else
+       {
+         emit_insn (gen_addlo_got32 (opnds[0], opnds[1], opnds[2]));
+         emit_insn (gen_insn_lw (opnds[0], opnds[0]));
+       }
+    }
+
+  new_insns = get_insns ();
+  end_sequence ();
+
+  if (new_insns)
+    emit_insn_before (new_insns, insn);
+
+  delete_insn (insn);
+}
+
+
+/* Returns whether INSN is a pc-relative addli insn.   */
+static bool
+match_addli_pcrel (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx unspec;
+
+  if (GET_CODE (pattern) != SET)
+    return false;
+
+  if (GET_CODE (SET_SRC (pattern)) != LO_SUM)
+    return false;
+
+  if (GET_CODE (XEXP (SET_SRC (pattern), 1)) != CONST)
+    return false;
+
+  unspec = XEXP (XEXP (SET_SRC (pattern), 1), 0);
+
+  return (GET_CODE (unspec) == UNSPEC
+         && XINT (unspec, 1) == UNSPEC_PCREL_SYM);
+}
+
+
+/* Helper function for tilepro_fixup_pcrel_references.  */
+static void
+replace_addli_pcrel (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx set_src;
+  rtx unspec;
+  rtx opnds[4];
+  bool first_insn_p;
+
+  gcc_assert (GET_CODE (pattern) == SET);
+  opnds[0] = SET_DEST (pattern);
+
+  set_src = SET_SRC (pattern);
+  gcc_assert (GET_CODE (set_src) == LO_SUM);
+  gcc_assert (GET_CODE (XEXP (set_src, 1)) == CONST);
+  opnds[1] = XEXP (set_src, 0);
+
+  unspec = XEXP (XEXP (set_src, 1), 0);
+  gcc_assert (GET_CODE (unspec) == UNSPEC);
+  gcc_assert (XINT (unspec, 1) == UNSPEC_PCREL_SYM);
+  opnds[2] = XVECEXP (unspec, 0, 0);
+  opnds[3] = XVECEXP (unspec, 0, 1);
+
+  /* We only need to replace SYMBOL_REFs, not LABEL_REFs.  */
+  if (GET_CODE (opnds[2]) != SYMBOL_REF)
+    return;
+
+  first_insn_p = (opnds[1] == tilepro_text_label_rtx ());
+
+  replace_pc_relative_symbol_ref (insn, opnds, first_insn_p);
+}
+
+
+/* Returns whether INSN is a pc-relative auli insn.   */
+static bool
+match_auli_pcrel (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx high;
+  rtx unspec;
+
+  if (GET_CODE (pattern) != SET)
+    return false;
+
+  if (GET_CODE (SET_SRC (pattern)) != PLUS)
+    return false;
+
+  high = XEXP (SET_SRC (pattern), 1);
+
+  if (GET_CODE (high) != HIGH
+      || GET_CODE (XEXP (high, 0)) != CONST)
+    return false;
+
+  unspec = XEXP (XEXP (high, 0), 0);
+
+  return (GET_CODE (unspec) == UNSPEC
+         && XINT (unspec, 1) == UNSPEC_PCREL_SYM);
+}
+
+
+/* Helper function for tilepro_fixup_pcrel_references.  */
+static void
+replace_auli_pcrel (rtx insn)
+{
+  rtx pattern = PATTERN (insn);
+  rtx set_src;
+  rtx high;
+  rtx unspec;
+  rtx opnds[4];
+  bool first_insn_p;
+
+  gcc_assert (GET_CODE (pattern) == SET);
+  opnds[0] = SET_DEST (pattern);
+
+  set_src = SET_SRC (pattern);
+  gcc_assert (GET_CODE (set_src) == PLUS);
+  opnds[1] = XEXP (set_src, 0);
+
+  high = XEXP (set_src, 1);
+  gcc_assert (GET_CODE (high) == HIGH);
+  gcc_assert (GET_CODE (XEXP (high, 0)) == CONST);
+
+  unspec = XEXP (XEXP (high, 0), 0);
+  gcc_assert (GET_CODE (unspec) == UNSPEC);
+  gcc_assert (XINT (unspec, 1) == UNSPEC_PCREL_SYM);
+  opnds[2] = XVECEXP (unspec, 0, 0);
+  opnds[3] = XVECEXP (unspec, 0, 1);
+
+  /* We only need to replace SYMBOL_REFs, not LABEL_REFs.  */
+  if (GET_CODE (opnds[2]) != SYMBOL_REF)
+    return;
+
+  first_insn_p = (opnds[1] == tilepro_text_label_rtx ());
+
+  replace_pc_relative_symbol_ref (insn, opnds, first_insn_p);
+}
+
+
+/* We generate PC relative SYMBOL_REFs as an optimization, to avoid
+   going through the GOT when the symbol is local to the compilation
+   unit.  But such a symbol requires that the common text_label that
+   we generate at the beginning of the function be in the same section
+   as the reference to the SYMBOL_REF.  This may not be true if we
+   generate hot/cold sections.  This function looks for such cases and
+   replaces such references with the longer sequence going through the
+   GOT.
+
+   We expect one of the following two instruction sequences:
+   addli tmp1, txt_label_reg, lo16(sym - txt_label)
+   auli  tmp2,          tmp1, ha16(sym - txt_label)
+
+   auli  tmp1, txt_label_reg, ha16(sym - txt_label)
+   addli tmp2,          tmp1, lo16(sym - txt_label)
+
+   If we're compiling -fpic, we replace the first instruction with
+   nothing, and the second instruction with:
+
+   addli tmp2, got_rtx, got(sym)
+   lw    tmp2,    tmp2
+   
+   If we're compiling -fPIC, we replace the first instruction with:
+
+   auli  tmp1, got_rtx, got_ha16(sym)
+
+   and the second instruction with:
+
+   addli tmp2,    tmp1, got_lo16(sym)
+   lw    tmp2,    tmp2
+
+   Note that we're careful to disturb the instruction sequence as
+   little as possible, since it's very late in the compilation
+   process.
+*/
+static void
+tilepro_fixup_pcrel_references (void)
+{
+  rtx insn, next_insn;
+  bool same_section_as_entry = true;
+
+  for (insn = get_insns (); insn; insn = next_insn)
+    {
+      next_insn = NEXT_INSN (insn);
+
+      if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
+       {
+         same_section_as_entry = !same_section_as_entry;
+         continue;
+       }
+
+      if (same_section_as_entry)
+       continue;
+
+      if (!(INSN_P (insn)
+           && GET_CODE (PATTERN (insn)) != USE
+           && GET_CODE (PATTERN (insn)) != CLOBBER))
+       continue;
+
+      if (match_addli_pcrel (insn))
+       replace_addli_pcrel (insn);
+      else if (match_auli_pcrel (insn))
+       replace_auli_pcrel (insn);
+    }
+}
+
+
+/* Ensure that no var tracking notes are emitted in the middle of a
+   three-instruction bundle.  */
+static void
+reorder_var_tracking_notes (void)
+{
+  basic_block bb;
+  FOR_EACH_BB (bb)
+  {
+    rtx insn, next;
+    rtx queue = NULL_RTX;
+    bool in_bundle = false;
+
+    for (insn = BB_HEAD (bb); insn != BB_END (bb); insn = next)
+      {
+       next = NEXT_INSN (insn);
+
+       if (INSN_P (insn))
+         {
+           /* Emit queued up notes at the last instruction of a bundle.  */
+           if (GET_MODE (insn) == QImode)
+             {
+               while (queue)
+                 {
+                   rtx next_queue = PREV_INSN (queue);
+                   PREV_INSN (NEXT_INSN (insn)) = queue;
+                   NEXT_INSN (queue) = NEXT_INSN (insn);
+                   NEXT_INSN (insn) = queue;
+                   PREV_INSN (queue) = insn;
+                   queue = next_queue;
+                 }
+               in_bundle = false;
+             }
+           else if (GET_MODE (insn) == SImode)
+             in_bundle = true;
+         }
+       else if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
+         {
+           if (in_bundle)
+             {
+               rtx prev = PREV_INSN (insn);
+               PREV_INSN (next) = prev;
+               NEXT_INSN (prev) = next;
+
+               PREV_INSN (insn) = queue;
+               queue = insn;
+             }
+         }
+      }
+  }
+}
+
+
+/* Perform machine dependent operations on the rtl chain INSNS.  */
+static void
+tilepro_reorg (void)
+{
+  /* We are freeing block_for_insn in the toplev to keep compatibility
+     with old MDEP_REORGS that are not CFG based.  Recompute it
+     now.  */
+  compute_bb_for_insn ();
+
+  if (flag_reorder_blocks_and_partition)
+    {
+      tilepro_fixup_pcrel_references ();
+    }
+
+  if (flag_schedule_insns_after_reload)
+    {
+      split_all_insns ();
+
+      timevar_push (TV_SCHED2);
+      schedule_insns ();
+      timevar_pop (TV_SCHED2);
+
+      /* Examine the schedule to group into bundles.  */
+      tilepro_gen_bundles ();
+    }
+
+  df_analyze ();
+
+  if (flag_var_tracking)
+    {
+      timevar_push (TV_VAR_TRACKING);
+      variable_tracking_main ();
+      reorder_var_tracking_notes ();
+      timevar_pop (TV_VAR_TRACKING);
+    }
+
+  df_finish_pass (false);
+}
+\f
+
+
+/* Assembly  */
+
+/* Select a format to encode pointers in exception handling data.
+   CODE is 0 for data, 1 for code labels, 2 for function pointers.
+   GLOBAL is true if the symbol may be affected by dynamic
+   relocations.  */
+int
+tilepro_asm_preferred_eh_data_format (int code ATTRIBUTE_UNUSED, int global)
+{
+  if (flag_pic)
+    return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
+  else
+    return DW_EH_PE_absptr;
+}
+
+
+/* Implement TARGET_ASM_OUTPUT_MI_THUNK.  */
+static void
+tilepro_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
+                            HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
+                            tree function)
+{
+  rtx this_rtx, insn, funexp;
+
+  /* Pretend to be a post-reload pass while generating rtl.  */
+  reload_completed = 1;
+
+  /* Mark the end of the (empty) prologue.  */
+  emit_note (NOTE_INSN_PROLOGUE_END);
+
+  /* Find the "this" pointer.  If the function returns a structure,
+     the structure return pointer is in $1.  */
+  if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
+    this_rtx = gen_rtx_REG (Pmode, 1);
+  else
+    this_rtx = gen_rtx_REG (Pmode, 0);
+
+  /* Add DELTA to THIS_RTX.  */
+  emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
+
+  /* If needed, add *(*THIS_RTX + VCALL_OFFSET) to THIS_RTX.  */
+  if (vcall_offset)
+    {
+      rtx tmp;
+
+      tmp = gen_rtx_REG (Pmode, 29);
+      emit_move_insn (tmp, gen_rtx_MEM (Pmode, this_rtx));
+
+      emit_insn (gen_addsi3 (tmp, tmp, GEN_INT (vcall_offset)));
+
+      emit_move_insn (tmp, gen_rtx_MEM (Pmode, tmp));
+
+      emit_insn (gen_addsi3 (this_rtx, this_rtx, tmp));
+    }
+
+  /* Generate a tail call to the target function.  */
+  if (!TREE_USED (function))
+    {
+      assemble_external (function);
+      TREE_USED (function) = 1;
+    }
+  funexp = XEXP (DECL_RTL (function), 0);
+  funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
+  insn = emit_call_insn (gen_sibcall (funexp, const0_rtx));
+  SIBLING_CALL_P (insn) = 1;
+
+  /* Run just enough of rest_of_compilation to get the insns emitted.
+     There's not really enough bulk here to make other passes such as
+     instruction scheduling worth while.  Note that use_thunk calls
+     assemble_start_function and assemble_end_function.
+
+     We don't currently bundle, but the instruciton sequence is all
+     serial except for the tail call, so we're only wasting one cycle.
+   */
+  insn = get_insns ();
+  insn_locators_alloc ();
+  shorten_branches (insn);
+  final_start_function (insn, file, 1);
+  final (insn, file, 1);
+  final_end_function ();
+
+  /* Stop pretending to be a post-reload pass.  */
+  reload_completed = 0;
+}
+
+
+/* Implement TARGET_ASM_TRAMPOLINE_TEMPLATE.  */
+static void
+tilepro_asm_trampoline_template (FILE *file)
+{
+  fprintf (file, "\tlnk   r10\n");
+  fprintf (file, "\taddi  r10, r10, 32\n");
+  fprintf (file, "\tlwadd r11, r10, %d\n", GET_MODE_SIZE (ptr_mode));
+  fprintf (file, "\tlw    r10, r10\n");
+  fprintf (file, "\tjr    r11\n");
+  fprintf (file, "\t.word 0 # <function address>\n");
+  fprintf (file, "\t.word 0 # <static chain value>\n");
+}
+
+
+/* Implement TARGET_TRAMPOLINE_INIT.  */
+static void
+tilepro_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
+{
+  rtx fnaddr, chaddr;
+  rtx mem;
+  rtx begin_addr, end_addr;
+  int ptr_mode_size = GET_MODE_SIZE (ptr_mode);
+
+  fnaddr = copy_to_reg (XEXP (DECL_RTL (fndecl), 0));
+  chaddr = copy_to_reg (static_chain);
+
+  emit_block_move (m_tramp, assemble_trampoline_template (),
+                  GEN_INT (TRAMPOLINE_SIZE), BLOCK_OP_NORMAL);
+
+  mem = adjust_address (m_tramp, ptr_mode,
+                       TRAMPOLINE_SIZE - 2 * ptr_mode_size);
+  emit_move_insn (mem, fnaddr);
+  mem = adjust_address (m_tramp, ptr_mode,
+                       TRAMPOLINE_SIZE - ptr_mode_size);
+  emit_move_insn (mem, chaddr);
+
+  /* Get pointers to the beginning and end of the code block.  */
+  begin_addr = force_reg (Pmode, XEXP (m_tramp, 0));
+  end_addr = force_reg (Pmode, plus_constant (XEXP (m_tramp, 0),
+                                             TRAMPOLINE_SIZE));
+
+  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
+                    LCT_NORMAL, VOIDmode, 2, begin_addr, Pmode,
+                    end_addr, Pmode);
+}
+
+
+/* Implement TARGET_PRINT_OPERAND.  */
+static void
+tilepro_print_operand (FILE *file, rtx x, int code)
+{
+  switch (code)
+    {
+    case 'c':
+      /* Print the compare operator opcode for conditional moves. */
+      switch (GET_CODE (x))
+       {
+       case EQ:
+         fputs ("z", file);
+         break;
+       case NE:
+         fputs ("nz", file);
+         break;
+       default:
+         output_operand_lossage ("invalid %%c operand");
+       }
+      return;
+
+    case 'C':
+      /* Print the compare operator opcode for conditional moves. */
+      switch (GET_CODE (x))
+       {
+       case EQ:
+         fputs ("nz", file);
+         break;
+       case NE:
+         fputs ("z", file);
+         break;
+       default:
+         output_operand_lossage ("invalid %%C operand");
+       }
+      return;
+
+    case 'h':
+      {
+       /* Print the high 16 bits of a 32-bit constant.  */
+       HOST_WIDE_INT i;
+       if (CONST_INT_P (x))
+         i = INTVAL (x);
+       else if (GET_CODE (x) == CONST_DOUBLE)
+         i = CONST_DOUBLE_LOW (x);
+       else
+         {
+           output_operand_lossage ("invalid %%h operand");
+           return;
+         }
+       i = trunc_int_for_mode (i >> 16, HImode);
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+
+    case 'H':
+      {
+       rtx addr = NULL;
+       const char *opstr = NULL;
+       bool pcrel = false;
+       if (GET_CODE (x) == CONST
+           && GET_CODE (XEXP (x, 0)) == UNSPEC)
+         {
+           addr = XVECEXP (XEXP (x, 0), 0, 0);
+           switch (XINT (XEXP (x, 0), 1))
+           {
+           case UNSPEC_GOT32_SYM:
+             opstr = "got_ha16";
+             break;
+           case UNSPEC_PCREL_SYM:
+             opstr = "ha16";
+             pcrel = true;
+             break;
+           case UNSPEC_TLS_GD:
+             opstr = "tls_gd_ha16";
+             break;
+           case UNSPEC_TLS_IE:
+             opstr = "tls_ie_ha16";
+             break;
+           case UNSPEC_TLS_LE:
+             opstr = "tls_le_ha16";
+             break;
+           default:
+             output_operand_lossage ("invalid %%H operand");
+           }
+         }
+       else
+         {
+           addr = x;
+           opstr = "ha16";
+         }
+
+       fputs (opstr, file);
+       fputc ('(', file);
+       output_addr_const (file, addr);
+
+       if (pcrel)
+         {
+           rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
+           fputs (" - " , file);
+           output_addr_const (file, addr2);
+         }
+
+       fputc (')', file);
+       return;
+      }
+
+    case 'I':
+      /* Print an auto-inc memory operand.  */
+      if (!MEM_P (x))
+       {
+         output_operand_lossage ("invalid %%I operand");
+         return;
+       }
+
+      output_memory_reference_mode = GET_MODE (x);
+      output_memory_autoinc_first = true;
+      output_address (XEXP (x, 0));
+      output_memory_reference_mode = VOIDmode;
+      return;
+
+    case 'i':
+      /* Print an auto-inc memory operand.  */
+      if (!MEM_P (x))
+       {
+         output_operand_lossage ("invalid %%i operand");
+         return;
+       }
+
+      output_memory_reference_mode = GET_MODE (x);
+      output_memory_autoinc_first = false;
+      output_address (XEXP (x, 0));
+      output_memory_reference_mode = VOIDmode;
+      return;
+
+    case 'j':
+      {
+       /* Print the low 8 bits of a constant.  */
+       HOST_WIDE_INT i;
+       if (CONST_INT_P (x))
+         i = INTVAL (x);
+       else if (GET_CODE (x) == CONST_DOUBLE)
+         i = CONST_DOUBLE_LOW (x);
+       else if (GET_CODE (x) == CONST_VECTOR
+                && CONST_INT_P (CONST_VECTOR_ELT (x, 0)))
+         i = INTVAL (CONST_VECTOR_ELT (x, 0));
+       else
+         {
+           output_operand_lossage ("invalid %%j operand");
+           return;
+         }
+       i = trunc_int_for_mode (i, QImode);
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+
+    case 'L':
+      {
+       rtx addr = NULL;
+       const char *opstr = NULL;
+       bool pcrel = false;
+       if (GET_CODE (x) == CONST
+           && GET_CODE (XEXP (x, 0)) == UNSPEC)
+         {
+           addr = XVECEXP (XEXP (x, 0), 0, 0);
+           switch (XINT (XEXP (x, 0), 1))
+           {
+           case UNSPEC_GOT16_SYM:
+             opstr = "got";
+             break;
+           case UNSPEC_GOT32_SYM:
+             opstr = "got_lo16";
+             break;
+           case UNSPEC_PCREL_SYM:
+             opstr = "lo16";
+             pcrel = true;
+             break;
+           case UNSPEC_TLS_GD:
+             opstr = "tls_gd_lo16";
+             break;
+           case UNSPEC_TLS_IE:
+             opstr = "tls_ie_lo16";
+             break;
+           case UNSPEC_TLS_LE:
+             opstr = "tls_le_lo16";
+             break;
+           default:
+             output_operand_lossage ("invalid %%L operand");
+           }
+         }
+       else
+         {
+           addr = x;
+           opstr = "lo16";
+         }
+
+       fputs (opstr, file);
+       fputc ('(', file);
+       output_addr_const (file, addr);
+
+       if (pcrel)
+         {
+           rtx addr2 = XVECEXP (XEXP (x, 0), 0, 1);
+           fputs (" - " , file);
+           output_addr_const (file, addr2);
+         }
+
+       fputc (')', file);
+       return;
+      }
+
+    case 'p':
+      if (GET_CODE (x) == SYMBOL_REF)
+       {
+         if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
+           fprintf (file, "plt(");
+         output_addr_const (file, x);
+         if (flag_pic && !SYMBOL_REF_LOCAL_P (x))
+           fprintf (file, ")");
+       }
+      else
+       output_addr_const (file, x);
+      return;
+
+    case 'P':
+      {
+       /* Print a 32-bit constant plus one.  */
+       HOST_WIDE_INT i;
+       if (!CONST_INT_P (x))
+         {
+           output_operand_lossage ("invalid %%P operand");
+           return;
+         }
+       i = trunc_int_for_mode (INTVAL (x) + 1, SImode);
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+
+    case 'M':
+      {
+       /* Print an mm-style bit range.  */
+       int first_bit, last_bit;
+
+       if (!CONST_INT_P (x)
+           || !tilepro_bitfield_operand_p (INTVAL (x), &first_bit,
+                                           &last_bit))
+         {
+           output_operand_lossage ("invalid %%M operand");
+           return;
+         }
+
+       fprintf (file, "%d, %d", first_bit, last_bit);
+       return;
+      }
+
+    case 'N':
+      {
+       const char *reg = NULL;
+
+       /* Print a network register.  */
+       if (!CONST_INT_P (x))
+         {
+           output_operand_lossage ("invalid %%N operand");
+           return;
+         }
+
+       switch (INTVAL (x))
+         {
+         case TILEPRO_NETREG_IDN0: reg = "idn0"; break;
+         case TILEPRO_NETREG_IDN1: reg = "idn1"; break;
+         case TILEPRO_NETREG_SN:   reg = "sn";   break;
+         case TILEPRO_NETREG_UDN0: reg = "udn0"; break;
+         case TILEPRO_NETREG_UDN1: reg = "udn1"; break;
+         case TILEPRO_NETREG_UDN2: reg = "udn2"; break;
+         case TILEPRO_NETREG_UDN3: reg = "udn3"; break;
+         default: gcc_unreachable ();
+         }
+
+       fprintf (file, reg);
+       return;
+      }
+
+    case 't':
+      {
+       /* Log base 2 of a power of two.  */
+       HOST_WIDE_INT i;
+       HOST_WIDE_INT n;
+
+       if (!CONST_INT_P (x))
+         {
+           output_operand_lossage ("invalid %%t operand");
+           return;
+         }
+       n = trunc_int_for_mode (INTVAL (x), SImode);
+       i = exact_log2 (n);
+       if (i < 0)
+         {
+           output_operand_lossage ("invalid %%t operand '"
+                                   HOST_WIDE_INT_PRINT_DEC "'", n);
+           return;
+         }
+
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC, i);
+       return;
+      }
+      break;
+
+    case 'r':
+      /* In this case we need a register.  Use 'zero' if the
+         operand is const0_rtx.  */
+      if (x == const0_rtx
+         || (GET_MODE (x) != VOIDmode && x == CONST0_RTX (GET_MODE (x))))
+       {
+         fputs ("zero", file);
+         return;
+       }
+      else if (!REG_P (x))
+       {
+         output_operand_lossage ("invalid %%r operand");
+         return;
+       }
+      /* FALLTHRU */
+
+    case 0:
+      if (REG_P (x))
+       {
+         fprintf (file, "%s", reg_names[REGNO (x)]);
+         return;
+       }
+      else if (MEM_P (x))
+       {
+         output_memory_reference_mode = VOIDmode;
+         output_address (XEXP (x, 0));
+         return;
+       }
+      else
+       {
+         output_addr_const (file, x);
+         return;
+       }
+      break;
+    }
+
+  debug_rtx (x);
+  output_operand_lossage ("unable to print out operand yet; code == %d (%c)",
+                         code, code);
+}
+
+
+/* Implement TARGET_PRINT_OPERAND_ADDRESS.  */
+static void
+tilepro_print_operand_address (FILE *file, rtx addr)
+{
+  if (GET_CODE (addr) == POST_DEC
+      || GET_CODE (addr) == POST_INC)
+    {
+      int offset = GET_MODE_SIZE (output_memory_reference_mode);
+
+      gcc_assert (output_memory_reference_mode != VOIDmode);
+
+      if (output_memory_autoinc_first)
+       fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
+      else
+       fprintf (file, "%d",
+                GET_CODE (addr) == POST_DEC ? -offset : offset);
+    }
+  else if (GET_CODE (addr) == POST_MODIFY)
+    {
+      gcc_assert (output_memory_reference_mode != VOIDmode);
+
+      gcc_assert (GET_CODE (XEXP (addr, 1)) == PLUS);
+
+      if (output_memory_autoinc_first)
+       fprintf (file, "%s", reg_names[REGNO (XEXP (addr, 0))]);
+      else
+       fprintf (file, HOST_WIDE_INT_PRINT_DEC,
+                INTVAL (XEXP (XEXP (addr, 1), 1)));
+    }
+  else
+    tilepro_print_operand (file, addr, 'r');
+}
+
+
+/* Machine mode of current insn, for determining curly brace
+   placement.  */
+static enum machine_mode insn_mode;
+
+
+/* Implement FINAL_PRESCAN_INSN.  This is used to emit bundles.  */
+void
+tilepro_final_prescan_insn (rtx insn)
+{
+  /* Record this for tilepro_asm_output_opcode to examine.  */
+  insn_mode = GET_MODE (insn);
+}
+
+
+/* While emitting asm, are we currently inside '{' for a bundle? */
+static bool tilepro_in_bundle = false;
+
+/* Implement ASM_OUTPUT_OPCODE.  Prepend/append curly braces as
+   appropriate given the bundling information recorded by
+   tilepro_gen_bundles.  */
+const char *
+tilepro_asm_output_opcode (FILE *stream, const char *code)
+{
+  bool pseudo = !strcmp (code, "pseudo");
+
+  if (!tilepro_in_bundle && insn_mode == SImode)
+    {
+      /* Start a new bundle.  */
+      fprintf (stream, "{\n\t");
+      tilepro_in_bundle = true;
+    }
+
+  if (tilepro_in_bundle && insn_mode == QImode)
+    {
+      /* Close an existing bundle.  */
+      static char buf[100];
+
+      gcc_assert (strlen (code) + 3 + 1 < sizeof (buf));
+
+      strcpy (buf, pseudo ? "" : code);
+      strcat (buf, "\n\t}");
+      tilepro_in_bundle = false;
+
+      return buf;
+    }
+  else
+    {
+      return pseudo ? "" : code;
+    }
+}
+
+
+/* Output assembler code to FILE to increment profiler label # LABELNO
+   for profiling a function entry.  */
+void
+tilepro_function_profiler (FILE *file, int labelno ATTRIBUTE_UNUSED)
+{
+  if (tilepro_in_bundle)
+    {
+      fprintf (file, "\t}\n");
+    }
+
+  if (flag_pic)
+    {
+      fprintf (file,
+              "\t{\n"
+              "\tmove\tr10, lr\n"
+              "\tjal\t%s@plt\n"
+              "\t}\n", MCOUNT_NAME);
+    }
+  else
+    {
+      fprintf (file,
+              "\t{\n"
+              "\tmove\tr10, lr\n"
+              "\tjal\t%s\n"
+              "\t}\n", MCOUNT_NAME);
+    }
+
+  tilepro_in_bundle = false;
+}
+
+
+/* Implement TARGET_ASM_FILE_END.  */
+static void
+tilepro_file_end (void)
+{
+  if (NEED_INDICATE_EXEC_STACK)
+    file_end_indicate_exec_stack ();
+}
+
+
+#undef  TARGET_HAVE_TLS
+#define TARGET_HAVE_TLS HAVE_AS_TLS
+
+#undef  TARGET_OPTION_OVERRIDE
+#define TARGET_OPTION_OVERRIDE tilepro_option_override
+
+#undef  TARGET_SCALAR_MODE_SUPPORTED_P
+#define TARGET_SCALAR_MODE_SUPPORTED_P tilepro_scalar_mode_supported_p
+
+#undef  TARGET_VECTOR_MODE_SUPPORTED_P
+#define TARGET_VECTOR_MODE_SUPPORTED_P tile_vector_mode_supported_p
+
+#undef  TARGET_CANNOT_FORCE_CONST_MEM
+#define TARGET_CANNOT_FORCE_CONST_MEM tilepro_cannot_force_const_mem
+
+#undef  TARGET_FUNCTION_OK_FOR_SIBCALL
+#define TARGET_FUNCTION_OK_FOR_SIBCALL tilepro_function_ok_for_sibcall
+
+#undef  TARGET_PASS_BY_REFERENCE
+#define TARGET_PASS_BY_REFERENCE tilepro_pass_by_reference
+
+#undef  TARGET_RETURN_IN_MEMORY
+#define TARGET_RETURN_IN_MEMORY tilepro_return_in_memory
+
+#undef  TARGET_FUNCTION_ARG_BOUNDARY
+#define TARGET_FUNCTION_ARG_BOUNDARY tilepro_function_arg_boundary
+
+#undef  TARGET_FUNCTION_ARG
+#define TARGET_FUNCTION_ARG tilepro_function_arg
+
+#undef  TARGET_FUNCTION_ARG_ADVANCE
+#define TARGET_FUNCTION_ARG_ADVANCE tilepro_function_arg_advance
+
+#undef  TARGET_FUNCTION_VALUE
+#define TARGET_FUNCTION_VALUE tilepro_function_value
+
+#undef  TARGET_LIBCALL_VALUE
+#define TARGET_LIBCALL_VALUE tilepro_libcall_value
+
+#undef  TARGET_FUNCTION_VALUE_REGNO_P
+#define TARGET_FUNCTION_VALUE_REGNO_P tilepro_function_value_regno_p
+
+#undef  TARGET_PROMOTE_FUNCTION_MODE
+#define TARGET_PROMOTE_FUNCTION_MODE \
+  default_promote_function_mode_always_promote
+
+#undef  TARGET_PROMOTE_PROTOTYPES
+#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_false
+
+#undef  TARGET_BUILD_BUILTIN_VA_LIST
+#define TARGET_BUILD_BUILTIN_VA_LIST tilepro_build_builtin_va_list
+
+#undef  TARGET_EXPAND_BUILTIN_VA_START
+#define TARGET_EXPAND_BUILTIN_VA_START tilepro_va_start
+
+#undef  TARGET_SETUP_INCOMING_VARARGS
+#define TARGET_SETUP_INCOMING_VARARGS tilepro_setup_incoming_varargs
+
+#undef  TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR tilepro_gimplify_va_arg_expr
+
+#undef  TARGET_RTX_COSTS
+#define TARGET_RTX_COSTS tilepro_rtx_costs
+
+/* Limit to what we can reach in one addli.  */
+#undef  TARGET_MIN_ANCHOR_OFFSET
+#define TARGET_MIN_ANCHOR_OFFSET -32768
+#undef  TARGET_MAX_ANCHOR_OFFSET
+#define TARGET_MAX_ANCHOR_OFFSET 32767
+
+#undef  TARGET_LEGITIMATE_CONSTANT_P
+#define TARGET_LEGITIMATE_CONSTANT_P tilepro_legitimate_constant_p
+
+#undef  TARGET_LEGITIMATE_ADDRESS_P
+#define TARGET_LEGITIMATE_ADDRESS_P tilepro_legitimate_address_p
+
+#undef  TARGET_LEGITIMIZE_ADDRESS
+#define TARGET_LEGITIMIZE_ADDRESS tilepro_legitimize_address
+
+#undef  TARGET_DELEGITIMIZE_ADDRESS
+#define TARGET_DELEGITIMIZE_ADDRESS tilepro_delegitimize_address
+
+#undef  TARGET_INIT_BUILTINS
+#define TARGET_INIT_BUILTINS  tilepro_init_builtins
+
+#undef  TARGET_BUILTIN_DECL
+#define TARGET_BUILTIN_DECL tilepro_builtin_decl
+
+#undef  TARGET_EXPAND_BUILTIN
+#define TARGET_EXPAND_BUILTIN tilepro_expand_builtin
+
+#undef  TARGET_CONDITIONAL_REGISTER_USAGE
+#define TARGET_CONDITIONAL_REGISTER_USAGE tilepro_conditional_register_usage
+
+#undef  TARGET_FRAME_POINTER_REQUIRED
+#define TARGET_FRAME_POINTER_REQUIRED tilepro_frame_pointer_required
+
+#undef  TARGET_DELAY_SCHED2
+#define TARGET_DELAY_SCHED2 true
+
+#undef  TARGET_DELAY_VARTRACK
+#define TARGET_DELAY_VARTRACK true
+
+#undef  TARGET_SCHED_ISSUE_RATE
+#define TARGET_SCHED_ISSUE_RATE tilepro_issue_rate
+
+#undef  TARGET_SCHED_ADJUST_COST
+#define TARGET_SCHED_ADJUST_COST tilepro_sched_adjust_cost
+
+#undef  TARGET_MACHINE_DEPENDENT_REORG
+#define TARGET_MACHINE_DEPENDENT_REORG tilepro_reorg
+
+#undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
+  hook_bool_const_tree_hwi_hwi_const_tree_true
+
+#undef  TARGET_ASM_OUTPUT_MI_THUNK
+#define TARGET_ASM_OUTPUT_MI_THUNK tilepro_asm_output_mi_thunk
+
+#undef  TARGET_ASM_TRAMPOLINE_TEMPLATE
+#define TARGET_ASM_TRAMPOLINE_TEMPLATE tilepro_asm_trampoline_template
+
+#undef  TARGET_TRAMPOLINE_INIT
+#define TARGET_TRAMPOLINE_INIT tilepro_trampoline_init
+
+#undef  TARGET_PRINT_OPERAND
+#define TARGET_PRINT_OPERAND tilepro_print_operand
+
+#undef  TARGET_PRINT_OPERAND_ADDRESS
+#define TARGET_PRINT_OPERAND_ADDRESS tilepro_print_operand_address
+
+#undef  TARGET_ASM_FILE_END
+#define TARGET_ASM_FILE_END tilepro_file_end
+
+
+struct gcc_target targetm = TARGET_INITIALIZER;
+
+#include "gt-tilepro.h"
diff --git a/gcc/config/tilepro/tilepro.h b/gcc/config/tilepro/tilepro.h
new file mode 100644 (file)
index 0000000..930612d
--- /dev/null
@@ -0,0 +1,479 @@
+/* Definitions of target machine for GNU compiler for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is used by tilepro_cpu_cpp_builtins to indicate the byte order
+   we're compiling for.  */
+#define TILEPRO_CPU_CPP_ENDIAN_BUILTINS()      \
+  do                                           \
+    {                                          \
+      if (BYTES_BIG_ENDIAN)                    \
+       builtin_define ("__BIG_ENDIAN__");      \
+      else                                     \
+       builtin_define ("__LITTLE_ENDIAN__");   \
+    }                                          \
+  while (0)
+
+/* Target CPU builtins.  */
+#define TARGET_CPU_CPP_BUILTINS() \
+  tilepro_cpu_cpp_builtins (pfile)
+
+#undef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "int"
+
+#undef SIZE_TYPE
+#define SIZE_TYPE "unsigned int"
+\f
+
+/* Target machine storage layout */
+
+#define BITS_BIG_ENDIAN 0
+#define BYTES_BIG_ENDIAN 0
+#define WORDS_BIG_ENDIAN 0
+
+#define UNITS_PER_WORD 4
+#define PARM_BOUNDARY 32
+#define STACK_BOUNDARY 64
+#define FUNCTION_BOUNDARY 64
+#define BIGGEST_ALIGNMENT 64
+#define STRICT_ALIGNMENT 1
+
+#define PCC_BITFIELD_TYPE_MATTERS 1
+#define FASTEST_ALIGNMENT 32
+#define BIGGEST_FIELD_ALIGNMENT 64
+
+/* Unaligned moves trap and are very slow.  */
+#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1
+
+/* Make strings word-aligned so strcpy from constants will be
+   faster.  */
+#define CONSTANT_ALIGNMENT(EXP, ALIGN)  \
+  ((TREE_CODE (EXP) == STRING_CST      \
+    && (ALIGN) < FASTEST_ALIGNMENT)    \
+   ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make arrays of chars word-aligned for the same reasons.  */
+#define DATA_ALIGNMENT(TYPE, ALIGN)            \
+  (TREE_CODE (TYPE) == ARRAY_TYPE              \
+   && TYPE_MODE (TREE_TYPE (TYPE)) == QImode   \
+   && (ALIGN) < FASTEST_ALIGNMENT ? FASTEST_ALIGNMENT : (ALIGN))
+
+/* Make local arrays of chars word-aligned for the same reasons.  */
+#define LOCAL_ALIGNMENT(TYPE, ALIGN) DATA_ALIGNMENT (TYPE, ALIGN)
+\f
+
+/* Standard register usage.  */
+
+#define FIRST_PSEUDO_REGISTER (64 + 3)
+
+#define FIXED_REGISTERS \
+ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1}
+
+#define CALL_USED_REGISTERS \
+ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, \
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+  0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
+  1, 1, 1}
+
+#define CALL_REALLY_USED_REGISTERS \
+ CALL_USED_REGISTERS
+
+#define REG_ALLOC_ORDER {                              \
+      10, 11, 12, 13, 14, /* call used */              \
+      15, 16, 17, 18, 19,                              \
+      20, 21, 22, 23, 24,                              \
+      25, 26, 27, 28, 29,                              \
+                                                       \
+      9, 8, 7, 6, 5,      /* argument */               \
+      4, 3, 2, 1, 0,                                   \
+                                                       \
+      55,                /* return address */          \
+                                                       \
+      30, 31, 32, 33, 34, /* call saved registers */   \
+      35, 36, 37, 38, 39,                              \
+      40, 41, 42, 43, 44,                              \
+      45, 46, 47, 48, 49,                              \
+      50, 51,                                          \
+                                                       \
+      52,                /* hard frame pointer */      \
+      53, 54,            /* tp, sp */                  \
+                                                       \
+      56, 57, 58, 59, 60, /* special purpose */                \
+      61, 62, 63, 64, 65, /* or fake registers */      \
+      66                                               \
+}
+
+#define HARD_REGNO_NREGS(REGNO, MODE)  \
+  ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+
+/* All registers can hold all modes.  */
+#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
+
+#define MODES_TIEABLE_P(MODE1, MODE2)  1
+
+/* Register that holds an address into the text segment that can be
+   used by pic code.  */
+#define TILEPRO_PIC_TEXT_LABEL_REGNUM (flag_pic ? 50 : INVALID_REGNUM)
+#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? 51 : INVALID_REGNUM)
+#define HARD_FRAME_POINTER_REGNUM 52
+#define THREAD_POINTER_REGNUM 53
+#define STACK_POINTER_REGNUM 54
+#define TILEPRO_LINK_REGNUM 55
+#define FRAME_POINTER_REGNUM 64
+#define ARG_POINTER_REGNUM 65
+/* Pseudo register used to enforce order between instructions that
+   touch the networks.  */
+#define TILEPRO_NETORDER_REGNUM 66
+#define STATIC_CHAIN_REGNUM 10
+\f
+
+enum reg_class
+{
+  NO_REGS,
+  R0_REGS,
+  R1_REGS,
+  R2_REGS,
+  R3_REGS,
+  R4_REGS,
+  R5_REGS,
+  R6_REGS,
+  R7_REGS,
+  R8_REGS,
+  R9_REGS,
+  R10_REGS,
+  ALL_REGS,
+  LIM_REG_CLASSES
+};
+
+#define N_REG_CLASSES (int) LIM_REG_CLASSES
+
+/* Since GENERAL_REGS is the same class as ALL_REGS, don't give it a
+   different class number; just make it an alias.  */
+#define GENERAL_REGS ALL_REGS
+
+#define REG_CLASS_NAMES        \
+  { \
+    "NO_REGS", \
+    "R0_REGS", \
+    "R1_REGS", \
+    "R2_REGS", \
+    "R3_REGS", \
+    "R4_REGS", \
+    "R5_REGS", \
+    "R6_REGS", \
+    "R7_REGS", \
+    "R8_REGS", \
+    "R9_REGS", \
+    "R10_REGS", \
+    "ALL_REGS" \
+  }
+
+#define REG_CLASS_CONTENTS \
+  { \
+    { 0 }, \
+    { 1 << 0 }, \
+    { 1 << 1 }, \
+    { 1 << 2 }, \
+    { 1 << 3 }, \
+    { 1 << 4 }, \
+    { 1 << 5 }, \
+    { 1 << 6 }, \
+    { 1 << 7 }, \
+    { 1 << 8 }, \
+    { 1 << 9 }, \
+    { 1 << 10 }, \
+    { 0xffffffff, 0xffffffff } \
+  }
+
+#define REGNO_REG_CLASS(REGNO) \
+  ((unsigned)(REGNO) <= 10 ? \
+   (enum reg_class)(R0_REGS + (REGNO)) : ALL_REGS)
+
+#define INDEX_REG_CLASS NO_REGS
+#define BASE_REG_CLASS ALL_REGS
+
+#define PREFERRED_RELOAD_CLASS(X,CLASS)  (CLASS)
+
+#define CLASS_MAX_NREGS(CLASS, MODE)   \
+ ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
+\f
+
+/* Stack layout; function entry, exit and calling.  */
+
+#define STACK_GROWS_DOWNWARD
+#define FRAME_GROWS_DOWNWARD 1
+#define STARTING_FRAME_OFFSET 0
+
+#define DYNAMIC_CHAIN_ADDRESS(FRAME) plus_constant ((FRAME), UNITS_PER_WORD)
+
+#define FIRST_PARM_OFFSET(FNDECL) 0
+
+#define ACCUMULATE_OUTGOING_ARGS 1
+
+#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
+
+#define INCOMING_FRAME_SP_OFFSET 0
+
+#define STACK_POINTER_OFFSET (2 * UNITS_PER_WORD)
+
+#define ARG_POINTER_CFA_OFFSET(FNDECL) (-STACK_POINTER_OFFSET)
+
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+/* The first 10 registers may hold return value.  */
+#define TILEPRO_NUM_RETURN_REGS 10
+
+/* The first 10 registers hold function arguments.  */
+#define TILEPRO_NUM_ARG_REGS 10
+
+#define FUNCTION_ARG_REGNO_P(N) ((N) < TILEPRO_NUM_ARG_REGS)
+
+/* The type used to store the number of words of arguments scanned so
+   far during argument scanning.  This includes any space that is
+   skipped.  */
+#define CUMULATIVE_ARGS int
+
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
+ ((CUM) = 0)
+\f
+
+#define ELIMINABLE_REGS                                        \
+  {{ARG_POINTER_REGNUM,         STACK_POINTER_REGNUM},         \
+  {ARG_POINTER_REGNUM,  HARD_FRAME_POINTER_REGNUM},    \
+  {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM},                \
+  {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}}
+
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
+  ((OFFSET) = tilepro_initial_elimination_offset((FROM),(TO)))
+
+#define FUNCTION_PROFILER(FILE, LABELNO) \
+  tilepro_function_profiler (FILE, LABELNO)
+
+#define TRAMPOLINE_SIZE 48
+#define TRAMPOLINE_ALIGNMENT 64
+#define TRAMPOLINE_SECTION text_section
+\f
+
+/* Call frame debugging information.  */
+
+#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, TILEPRO_LINK_REGNUM)
+
+#define RETURN_ADDR_RTX tilepro_return_addr
+
+#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (TILEPRO_LINK_REGNUM)
+
+#define DWARF_ZERO_REG 63
+
+#define EH_RETURN_DATA_REGNO(N) ((N) < 4 ? (N + 12) : INVALID_REGNUM)
+#define EH_RETURN_STACKADJ_RTX gen_rtx_REG (Pmode, 11)
+#define EH_RETURN_HANDLER_RTX tilepro_eh_return_handler_rtx ()
+
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
+  tilepro_asm_preferred_eh_data_format ((CODE), (GLOBAL))
+\f
+
+/* Addressing modes, and classification of registers for them.  */
+
+#define HAVE_POST_INCREMENT 1
+#define HAVE_POST_DECREMENT 1
+#define HAVE_POST_MODIFY_DISP 1
+
+#define REGNO_OK_FOR_INDEX_P(regno) 0
+#define REGNO_OK_FOR_BASE_P(regno)     \
+  ((regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] >= 0)
+
+#define MAX_REGS_PER_ADDRESS 1
+
+#define CONSTANT_ADDRESS_P(X) 0
+
+#define LEGITIMATE_PIC_OPERAND_P(X) tilepro_legitimate_pic_operand_p (X)
+\f
+
+#define CASE_VECTOR_MODE SImode
+#define CASE_VECTOR_PC_RELATIVE 0
+#define JUMP_TABLES_IN_TEXT_SECTION 0
+
+#define DEFAULT_SIGNED_CHAR 1
+
+#define MOVE_MAX UNITS_PER_WORD
+
+/* Use a value of 11 for MOVE_RATIO and friends, because TILEPro
+   returns structs as large as 10 words in registers.  Because of some
+   some code generation inefficiency, we never get smaller code for
+   turning that into a memcpy, so pick a value that guarantees this
+   doesn't happen.  */
+#define TILEPRO_CALL_RATIO 11
+#define MOVE_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
+#define CLEAR_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
+#define SET_RATIO(speed) ((speed) ? 15 : TILEPRO_CALL_RATIO)
+
+#define WORD_REGISTER_OPERATIONS
+
+#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
+
+#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE)      \
+  if (GET_MODE_CLASS (MODE) == MODE_INT                \
+      && GET_MODE_SIZE (MODE) < UNITS_PER_WORD) \
+    (MODE) = SImode;
+
+/* Define SLOW_BYTE_ACCESS to avoid making a QI or HI mode
+   register.  */
+#define SLOW_BYTE_ACCESS 1
+
+#define SHIFT_COUNT_TRUNCATED 1
+
+#define SHORT_IMMEDIATES_SIGN_EXTEND
+
+#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
+
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) ((VALUE) = 32, 1)
+
+#define Pmode SImode
+
+#define STORE_FLAG_VALUE 1
+
+#define FUNCTION_MODE SImode
+
+#define NO_FUNCTION_CSE 1
+
+#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
+  ((LENGTH) = tilepro_adjust_insn_length ((INSN), (LENGTH)))
+
+#define TARGET_FLOAT_FORMAT IEEE_FLOAT_FORMAT
+
+#define BRANCH_COST(speed_p, predictable_p) ((predictable_p) ? 2 : 6)
+\f
+
+/* Control the assembler format that we output.  */
+
+#undef NO_DOLLAR_IN_LABEL
+
+#define ASM_COMMENT_START "##"
+
+#define TEXT_SECTION_ASM_OP "\t.text"
+
+#define DATA_SECTION_ASM_OP "\t.data"
+
+#undef READONLY_DATA_SECTION_ASM_OP
+#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata, \"a\""
+
+#undef BSS_SECTION_ASM_OP
+#define BSS_SECTION_ASM_OP     "\t.section\t.bss, \"wa\""
+
+#undef INIT_SECTION_ASM_OP
+#define INIT_SECTION_ASM_OP    "\t.section\t.init, \"ax\""
+
+#undef FINI_SECTION_ASM_OP
+#define FINI_SECTION_ASM_OP    "\t.section\t.fini, \"ax\""
+
+#define GLOBAL_ASM_OP ".global "
+
+#define SUPPORTS_WEAK 1
+
+#define USER_LABEL_PREFIX ""
+
+#define REGISTER_PREFIX ""
+#define REGISTER_NAMES                                                  \
+  { "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",       \
+    "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",      \
+    "r16",  "r17",  "r18",  "r19",  "r20",  "r21",  "r22",  "r23",      \
+    "r24",  "r25",  "r26",  "r27",  "r28",  "r29",  "r30",  "r31",      \
+    "r32",  "r33",  "r34",  "r35",  "r36",  "r37",  "r38",  "r39",      \
+    "r40",  "r41",  "r42",  "r43",  "r44",  "r45",  "r46",  "r47",      \
+    "r48",  "r49",  "r50",  "r51",  "r52",  "tp",   "sp",   "lr",       \
+    "sn",   "idn0", "idn1", "udn0", "udn1", "udn2", "udn3", "zero",     \
+    "?FRAME?", "?ARG?", "?NET?" }
+
+/* This is used to help emit bundles.  */
+#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \
+  tilepro_final_prescan_insn (insn)
+
+/* This is used to help emit bundles.  */
+#define ASM_OUTPUT_OPCODE(STREAM, PTR) \
+  (PTR = tilepro_asm_output_opcode (STREAM, PTR))
+
+#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)           \
+  do                                                   \
+    {                                                  \
+      char label[256];                                 \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));\
+      fprintf (FILE, "\t.word ");                      \
+      assemble_name (FILE, label);                     \
+      fprintf (FILE, "\n");                            \
+    }                                                  \
+  while (0)
+
+#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)       \
+  do                                                           \
+    {                                                          \
+      char label[256];                                         \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (VALUE));       \
+      fprintf (FILE, "\t.word ");                              \
+      assemble_name (FILE, label);                             \
+      ASM_GENERATE_INTERNAL_LABEL (label, "L", (REL));         \
+      fprintf (FILE, "-");                                     \
+      assemble_name (FILE, label);                             \
+      fprintf (FILE, "\n");                                    \
+    }                                                          \
+  while (0)
+
+#define ASM_OUTPUT_ALIGN(FILE,LOG)  \
+  do { if ((LOG) != 0) fprintf (FILE, "\t.align %d\n", 1 << (LOG)); } while (0)
+
+#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)   \
+  ( fputs (".comm ", (FILE)),                          \
+    assemble_name ((FILE), (NAME)),                    \
+    fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
+
+#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)    \
+  ( fputs (".lcomm ", (FILE)),                         \
+    assemble_name ((FILE), (NAME)),                    \
+    fprintf ((FILE), ",%u\n", (unsigned int)(ROUNDED)))
+
+\f
+
+#define INIT_EXPANDERS tilepro_init_expanders ()
+
+/* A C structure for machine-specific, per-function data.  This is
+   added to the cfun structure.  */
+typedef struct GTY(()) machine_function
+{
+  /* Symbol for the text label used for pic.  */
+  rtx text_label_symbol;
+
+  /* Register for the text label.  */
+  rtx text_label_rtx;
+
+  /* Register for the pic offset table.  */
+  rtx got_rtx;
+
+  /* The function calls tls_get_addr.  */
+  int calls_tls_get_addr;
+} machine_function;
+
+#ifndef HAVE_AS_TLS
+#define HAVE_AS_TLS 0
+#endif
diff --git a/gcc/config/tilepro/tilepro.md b/gcc/config/tilepro/tilepro.md
new file mode 100644 (file)
index 0000000..9d5d44e
--- /dev/null
@@ -0,0 +1,3817 @@
+;; Machine description for Tilera TILEPro chip for GCC.
+;; Copyright (C) 2011, 2012
+;; Free Software Foundation, Inc.
+;; Contributed by Walter Lee (walt@tilera.com)
+;;
+;; This file is part of GCC.
+;;
+;; GCC is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published
+;; by the Free Software Foundation; either version 3, or (at your
+;; option) any later version.
+;;
+;; GCC is distributed in the hope that it will be useful, but WITHOUT
+;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+;; License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GCC; see the file COPYING3.  If not see
+;; <http://www.gnu.org/licenses/>.
+
+(define_constants [
+  ;;
+  ;; The following represent intrinsic insns, organized by latency.
+  ;;
+
+  ;; single cycle
+  (UNSPEC_INSN_ADDLIS                  1)
+  (UNSPEC_INSN_AULI                    2)
+  (UNSPEC_INSN_AVGB_U                  3)
+  (UNSPEC_INSN_AVGH                    4)
+  (UNSPEC_INSN_BITX                    5)
+  (UNSPEC_INSN_CRC32_32                6)
+  (UNSPEC_INSN_CRC32_8                 7)
+  (UNSPEC_INSN_DRAIN                   8)
+  (UNSPEC_INSN_DTLBPR                  9)
+  (UNSPEC_INSN_DWORD_ALIGN             10)
+  (UNSPEC_INSN_FINV                    11)
+  (UNSPEC_INSN_FLUSH                   12)
+  (UNSPEC_INSN_FNOP                    13)
+  (UNSPEC_INSN_ICOH                    14)
+  (UNSPEC_INSN_ILL                     15)
+  (UNSPEC_INSN_INFO                    16)
+  (UNSPEC_INSN_INFOL                   17)
+  (UNSPEC_INSN_INV                     18)
+  (UNSPEC_INSN_LNK                     19)
+  (UNSPEC_INSN_MFSPR                   20)
+  (UNSPEC_INSN_MNZB                    21)
+  (UNSPEC_INSN_MNZH                    22)
+  (UNSPEC_INSN_MOVELIS                 23)
+  (UNSPEC_INSN_MTSPR                   24)
+  (UNSPEC_INSN_MZB                     25)
+  (UNSPEC_INSN_MZH                     26)
+  (UNSPEC_INSN_NAP                     27)
+  (UNSPEC_INSN_PACKBS_U                28)
+  (UNSPEC_INSN_PACKHB                  29)
+  (UNSPEC_INSN_PACKHS                  30)
+  (UNSPEC_INSN_PACKLB                  31)
+  (UNSPEC_INSN_PREFETCH_L1             32)
+  (UNSPEC_INSN_TBLIDXB0                33)
+  (UNSPEC_INSN_TBLIDXB1                34)
+  (UNSPEC_INSN_TBLIDXB2                35)
+  (UNSPEC_INSN_TBLIDXB3                36)
+  (UNSPEC_INSN_WH64                    37)
+
+  ;; 2 cycles
+  (UNSPEC_INSN_ADIFFB_U                100)
+  (UNSPEC_INSN_ADIFFH                  101)
+  (UNSPEC_INSN_MULHHA_SS               102)
+  (UNSPEC_INSN_MULHHA_SU               103)
+  (UNSPEC_INSN_MULHHA_UU               104)
+  (UNSPEC_INSN_MULHHSA_UU              105)
+  (UNSPEC_INSN_MULHH_SS                106)
+  (UNSPEC_INSN_MULHH_SU                107)
+  (UNSPEC_INSN_MULHH_UU                108)
+  (UNSPEC_INSN_MULHLA_SS               109)
+  (UNSPEC_INSN_MULHLA_SU               110)
+  (UNSPEC_INSN_MULHLA_US               111)
+  (UNSPEC_INSN_MULHLA_UU               112)
+  (UNSPEC_INSN_MULHLSA_UU              113)
+  (UNSPEC_INSN_MULHL_SS                114)
+  (UNSPEC_INSN_MULHL_SU                115)
+  (UNSPEC_INSN_MULHL_US                116)
+  (UNSPEC_INSN_MULHL_UU                117)
+  (UNSPEC_INSN_MULLLA_SS               118)
+  (UNSPEC_INSN_MULLLA_SU               119)
+  (UNSPEC_INSN_MULLLA_UU               120)
+  (UNSPEC_INSN_MULLLSA_UU              121)
+  (UNSPEC_INSN_MULLL_SU                122)
+  (UNSPEC_INSN_MULLL_SS                123)
+  (UNSPEC_INSN_MULLL_UU                124)
+  (UNSPEC_INSN_SADAB_U                 125)
+  (UNSPEC_INSN_SADAH                   126)
+  (UNSPEC_INSN_SADAH_U                 127)
+  (UNSPEC_INSN_SADB_U                  128)
+  (UNSPEC_INSN_SADH                    129)
+  (UNSPEC_INSN_SADH_U                  130)
+
+  ;;
+  ;; The following are special insns.
+  ;;
+
+  ;; Blockage
+  (UNSPEC_BLOCKAGE                     200)
+
+  ;; Latency specifying loads.
+  (UNSPEC_LATENCY_L2                   201)
+  (UNSPEC_LATENCY_MISS                 202)
+
+  ;; Lnk and its label
+  (UNSPEC_LNK_AND_LABEL                203)
+
+  ;; Memory fence
+  (UNSPEC_MF                           204)
+
+  ;; A pseudo-op that prevents network operations from being ordered.
+  (UNSPEC_NETWORK_BARRIER              205)
+
+  ;; Operations that access network registers.
+  (UNSPEC_NETWORK_RECEIVE              206)
+  (UNSPEC_NETWORK_SEND                 207)
+
+  ;; Stack protector operations
+  (UNSPEC_SP_SET                       208)
+  (UNSPEC_SP_TEST                      209)
+
+  ;; A call to __tls_get_addr
+  (UNSPEC_TLS_GD_CALL                  210)
+
+  ;; An opaque TLS "add" operation for TLS general dynamic model
+  ;; access.
+  (UNSPEC_TLS_GD_ADD                   211)
+
+  ;; An opaque TLS "load" operation for TLS initial exec model access.
+  (UNSPEC_TLS_IE_LOAD                  212)
+
+  ;;
+  ;; The following are operands.
+  ;;
+  (UNSPEC_PCREL_SYM                    300)
+  (UNSPEC_GOT16_SYM                    301)
+  (UNSPEC_GOT32_SYM                    302)
+  (UNSPEC_TLS_GD                       303)
+  (UNSPEC_TLS_IE                       304)
+  (UNSPEC_TLS_LE                       305)
+])
+
+;; Mark the last instruction of various latencies, used to
+;; determine the rtx costs of unspec insns.
+(define_constants [
+  (TILEPRO_LAST_LATENCY_1_INSN             99)
+  (TILEPRO_LAST_LATENCY_2_INSN            199)
+  (TILEPRO_LAST_LATENCY_INSN              299)
+])
+
+;; Constants for network registers.
+(define_constants [
+  (TILEPRO_NETREG_IDN0 0)
+  (TILEPRO_NETREG_IDN1 1)
+  (TILEPRO_NETREG_SN   2)
+  (TILEPRO_NETREG_UDN0 3)
+  (TILEPRO_NETREG_UDN1 4)
+  (TILEPRO_NETREG_UDN2 5)
+  (TILEPRO_NETREG_UDN3 6)
+])
+
+;; Constants for special purpose registers.
+(define_constants [
+  (TILEPRO_NETORDER_REG 66)])
+
+
+;; Operand and operator predicates and constraints
+
+(include "predicates.md")
+(include "constraints.md")
+(include "tilepro-generic.md")
+
+;; Define an insn type attribute.  This defines what pipes things can
+;; go in.
+(define_attr "type"
+  "X0,X0_2cycle,X1,X1_branch,X1_2cycle,X1_L2,X1_miss,X01,Y0,Y0_2cycle,Y2,Y2_2cycle,Y2_L2,Y2_miss,Y01,cannot_bundle,cannot_bundle_3cycle,cannot_bundle_4cycle,nothing"
+  (const_string "Y01"))
+
+(define_attr "length" ""
+   (cond [(eq_attr "type" "X1_branch")
+         (if_then_else
+          (and (le (minus (match_dup 0) (pc)) (const_int 524280))
+               (le (minus (pc) (match_dup 0)) (const_int 524288)))
+          (const_int 8)
+          (const_int 16))
+         ]
+        (const_int 8)))
+
+\f
+;; Define iterators.
+(define_mode_iterator I48MODE [SI DI])
+(define_mode_iterator I12MODE [QI HI])
+
+(define_code_iterator binop_u5bit [ashift ashiftrt lshiftrt rotate])
+(define_code_iterator binop_with_imm
+  [ashift lshiftrt ashiftrt rotate eq lt and ior xor])
+(define_code_iterator unop [bswap clz ctz popcount])
+
+(define_mode_attr load [(QI "lb") (HI "lh") (SI "lw")])
+(define_mode_attr store [(QI "sb") (HI "sh") (SI "sw")])
+
+;; <optab> expands to the name of the optab for a particular code.
+(define_code_attr optab [(ashift "ashl")
+                        (ashiftrt "ashr")
+                        (lshiftrt "lshr")
+                        (eq "seq")
+                        (ne "sne")
+                        (lt "slt")
+                        (ltu "sltu")
+                        (le "sle")
+                        (leu "sleu")
+                        (minus "sub")
+                        (plus "add")
+                        (rotate "rotl")
+                        (smax "smax")
+                        (smin "smin")
+                        (umax "umax")
+                        (umin "umin")
+                        (ss_minus "sssub")
+                        (ss_plus "ssadd")
+                        (us_minus "ussub")
+                        (us_plus "usadd")
+                        (and "and")
+                        (ior "ior")
+                        (xor "xor")
+                        (bswap "bswap")
+                        (clz "clz")
+                        (ctz "ctz")
+                        (popcount "popcount")])
+
+;; <insn> expands to the name of the insn that implements a particular
+;; code.
+(define_code_attr insn [(ashift "shl")
+                       (ashiftrt "sra")
+                       (lshiftrt "shr")
+                       (eq "seq")
+                       (ne "sne")
+                       (lt "slt")
+                       (ltu "slt")
+                       (le "slte")
+                       (leu "slte")
+                       (minus "sub")
+                       (plus "add")
+                       (rotate "rl")
+                       (smax "max")
+                       (smin "min")
+                       (umax "max")
+                       (umin "min")
+                       (ss_minus "sub")
+                       (ss_plus "add")
+                       (us_minus "sub")
+                       (us_plus "add")
+                       (and "and")
+                       (ior "or")
+                       (xor "xor")
+                       (bswap "bytex")
+                       (clz "clz")
+                       (ctz "ctz")
+                       (popcount "pcnt")])
+
+;; <u> expands to the suffix of the insn that implements a particular
+;; code.
+(define_code_attr u [(ashift "")
+                    (ashiftrt "")
+                    (lshiftrt "")
+                    (eq "")
+                    (ne "")
+                    (lt "")
+                    (ltu "_u")
+                    (le "")
+                    (leu "_u")
+                    (minus "")
+                    (plus "")
+                    (rotate "")
+                    (smax "")
+                    (smin "")
+                    (umax "_u")
+                    (umin "_u")
+                    (ss_minus "s")
+                    (ss_plus "s")
+                    (us_minus "s_u")
+                    (us_plus "s_u")
+                    (and "")
+                    (ior "")
+                    (xor "")])
+
+;; <comm> indicates whether a particular code is commutative, using
+;; the "%" commutative opterator constraint.
+(define_code_attr comm [(ashift "")
+                       (ashiftrt "")
+                       (lshiftrt "")
+                       (eq "%")
+                       (ne "%")
+                       (lt "")
+                       (ltu "")
+                       (le "")
+                       (leu "")
+                       (minus "")
+                       (plus "%")
+                       (rotate "")
+                       (smax "%")
+                       (umax "%")
+                       (smin "%")
+                       (umin "%")
+                       (ss_plus "%")
+                       (us_plus "%")
+                       (ss_minus "")
+                       (us_minus "")
+                       (and "%")
+                       (ior "%")
+                       (xor "%")])
+
+(define_mode_iterator VEC [V4QI V2HI])
+
+;; Code iterator for all three shifts.
+(define_code_iterator any_shift [ashift ashiftrt lshiftrt])
+
+;; Code iterator for all byte ops without immediate variants.
+(define_code_iterator v1op [us_plus ne le leu minus us_minus])
+
+;; Code iterator for all 2-byte vector ops without immediate variants.
+(define_code_iterator v2op [ss_plus ne le leu minus ss_minus])
+
+;; Code iterator for all byte vector ops with immediate variants.
+(define_code_iterator v1op_immed [plus umax umin eq lt ltu])
+
+;; Code iterator for all 2-byte vector ops with immediate variants.
+(define_code_iterator v2op_immed [plus smax smin eq lt ltu])
+
+;; Code for packing two 2-byte vectors.
+(define_code_iterator v2pack [truncate us_truncate])
+
+;; <pack_optab> expands to the part of the optab name describing how
+;; two vectors are packed.
+(define_code_attr pack_optab [(truncate "trunc")
+                             (us_truncate "usat")
+                             (ss_truncate "ssat")])
+
+;; <pack_insn> expands to the insn that implements a particular vector
+;; packing code.
+(define_code_attr pack_insn [(truncate "packl")
+                            (us_truncate "pack")
+                            (ss_truncate "pack")])
+
+;; <pack_u> expands to the suffix of the insn that implements a
+;; particular vector packing code.
+(define_code_attr pack_u [(truncate "")
+                         (us_truncate "s_u")
+                         (ss_truncate "s")])
+
+\f
+;;
+;; The basic data move insns.
+;;
+
+(define_expand "movqi"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "")
+       (match_operand:QI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilepro_expand_mov (QImode, operands))
+    DONE;
+})
+
+(define_insn "*movqi_insn"
+  [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,r,r,U,m")
+       (match_operand:QI 1 "move_operand"         "r,I,U,m,rO,rO"))]
+  "(register_operand (operands[0], QImode)
+    || reg_or_0_operand (operands[1], QImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   lb_u\t%0, %1
+   lbadd_u\t%0, %I1, %i1
+   sb\t%0, %r1
+   sbadd\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "movhi"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "")
+       (match_operand:HI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilepro_expand_mov (HImode, operands))
+    DONE;
+})
+
+(define_insn "*movhi_insn"
+  [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,r,r,U,m")
+       (match_operand:HI 1 "move_operand"         "r,I,J,U,m,rO,rO"))]
+  "(register_operand (operands[0], HImode)
+    || reg_or_0_operand (operands[1], HImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   moveli\t%0, %1
+   lh_u\t%0, %1
+   lhadd_u\t%0, %I1, %i1
+   sh\t%0, %r1
+   shadd\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+
+(define_expand "movsi"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "")
+       (match_operand:SI 1 "nonautoinc_operand" ""))]
+  ""
+{
+  if (tilepro_expand_mov (SImode, operands))
+    DONE;
+})
+
+(define_insn "*movsi_high_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (high:SI (match_operand:SI 1 "symbolic_operand" "in")))]
+  ""
+  "auli\t%0, zero, ha16(%1)"
+  [(set_attr "type" "X01")])
+
+(define_insn "*movsi_insn"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,r,r,r,r,r,U,m")
+       (match_operand:SI 1 "move_operand"         "r,I,J,K,N,P,U,m,rO,rO"))]
+  "(register_operand (operands[0], SImode)
+    || reg_or_0_operand (operands[1], SImode))"
+  "@
+   move\t%0, %r1
+   movei\t%0, %1
+   moveli\t%0, %1
+   auli\t%0, zero, %h1
+   addib\t%0, zero, %j1
+   addih\t%0, zero, %h1
+   lw\t%0, %1
+   lwadd\t%0, %I1, %i1
+   sw\t%0, %r1
+   swadd\t%I0, %r1, %i0"
+  [(set_attr "type" "*,*,X01,X01,X01,X01,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_insn "movstrictqi"
+  [(set (strict_low_part (match_operand:QI 0 "register_operand" "+r"))
+       (match_operand:QI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "mm\t%r0, %r1, %r0, 0, 7"
+  [(set_attr "type" "X01")])
+  
+(define_insn "movstricthi"
+  [(set (strict_low_part (match_operand:HI 0 "register_operand" "+r"))
+       (match_operand:HI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "mm\t%r0, %r1, %r0, 0, 15"
+  [(set_attr "type" "X01")])
+  
+(define_expand "movmisalign<mode>"
+  [(set (match_operand:VEC 0 "nonautoincmem_nonimmediate_operand" "")
+        (match_operand:VEC 1 "nonautoincmem_general_operand" ""))]
+  ""
+{
+  tilepro_expand_movmisalign (<MODE>mode, operands);
+  DONE;
+})
+
+(define_expand "movsf"
+  [(set (match_operand:SF 0 "nonimmediate_operand" "")
+       (match_operand:SF 1 "general_operand" ""))]
+  ""
+{
+  /* Materialize immediates using clever SImode code, but don't
+     do this after reload starts, since gen_lowpart will choke
+     during reload if given an illegitimate address. */
+  if (immediate_operand (operands[1], SFmode)
+      && operands[1] != const0_rtx
+      && (register_operand (operands[0], SFmode)
+          || (!reload_in_progress && !reload_completed)))
+    {
+      emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
+                            gen_lowpart (SImode, operands[1])));
+      DONE;
+    }
+})
+
+(define_insn "*movsf"
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,U,m")
+       (match_operand:SF 1 "general_operand" "rO,U,m,rO,rO"))]
+  ""
+  "@
+   move\t%0, %r1
+   lw\t%0, %1
+   lwadd\t%0, %I1, %i1
+   sw\t%0, %r1
+   swadd\t%I0, %r1, %i0"
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+(define_expand "mov<mode>"
+  [(set (match_operand:VEC 0 "nonimmediate_operand" "")
+        (match_operand:VEC 1 "general_operand" ""))]
+  ""
+{
+  /* Materialize immediates using clever SImode code, but don't
+     do this after reload starts, since gen_lowpart will choke
+     during reload if given an illegitimate address. */
+  if (immediate_operand (operands[1], <MODE>mode)
+      && operands[1] != const0_rtx
+      && (register_operand (operands[0], <MODE>mode)
+          || (!reload_in_progress && !reload_completed)))
+    {
+      emit_insn (gen_movsi (gen_lowpart (SImode, operands[0]),
+                            gen_lowpart (SImode, operands[1])));
+      DONE;
+    }
+})
+
+(define_insn "*mov<mode>"
+  [(set (match_operand:VEC 0 "nonimmediate_operand" "=r,r,r,U,m")
+       (match_operand:VEC 1 "general_operand" "rO,U,m,rO,rO"))]
+  ""
+  "@
+   move\t%0, %r1
+   lw\t%0, %1
+   lwadd\t%0, %I1, %i1
+   sw\t%0, %r1
+   swadd\t%I0, %r1, %i0"
+  [(set_attr "type" "*,Y2_2cycle,X1_2cycle,Y2,X1")])
+
+\f
+;;
+;; Bit-field extracts
+;;
+
+(define_expand "extv"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (sign_extract:SI
+        (match_operand:QI 1 "nonautoincmem_operand" "")
+        (match_operand:SI 2 "immediate_operand" "")
+        (match_operand:SI 3 "immediate_operand" "")))]
+  ""
+{
+  HOST_WIDE_INT bit_offset, bit_width;
+  HOST_WIDE_INT first_byte_offset, last_byte_offset;
+
+  bit_width = INTVAL (operands[2]);
+  bit_offset = INTVAL (operands[3]);
+
+  /* Reject bitfields that can be done with a normal load */
+  if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
+    FAIL;
+
+  /* The value in memory cannot span more than 4 bytes. */
+  first_byte_offset = bit_offset / BITS_PER_UNIT;
+  last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
+  if (last_byte_offset - first_byte_offset > 3)
+    FAIL;
+
+  tilepro_expand_unaligned_load (operands[0], operands[1],
+                                bit_width, bit_offset, 1);
+
+  DONE;
+})
+
+(define_expand "extzv"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (zero_extract:SI
+        (match_operand:QI 1 "nonautoincmem_operand" "")
+        (match_operand:SI 2 "immediate_operand" "")
+        (match_operand:SI 3 "immediate_operand" "")))]
+  ""
+{
+  HOST_WIDE_INT bit_offset, bit_width;
+  HOST_WIDE_INT first_byte_offset, last_byte_offset;
+
+  bit_width = INTVAL (operands[2]);
+  bit_offset = INTVAL (operands[3]);
+
+  /* Reject bitfields that can be done with a normal load */
+  if (MEM_ALIGN (operands[1]) >= bit_offset + bit_width)
+    FAIL;
+
+  /* The value in memory cannot span more than 4 bytes. */
+  first_byte_offset = bit_offset / BITS_PER_UNIT;
+  last_byte_offset = (bit_offset + bit_width - 1) / BITS_PER_UNIT;
+  if (last_byte_offset - first_byte_offset > 3)
+    FAIL;
+
+  tilepro_expand_unaligned_load (operands[0], operands[1],
+                                 bit_width, bit_offset, 0);
+
+  DONE;
+})
+
+\f
+;;
+;; Arithmetic ops
+;;
+
+(define_insn "*s123a_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                          (match_operand:SI 2 "cint_248_operand" "I"))
+                 (match_operand:SI 3 "reg_or_0_operand" "rO")))]
+  ""
+  "s%t2a\t%0, %r1, %r3")
+
+(define_expand "addsi3"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (plus:SI (match_operand:SI 1 "register_operand" "")
+                (match_operand:SI 2 "reg_or_cint_operand" "")))]
+  ""
+  "
+    if (tilepro_expand_addsi (operands[0], operands[1], operands[2]))
+      DONE;
+  ")
+
+(define_insn "*addsi_high_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI
+         (match_operand:SI 1 "reg_or_0_operand" "%rO")
+         (high:SI (match_operand:SI 2 "const_symbolic_operand" "T"))))]
+  ""
+  "auli\t%0, %r1, %H2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*addsi_lo_sum_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (lo_sum:SI
+         (match_operand:SI 1 "reg_or_0_operand" "%rO")
+         (match_operand:SI 2 "const_symbolic_operand" "T")))]
+  ""
+  "addli\t%0, %r1, %L2"
+  [(set_attr "type" "X01")])
+
+(define_insn "*addsi3_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO,rO")
+                (match_operand:SI 2 "add_operand" "r,I,J,K")))]
+  ""
+  "@
+   add\t%0, %r1, %r2
+   addi\t%0, %r1, %2
+   addli\t%0, %r1, %2
+   auli\t%0, %r1, %h2"
+  [(set_attr "type" "*,*,X01,X01")])
+
+(define_insn "subsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                  (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "sub\t%0, %r1, %r2")
+
+(define_insn "negsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (neg:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "sub\t%0, zero, %r1")
+
+(define_insn "ssaddsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ss_plus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "adds\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "sssubsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ss_minus:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                     (match_operand:SI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "subs\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+;;
+;; Shifts
+;;
+
+;; ashift, ashiftrt, lshiftrt, rotate.
+(define_insn "<optab>si3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (binop_u5bit:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+                       (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+  <insn>i\t%0, %r1, %2
+  <insn>\t%0, %r1, %r2")
+
+\f
+;;
+;; Compares
+;;
+
+(define_expand "cstore<mode>4"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (match_operator:SI 1 "ordered_comparison_operator"
+         [(match_operand:I48MODE 2 "reg_or_cint_operand" "")
+          (match_operand:I48MODE 3 "reg_or_cint_operand" "")]))]
+  ""
+  { if (!tilepro_emit_setcc (operands, <MODE>mode)) FAIL; else DONE; })
+
+(define_insn "insn_seq"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (eq:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
+               (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   seqi\t%0, %r1, %2
+   seq\t%0, %r1, %r2")
+
+(define_insn "insn_sne"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (ne:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+               (match_operand:SI 2 "reg_or_cint_operand" "rO")))]
+  ""
+  "sne\t%0, %r1, %r2")
+
+(define_insn "insn_slt"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (lt:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+               (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   slti\t%0, %r1, %2
+   slt\t%0, %r1, %r2")
+
+(define_insn "insn_slte"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (le:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+               (match_operand:SI 2 "reg_or_cint_operand" "L,rO")))]
+  ""
+  "@
+   slti\t%0, %r1, %P2
+   slte\t%0, %r1, %r2")
+
+(define_insn "insn_slt_u"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (ltu:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+                (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))]
+  ""
+  "@
+   slti_u\t%0, %r1, %2
+   slt_u\t%0, %r1, %r2")
+
+(define_insn "insn_slte_u"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (leu:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+                (match_operand:SI 2 "reg_or_cint_operand" "Q,rO")))]
+  ""
+  "@
+   slti_u\t%0, %r1, %P2
+   slte_u\t%0, %r1, %r2")
+
+\f
+;;
+;; Logical ops
+;;
+
+(define_insn "andsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (and:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO")
+                (match_operand:SI 2 "and_operand" "I,M,rO")))]
+  ""
+  "@
+   andi\t%0, %r1, %2
+   mm\t%0, %r1, zero, %M2
+   and\t%0, %r1, %r2"
+  [(set_attr "type" "*,X01,*")])
+  
+(define_insn "iorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (ior:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
+                (match_operand:SI 2 "reg_or_s8bit_operand" "I,rO")))]
+  ""
+  "@
+   ori\t%0, %r1, %2
+   or\t%0, %r1, %r2")
+  
+(define_insn "xorsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (xor:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO")
+                (match_operand:SI 2 "reg_or_s8bit_operand" "rO,I")))]
+  ""
+  "@
+   xor\t%0, %r1, %r2
+   xori\t%0, %r1, %2"
+  [(set_attr "type" "*,X01")])
+  
+;; bswap, clz, ctz, popcount
+(define_insn "<optab>si2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unop:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "<insn>\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_expand "ctzdi2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+  ""
+{
+  rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
+
+  split_di (&operands[1], 1, &lo, &hi);
+  lo = force_reg (SImode, lo);
+  hi = force_reg (SImode, hi);
+
+  ctz_lo = gen_reg_rtx (SImode);
+  emit_insn (gen_ctzsi2 (ctz_lo, lo));
+
+  ctz_hi = gen_reg_rtx (SImode);
+  emit_insn (gen_ctzsi2 (ctz_hi, hi));
+
+  ctz_hi_plus_32 = gen_reg_rtx (SImode);
+  emit_insn (gen_addsi3 (ctz_hi_plus_32, ctz_hi, GEN_INT (32)));
+
+  result = gen_reg_rtx (SImode);
+  emit_insn (gen_insn_mvz (result, ctz_lo, lo, ctz_hi_plus_32));
+
+  emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
+
+  DONE;
+})
+
+(define_expand "clzdi2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+  ""
+{
+  rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
+
+  split_di (&operands[1], 1, &lo, &hi);
+  lo = force_reg (SImode, lo);
+  hi = force_reg (SImode, hi);
+
+  clz_lo = gen_reg_rtx (SImode);
+  emit_insn (gen_clzsi2 (clz_lo, lo));
+
+  clz_hi = gen_reg_rtx (SImode);
+  emit_insn (gen_clzsi2 (clz_hi, hi));
+
+  clz_lo_plus_32 = gen_reg_rtx (SImode);
+  emit_insn (gen_addsi3 (clz_lo_plus_32, clz_lo, GEN_INT (32)));
+
+  result = gen_reg_rtx (SImode);
+  emit_insn (gen_insn_mvz (result, clz_hi, hi, clz_lo_plus_32));
+
+  emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
+
+  DONE;
+})
+
+(define_expand "ffsdi2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
+  ""
+{
+  rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
+  rtx result;
+
+  split_di (&operands[1], 1, &lo, &hi);
+  lo = force_reg (SImode, lo);
+  hi = force_reg (SImode, hi);
+
+  ctz_lo = gen_reg_rtx (SImode);
+  emit_insn (gen_ctzsi2 (ctz_lo, lo));
+
+  ctz_hi = gen_reg_rtx (SImode);
+  emit_insn (gen_ctzsi2 (ctz_hi, hi));
+
+  ctz_hi_plus_32 = gen_reg_rtx (SImode);
+  emit_insn (gen_addsi3 (ctz_hi_plus_32, ctz_hi, GEN_INT (32)));
+
+  ctz = gen_reg_rtx (SImode);
+  emit_insn (gen_insn_mvz (ctz, ctz_lo, lo, ctz_hi_plus_32));
+
+  ctz_plus_1 = gen_reg_rtx (SImode);
+  emit_insn (gen_addsi3 (ctz_plus_1, ctz, GEN_INT (1)));
+
+  ctz_cond = gen_reg_rtx (SImode);
+  emit_insn (gen_iorsi3 (ctz_cond, lo, hi));
+
+  result = gen_reg_rtx (SImode);
+  emit_insn (gen_insn_mvz (result, ctz_plus_1, ctz_cond, const0_rtx));
+
+  emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
+
+  DONE;
+})
+
+(define_expand "popcountdi2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (popcount:DI (match_operand:DI 1 "nonmemory_operand" "")))]
+  ""
+{
+  rtx lo, hi, popcount_lo, popcount_hi, result;
+
+  split_di (&operands[1], 1, &lo, &hi);
+  lo = force_reg (SImode, lo);
+  hi = force_reg (SImode, hi);
+
+  popcount_lo = gen_reg_rtx (SImode);
+  emit_insn (gen_popcountsi2 (popcount_lo, lo));
+
+  popcount_hi = gen_reg_rtx (SImode);
+  emit_insn (gen_popcountsi2 (popcount_hi, hi));
+
+  result = gen_reg_rtx (SImode);
+  emit_insn (gen_addsi3 (result, popcount_lo, popcount_hi));
+
+  emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
+
+  DONE;
+})
+
+(define_expand "paritysi2"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (parity:SI (match_operand:SI 1 "reg_or_0_operand" "")))]
+  ""
+  {
+    operands[2] = gen_reg_rtx (SImode);
+    emit_insn (gen_popcountsi2 (operands[2], operands[1]));
+    emit_insn (gen_andsi3 (operands[0], operands[2], const1_rtx));
+    DONE;
+  })
+
+(define_expand "paritydi2"
+  [(set (match_operand:DI 0 "register_operand" "")
+       (parity:DI (match_operand:DI 1 "nonmemory_operand" "")))]
+  ""
+{
+  rtx lo, hi, xor_lohi, result;
+
+  split_di (&operands[1], 1, &lo, &hi);
+  lo = force_reg (SImode, lo);
+  hi = force_reg (SImode, hi);
+
+  xor_lohi = gen_reg_rtx (SImode);
+  emit_insn (gen_xorsi3 (xor_lohi, lo, hi));
+
+  result = gen_reg_rtx (SImode);
+  emit_insn (gen_paritysi2 (result, xor_lohi));
+
+  emit_move_insn (operands[0], convert_to_mode (DImode, result, 1));
+
+  DONE;
+})
+
+(define_insn "one_cmplsi2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (not:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))]
+  ""
+  "nor\t%0, %r1, zero")
+
+\f
+;;
+;; Conditional moves.
+;;
+
+(define_expand "movsicc"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else:SI (match_operand 1 "comparison_operator" "")
+                        (match_operand:SI 2 "reg_or_0_operand" "")
+                        (match_operand:SI 3 "reg_or_0_operand" "")))]
+  ""
+  { operands[1] = tilepro_emit_conditional_move (operands[1]); })
+
+(define_insn "movcc_insn"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (if_then_else:SI
+        (match_operator 4 "eqne_operator"
+         [(match_operand:SI 1 "reg_or_0_operand" "rO,rO,rO,rO")
+          (const_int 0)])
+        (match_operand:SI 2 "reg_or_0_operand" "rO,O,rO,0")
+        (match_operand:SI 3 "reg_or_0_operand" "O,rO,0,rO")))]
+  ""
+  "@
+   m%c4\t%0, %r1, %r2
+   m%C4\t%0, %r1, %r3
+   mv%c4\t%0, %r1, %r2
+   mv%C4\t%0, %r1, %r3"
+  [(set_attr "type" "*,*,Y0,Y0")])
+
+(define_expand "insn_mz"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else:SI
+         (eq (match_operand:SI 1 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:SI 2 "reg_or_0_operand" "")
+         (const_int 0)))])
+
+(define_expand "insn_mnz"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else:SI
+         (ne (match_operand:SI 1 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:SI 2 "reg_or_0_operand" "")
+         (const_int 0)))])
+
+(define_expand "insn_mvz"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else:SI
+         (eq (match_operand:SI 2 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:SI 3 "reg_or_0_operand" "")
+         (match_operand:SI 1 "reg_or_0_operand" "")))])
+   
+(define_expand "insn_mvnz"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (if_then_else:SI
+         (ne (match_operand:SI 2 "reg_or_0_operand" "")
+             (const_int 0))
+         (match_operand:SI 3 "reg_or_0_operand" "")
+         (match_operand:SI 1 "reg_or_0_operand" "")))])
+   
+\f
+;;
+;; Conversions
+;;
+
+(define_insn "zero_extendqisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (zero_extend:SI (match_operand:QI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   mm\t%0, %r1, zero, 0, 7
+   lb_u\t%0, %1
+   lbadd_u\t%0, %I1, %i1"
+  [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
+  
+(define_insn "zero_extendhisi2"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+       (zero_extend:SI (match_operand:HI 1 "move_operand" "rO,U,m")))]
+  ""
+  "@
+   mm\t%0, %r1, zero, 0, 15
+   lh_u\t%0, %1
+   lhadd_u\t%0, %I1, %i1"
+  [(set_attr "type" "X01,Y2_2cycle,X1_2cycle")])
+
+(define_expand "extendhisi2"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (sign_extend:SI (match_operand:HI 1 "move_operand" "")))]
+  ""
+{
+  if (!memory_operand (operands[1], HImode))
+  {
+    operands[1] = gen_lowpart (SImode, operands[1]);
+    operands[2] = can_create_pseudo_p () ? gen_reg_rtx (SImode) : operands[0];
+
+    emit_move_insn (operands[2], gen_rtx_ASHIFT (SImode, operands[1],
+                                                GEN_INT (16)));
+    emit_move_insn (operands[0], gen_rtx_ASHIFTRT (SImode, operands[2],
+                                                  GEN_INT (16)));
+    DONE;
+  }
+})
+
+(define_insn "*lh"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (sign_extend:SI (match_operand:HI 1 "memory_operand" "U,m")))]
+  ""
+  "@
+   lh\t%0, %1
+   lhadd\t%0, %I1, %i1"
+  [(set_attr "type" "Y2_2cycle,X1_2cycle")])
+
+(define_expand "extendqisi2"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (sign_extend:SI (match_operand:QI 1 "move_operand" "")))]
+  ""
+{
+  if (!memory_operand (operands[1], QImode))
+  {
+    operands[1] = gen_lowpart (SImode, operands[1]);
+    operands[2] = can_create_pseudo_p () ? gen_reg_rtx (SImode) : operands[0];
+
+    emit_move_insn (operands[2], gen_rtx_ASHIFT (SImode, operands[1],
+                                                GEN_INT (24)));
+    emit_move_insn (operands[0], gen_rtx_ASHIFTRT (SImode, operands[2],
+                                                  GEN_INT (24)));
+    DONE;
+  }
+})
+
+(define_insn "*lb"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (sign_extend:SI (match_operand:QI 1 "memory_operand" "U,m")))]
+  ""
+  "@
+   lb\t%0, %1
+   lbadd\t%0, %I1, %i1"
+  [(set_attr "type" "Y2_2cycle,X1_2cycle")])
+
+;;
+;; insv patterns
+;;
+(define_expand "insv"
+  [(set (zero_extract:SI (match_operand:SI 0 "register_operand" "")
+                        (match_operand:SI 1 "u5bit_cint_operand" "")
+                        (match_operand:SI 2 "u5bit_cint_operand" ""))
+       (match_operand:SI 3 "reg_or_cint_operand" ""))]
+  ""
+{
+  tilepro_expand_insv (operands);
+  DONE;
+})
+
+(define_insn "*insv_tblidxb0"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (match_operand:SI 1 "register_operand" "rO"))]
+  ""
+  "tblidxb0\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb1"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:SI
+        (const_int 8)
+        (const_int 8)
+       (match_operand:SI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb1\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb2"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:SI
+        (const_int 8)
+        (const_int 16)
+       (match_operand:SI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb2\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_tblidxb3"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (const_int 8)
+        (const_int 2))
+       (zero_extract:SI
+        (const_int 8)
+        (const_int 24)
+       (match_operand:SI 1 "register_operand" "rO")))]
+  ""
+  "tblidxb3\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*insv_mm1"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (match_operand:SI 1 "u5bit_cint_operand" "n")
+        (const_int 0))
+       (match_operand:SI 2 "register_operand" "rO"))]
+  ""
+  "mm\t%0, %r2, %0, 0, %1-1"
+  [(set_attr "type" "X01")])
+
+(define_insn "*insv_mm2"
+  [(set (zero_extract:SI
+        (match_operand:SI 0 "register_operand" "+r")
+        (match_operand:SI 1 "u5bit_cint_operand" "n")
+        (match_operand:SI 2 "u5bit_cint_operand" "n"))
+       (zero_extract:SI
+        (match_operand:SI 3 "register_operand" "rO")
+        (match_dup 1)
+        (match_dup 2)))]
+  ""
+  "mm\t%0, %r3, %0, %2, %2+%1-1"
+  [(set_attr "type" "X01")])
+
+\f
+;;
+;; Multiplies
+;;
+
+(define_expand "mulsi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (mult:SI (zero_extend:SI
+                  (subreg:HI (match_operand:SI 1 "nonmemory_operand" "") 0))
+                 (zero_extend:SI
+                  (subreg:HI (match_operand:SI 2 "nonmemory_operand" "") 0))))
+   (set (match_dup 0)
+        (unspec:SI [(match_dup 0) (match_dup 1) (match_dup 2)]
+                   UNSPEC_INSN_MULHLSA_UU))
+   (set (match_dup 0)
+        (unspec:SI [(match_dup 0) (match_dup 2) (match_dup 1)]
+                   UNSPEC_INSN_MULHLSA_UU))]
+  ""
+  {
+    operands[1] = force_reg (SImode, operands[1]);
+    operands[1] = make_safe_from (operands[1], operands[0]);
+
+    if (tilepro_expand_mulsi (operands[0], operands[1], operands[2]))
+      DONE;
+    else
+      {
+        operands[2] = force_reg (SImode, operands[2]);
+        operands[2] = make_safe_from (operands[2], operands[0]);
+      }
+  })
+
+(define_insn "mulhisi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mult:SI (sign_extend:SI
+                 (match_operand:HI 1 "reg_or_0_operand" "rO"))
+                (sign_extend:SI
+                 (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mulll_ss\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+(define_insn "umulhisi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mult:SI (zero_extend:SI
+                 (match_operand:HI 1 "reg_or_0_operand" "rO"))
+                (zero_extend:SI
+                 (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mulll_uu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+(define_insn "usmulhisi3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mult:SI (zero_extend:SI
+                 (match_operand:HI 1 "reg_or_0_operand" "rO"))
+                (sign_extend:SI
+                 (match_operand:HI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mulll_su\t%0, %r2, %r1"
+  [(set_attr "type" "X0_2cycle")])
+  
+(define_insn "maddhisi4"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI
+         (mult:SI (sign_extend:SI
+                   (match_operand:HI 1 "reg_or_0_operand" "rO"))
+                  (sign_extend:SI
+                   (match_operand:HI 2 "reg_or_0_operand" "rO")))
+         (match_operand:SI 3 "register_operand" "0")))]
+  ""
+  "mullla_ss\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+(define_insn "umaddhisi4"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI
+         (mult:SI (zero_extend:SI
+                   (match_operand:HI 1 "reg_or_0_operand" "rO"))
+                  (zero_extend:SI
+                   (match_operand:HI 2 "reg_or_0_operand" "rO")))
+         (match_operand:SI 3 "register_operand" "0")))]
+  ""
+  "mullla_uu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+
+(define_insn "mulqihi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (mult:HI (sign_extend:HI
+                 (match_operand:QI 1 "reg_or_0_operand" "rO"))
+                (sign_extend:HI
+                 (match_operand:QI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mulll_ss\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+(define_insn "umulqihi3"
+  [(set (match_operand:HI 0 "register_operand" "=r")
+       (mult:HI (zero_extend:HI
+                 (match_operand:QI 1 "reg_or_0_operand" "rO"))
+                (zero_extend:HI
+                 (match_operand:QI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "mulll_uu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_expand "smulsi3_highpart"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (truncate:SI
+         (ashiftrt:DI 
+          (mult:DI (sign_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
+                   (sign_extend:DI (match_operand:SI 2 "reg_or_0_operand" "")))
+          (const_int 32))))]
+  ""
+  {
+    tilepro_expand_smulsi3_highpart (operands[0], operands[1], operands[2]);
+    DONE;
+  })
+
+(define_expand "umulsi3_highpart"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (truncate:SI
+        (lshiftrt:DI
+         (mult:DI (zero_extend:DI (match_operand:SI 1 "reg_or_0_operand" ""))
+                  (zero_extend:DI (match_operand:SI 2 "reg_or_0_operand" "")))
+         (const_int 32))))]
+  ""
+{
+  tilepro_expand_umulsi3_highpart (operands[0], operands[1], operands[2]);
+  DONE;
+})
+
+\f
+;;
+;; Loops
+;;
+
+;; Define the subtract-one-and-jump insns so loop.c knows what to
+;; generate.
+(define_expand "doloop_end"
+  [(use (match_operand 0 "" ""))    ;; loop pseudo
+   (use (match_operand 1 "" ""))    ;; iterations; zero if unknown
+   (use (match_operand 2 "" ""))    ;; max iterations
+   (use (match_operand 3 "" ""))    ;; loop level
+   (use (match_operand 4 "" ""))]   ;; label
+   ""
+{
+  if (optimize > 0)
+  {
+     rtx s0;
+     rtx bcomp;
+     rtx loc_ref;
+
+     /* only do inner loop  */
+     if (INTVAL (operands[3]) > 1)
+       FAIL;
+     /* only deal with loop counters in SImode  */
+     if (GET_MODE (operands[0]) != SImode)
+       FAIL;
+
+     s0 = operands [0];
+
+     emit_move_insn (s0, gen_rtx_PLUS (SImode, s0, GEN_INT (-1)));
+     bcomp = gen_rtx_NE(SImode, s0, const0_rtx);
+     loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands [4]);
+     emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
+                                  gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
+                                                        loc_ref, pc_rtx)));
+     DONE;
+  }
+  else
+     FAIL;
+
+})
+
+;;
+;; Prologue/epilogue
+;;
+(define_expand "prologue"
+  [(const_int 0)]
+  ""
+{
+  tilepro_expand_prologue ();
+  DONE;
+})
+
+(define_expand "epilogue"
+  [(const_int 0)]
+  ""
+{
+  tilepro_expand_epilogue (false);
+  DONE;
+})
+
+(define_expand "sibcall_epilogue"
+  [(const_int 0)]
+  ""
+{
+  tilepro_expand_epilogue (true);
+  DONE;
+})
+
+;;
+;; Stack manipulations
+;;
+
+;; An insn to allocate new stack space for dynamic use (e.g., alloca).
+(define_expand "allocate_stack"
+  [(set (match_operand 0 "register_operand" "")
+       (minus (reg 54) (match_operand 1 "nonmemory_operand" "")))
+   (set (reg 54)
+       (minus (reg 54) (match_dup 1)))]
+  ""
+  "tilepro_allocate_stack (operands[0], operands[1]); DONE;")
+
+;;
+;; Branches
+;;
+(define_expand "call"
+  [(parallel [(call (match_operand:SI 0 "call_operand" "")
+                   (match_operand 1 "" ""))
+              (use (reg:SI 54))
+             (clobber (reg:SI 55))])]
+  ""
+  "")
+
+(define_insn "*call_insn"
+  [(call (mem:SI (match_operand:SI 0 "call_address_operand" "rO,i"))
+        (match_operand 1 "" ""))
+   (use (reg:SI 54))
+   (clobber (reg:SI 55))]
+  ""
+  "@
+   jalr\t%r0
+   jal\t%p0"
+  [(set_attr "type" "X1,X1")])
+
+(define_expand "call_value"
+  [(parallel [(set (match_operand 0 "register_operand" "")
+                  (call (match_operand:SI 1 "call_operand" "")
+                        (match_operand 2 "" "")))
+              (use (reg:SI 54))
+             (clobber (reg:SI 55))])]
+  "")
+
+(define_insn "*call_value_insn"
+  [(set (match_operand 0 "register_operand" "=r,r")
+       (call (mem:SI (match_operand:SI 1 "call_address_operand" "rO,i"))
+             (match_operand 2 "" "")))
+   (use (reg:SI 54))
+   (clobber (reg:SI 55))]
+  ""
+  "@
+   jalr\t%r1
+   jal\t%p1"
+  [(set_attr "type" "X1,X1")])
+
+(define_expand "sibcall"
+  [(parallel [(call (match_operand:SI 0 "call_operand" "")
+                   (match_operand 1 "" ""))
+             (use (reg:SI 54))])]
+  ""
+  "")
+
+(define_insn "*sibcall_insn"
+  [(call (mem:SI (match_operand:SI 0 "call_address_operand" "rO,i"))
+        (match_operand 1 "" ""))
+   (use (reg:SI 54))]
+  "SIBLING_CALL_P(insn)"
+  "@
+   jr\t%r0
+   j\t%p0"
+  [(set_attr "type" "X1,X1")])
+
+(define_expand "sibcall_value"
+  [(parallel [(set (match_operand 0 "" "")
+                  (call (match_operand:SI 1 "call_operand" "")
+                        (match_operand:SI 2 "" "")))
+             (use (reg:SI 54))])]
+  ""
+  "")
+
+(define_insn "*sibcall_value"
+  [(set (match_operand 0 "" "")
+       (call (mem:SI (match_operand:SI 1 "call_address_operand" "rO,i"))
+             (match_operand:SI 2 "" "")))
+   (use (reg:SI 54))]
+  "SIBLING_CALL_P(insn)"
+  "@
+   jr\t%r1
+   j\t%p1"
+  [(set_attr "type" "X1,X1")])
+
+(define_insn "jump"
+  [(set (pc) (label_ref (match_operand 0 "" "")))]
+  ""
+  "j\t%l0"
+  [(set_attr "type" "X1")])
+
+(define_insn "indirect_jump"
+  [(set (pc) (match_operand:SI 0 "register_operand" "rO"))]
+  ""
+  "jr\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_expand "return"
+  [(parallel
+    [(return)
+     (use (reg:SI 55))])]
+  "tilepro_can_use_return_insn_p ()"
+  "")
+
+(define_insn "_return"
+  [(return)
+   (use (reg:SI 55))]
+  "reload_completed"
+  "jrp\tlr"
+  [(set_attr "type" "X1")])
+
+(define_expand "tablejump"
+  [(set (pc) (match_operand:SI 0 "register_operand" ""))
+   (use (label_ref (match_operand 1 "" "")))]
+  ""
+{
+  tilepro_expand_tablejump (operands[0], operands[1]);
+  DONE;
+})
+
+(define_insn "tablejump_aux"
+  [(set (pc) (match_operand:SI 0 "register_operand" "r"))
+   (use (label_ref (match_operand 1 "" "")))]
+  ""
+  "jr\t%0"
+  [(set_attr "type" "X1")])
+
+;; Call subroutine returning any type.
+(define_expand "untyped_call"
+  [(parallel [(call (match_operand 0 "" "")
+                   (const_int 0))
+             (match_operand 1 "" "")
+             (match_operand 2 "" "")])]
+  ""
+{
+  int i;
+
+  emit_call_insn (GEN_CALL (operands[0], const0_rtx, NULL, const0_rtx));
+
+  for (i = 0; i < XVECLEN (operands[2], 0); i++)
+    {
+      rtx set = XVECEXP (operands[2], 0, i);
+      emit_move_insn (SET_DEST (set), SET_SRC (set));
+    }
+
+  /* The optimizer does not know that the call sets the function value
+     registers we stored in the result block.  We avoid problems by
+     claiming that all hard registers are used and clobbered at this
+     point.  */
+  emit_insn (gen_blockage ());
+
+  DONE;
+})
+
+;; UNSPEC_VOLATILE is considered to use and clobber all hard registers
+;; and all of memory.  This blocks insns from being moved across this
+;; point.
+(define_insn "blockage"
+  [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)]
+  ""
+  "pseudo"
+  [(set_attr "type" "nothing")
+   (set_attr "length" "0")])
+
+;; Internal expanders to prevent memory ops from moving around frame
+;; allocation/deallocation.
+;;
+;; TODO: really this clobber should just clobber the frame memory.  Is
+;; this possibly by clobbering memory @ the sp reg (as alpha does?)
+;; or by explicitly setting the alias set to the frame?
+(define_insn "sp_adjust"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r")
+        (plus:SI
+         (match_operand:SI 1 "register_operand" "%r,r,r")
+         (match_operand:SI 2 "add_operand" "r,I,J")))
+   (clobber (mem:BLK (scratch)))]
+ ""
+ "@
+  add\t%0, %1, %2
+  addi\t%0, %1, %2
+  addli\t%0, %1, %2"
+ [(set_attr "type" "*,*,X01")])
+
+;; Used for move sp, r52, to pop a stack frame.  We need to make sure
+;; that stack frame memory operations have been issued before we do
+;; this.  TODO: see above TODO.
+(define_insn "sp_restore"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (match_operand:SI 1 "register_operand" "r"))
+   (clobber (mem:BLK (scratch)))]
+ ""
+ "move\t%0, %1")
+
+(define_insn "nop"
+  [(const_int 0)]
+  ""
+  "nop"
+  [(set_attr "type" "Y01")])
+
+\f
+;;
+;; Conditional branches
+;;
+
+(define_expand "cbranchsi4"
+  [(set (pc)
+       (if_then_else (match_operator 0 "ordered_comparison_operator"
+                      [(match_operand:SI 1 "reg_or_cint_operand")
+                       (match_operand:SI 2 "reg_or_cint_operand")])
+                     (label_ref (match_operand 3 ""))
+                     (pc)))]
+  ""
+  { tilepro_emit_conditional_branch (operands, SImode); DONE; })
+
+
+(define_expand "cbranchdi4"
+  [(set (pc)
+       (if_then_else (match_operator 0 "ordered_comparison_operator"
+                      [(match_operand:DI 1 "reg_or_cint_operand")
+                       (match_operand:DI 2 "reg_or_cint_operand")])
+                     (label_ref (match_operand 3 ""))
+                     (pc)))]
+  ""
+  { tilepro_emit_conditional_branch (operands, DImode); DONE; })
+  
+
+(define_insn "*bcc_normal"
+  [(set (pc)
+       (if_then_else
+        (match_operator 1 "signed_comparison_operator"
+                        [(match_operand:SI 2 "reg_or_0_operand" "rO")
+                         (const_int 0)])
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilepro_output_cbranch (insn, operands, false); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*bcc_reverse"
+  [(set (pc)
+       (if_then_else
+        (match_operator 1 "signed_comparison_operator"
+                        [(match_operand:SI 2 "reg_or_0_operand" "rO")
+                         (const_int 0)])
+        (pc)
+        (label_ref (match_operand 0 "" ""))))]
+  ""
+  { return tilepro_output_cbranch (insn, operands, true); }
+  [(set_attr "type" "X1_branch")])
+
+;; FIXME: the straight forward versions which do not include the
+;; subreg:QI does not match for some unknown reason.
+(define_insn "*bbs_normal"
+  [(set (pc)
+       (if_then_else
+        (ne (zero_extract:SI (subreg:QI 
+                              (match_operand:SI 1 "reg_or_0_operand" "rO") 0)
+                             (const_int 1)
+                             (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilepro_output_cbranch_with_opcode (insn, operands, "bbs", "bbns",
+                                           1, 0); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*bbc_normal"
+  [(set (pc)
+       (if_then_else
+        (eq (zero_extract:SI (subreg:QI
+                              (match_operand:SI 1 "reg_or_0_operand" "rO") 0)
+                             (const_int 1)
+                             (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))]
+  ""
+  { return tilepro_output_cbranch_with_opcode (insn, operands, "bbns", "bbs",
+                                           1, 0); }
+  [(set_attr "type" "X1_branch")])
+
+;; Note that __insn_mf() expands to this.
+(define_expand "memory_barrier"
+  [(set (match_dup 0)
+       (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
+  ""
+{
+  operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
+  MEM_VOLATILE_P (operands[0]) = 1;
+})
+
+(define_insn "*memory_barrier"
+  [(set (match_operand:BLK 0 "" "")
+       (unspec_volatile:BLK [(match_dup 0)] UNSPEC_MF))]
+  ""
+  "mf"
+  [(set_attr "type" "X1")])
+
+(define_insn "prefetch"
+  [(prefetch (match_operand:SI 0 "address_operand" "rO")
+             (match_operand:SI 1 "const_int_operand" "")
+             (match_operand:SI 2 "const_int_operand" ""))]
+  ""
+  "prefetch\t%r0"
+  [(set_attr "type" "Y2")])
+
+\f
+;;
+;; Network intrinsics
+;;
+
+;; Note the "pseudo" text is handled specially by the
+;; asm_output_opcode routine.  If the output is an empty string, the
+;; instruction would bypass the asm_output_opcode routine, bypassing
+;; the bundle handling code.
+(define_insn "tilepro_network_barrier"
+  [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
+  ""
+  "pseudo"
+  [(set_attr "type" "nothing")
+   (set_attr "length" "0")])
+
+(define_insn "*netreg_receive"
+  [(set (match_operand:SI 0 "nonimmediate_operand" "=r,U,m")
+        (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i")
+                            (reg:SI TILEPRO_NETORDER_REG)]
+                           UNSPEC_NETWORK_RECEIVE))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   move\t%0, %N1
+   sw\t%0, %N1
+   swadd\t%I0, %N1, %i0"
+  [(set_attr "type" "*,Y2,X1")])
+  
+(define_insn "*netreg_send"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i,i,i,i,i,i")
+     (match_operand:SI 1 "reg_or_cint_operand" "rO,I,J,K,N,P")
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   move\t%N0, %r1
+   movei\t%N0, %1
+   moveli\t%N0, %1
+   auli\t%N0, zero, %h1
+   addib\t%N0, zero, %j1
+   addih\t%N0, zero, %h1"
+  [(set_attr "type" "*,*,X01,X01,X01,X01")])
+
+(define_insn "*netreg_copy"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i")
+     (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                         (reg:SI TILEPRO_NETORDER_REG)]
+                        UNSPEC_NETWORK_RECEIVE)
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "move %N0, %N1")
+
+(define_expand "tilepro_idn0_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN0)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_idn1_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN1)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_idn_send"
+  [(parallel
+    [(unspec_volatile:SI [(const_int TILEPRO_NETREG_IDN0)
+                         (match_operand:SI 0 "reg_or_cint_operand" "")
+                         (reg:SI TILEPRO_NETORDER_REG)]
+                        UNSPEC_NETWORK_SEND)
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_sn_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_SN)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_sn_send"
+  [(parallel
+    [(unspec_volatile:SI [(const_int TILEPRO_NETREG_SN)
+                         (match_operand:SI 0 "reg_or_cint_operand" "")
+                         (reg:SI TILEPRO_NETORDER_REG)]
+                        UNSPEC_NETWORK_SEND)
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_udn0_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN0)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_udn1_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN1)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_udn2_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN2)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_udn3_receive"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN3)
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE))
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_expand "tilepro_udn_send"
+  [(parallel
+    [(unspec_volatile:SI [(const_int TILEPRO_NETREG_UDN0)
+                         (match_operand:SI 0 "reg_or_cint_operand" "")
+                         (reg:SI TILEPRO_NETORDER_REG)]
+                        UNSPEC_NETWORK_SEND)
+     (clobber (reg:SI TILEPRO_NETORDER_REG))])]
+  "")
+
+(define_insn "*netreg_add_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i,i,i,i")
+     (plus:SI (match_operand:SI 1 "reg_or_0_operand" "%rO,rO,rO,rO")
+              (match_operand:SI 2 "add_operand" "r,I,J,K"))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   add\t%N0, %r1, %2
+   addi\t%N0, %r1, %2
+   addli\t%N0, %r1, %2
+   auli\t%N0, %r1, %h2"
+  [(set_attr "type" "*,*,X01,X01")])
+
+(define_insn "*netreg_add_from_network"
+  [(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
+       (plus:SI
+        (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i,i")
+                             (reg:SI TILEPRO_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE)
+        (match_operand:SI 2 "add_operand" "rO,I,J,K")))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   add\t%0, %N1, %r2
+   addi\t%0, %N1, %2
+   addli\t%0, %N1, %2
+   auli\t%0, %N1, %h2"
+  [(set_attr "type" "*,*,X01,X01")])
+
+(define_insn "*netreg_add_from_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i,i,i,i")
+     (plus:SI
+      (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i,i,i")
+                          (reg:SI TILEPRO_NETORDER_REG)]
+                         UNSPEC_NETWORK_RECEIVE)
+      (match_operand:SI 2 "add_operand" "rO,I,J,K"))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   add\t%N0, %N1, %r2
+   addi\t%N0, %N1, %2
+   addli\t%N0, %N1, %2
+   auli\t%N0, %N1, %h2"
+  [(set_attr "type" "*,*,X01,X01")])
+
+(define_code_iterator netreg_binop
+  [minus])
+
+(define_insn "*netreg_binop_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i")
+    (netreg_binop:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO"))
+    (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%N0, %r1, %r2")
+
+(define_insn "*netreg_binop_from_network0"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (netreg_binop:SI
+        (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                             (reg:SI TILEPRO_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE)
+        (match_operand:SI 2 "reg_or_0_operand" "rO")))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%0, %N1, %r2")
+
+(define_insn "*netreg_binop_from_network1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (netreg_binop:SI
+         (match_operand:SI 1 "reg_or_0_operand" "rO")
+        (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
+                             (reg:SI TILEPRO_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE)))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%0, %r1, %N2")
+
+(define_insn "*netreg_binop_from_to_network0"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i")
+     (netreg_binop:SI
+      (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                          (reg:SI TILEPRO_NETORDER_REG)]
+                         UNSPEC_NETWORK_RECEIVE)
+      (match_operand:SI 2 "reg_or_0_operand" "rO"))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%N0, %N1, %r2")
+
+(define_insn "*netreg_binop_from_to_network1"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i")
+     (netreg_binop:SI
+      (match_operand:SI 1 "reg_or_0_operand" "rO")
+      (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
+                          (reg:SI TILEPRO_NETORDER_REG)]
+                         UNSPEC_NETWORK_RECEIVE))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%N0, %r1, %N2")
+
+(define_insn "*netreg_binop_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i,i")
+     (binop_with_imm:SI (match_operand:SI 1 "reg_or_0_operand" "rO,rO")
+                       (match_operand:SI 2 "reg_or_cint_operand" "I,rO"))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   <insn>i<u>\t%N0, %r1, %2
+   <insn><u>\t%N0, %r1, %r2")
+
+(define_insn "*netreg_binop_from_network"
+  [(set (match_operand:SI 0 "register_operand" "=r,r")
+       (binop_with_imm:SI
+         (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i")
+                             (reg:SI TILEPRO_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE)
+         (match_operand:SI 2 "reg_or_cint_operand" "I,rO")))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   <insn>i<u>\t%0, %N1, %2
+   <insn><u>\t%0, %N1, %r2")
+
+(define_insn "*netreg_binop_from_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i,i")
+     (binop_with_imm:SI
+      (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i,i")
+                          (reg:SI TILEPRO_NETORDER_REG)]
+                         UNSPEC_NETWORK_RECEIVE)
+      (match_operand:SI 2 "reg_or_cint_operand" "I,rO"))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "@
+   <insn>i<u>\t%N0, %N1, %2
+   <insn><u>\t%N0, %N1, %r2")
+
+(define_insn "*netreg_unop_to_network"
+  [(unspec_volatile:SI [(match_operand:SI 0 "netreg_operand" "i")
+                       (unop:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))
+                       (reg:SI TILEPRO_NETORDER_REG)]
+                      UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%N0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*netreg_unop_from_network"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unop:SI
+        (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                             (reg:SI TILEPRO_NETORDER_REG)]
+                            UNSPEC_NETWORK_RECEIVE)))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%0, %N1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*netreg_unop_from_to_network"
+  [(unspec_volatile:SI
+    [(match_operand:SI 0 "netreg_operand" "i")
+     (unop:SI
+      (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                          (reg:SI TILEPRO_NETORDER_REG)]
+                         UNSPEC_NETWORK_RECEIVE))
+     (reg:SI TILEPRO_NETORDER_REG)]
+    UNSPEC_NETWORK_SEND)
+   (clobber (reg:SI TILEPRO_NETORDER_REG))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "<insn>\t%N0, %N1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "*netreg_sadh_u_from_network0"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI
+        [(unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE)
+         (match_operand:SI 2 "reg_or_0_operand" "rO")]
+        UNSPEC_INSN_SADH_U))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "sadh_u\t%0, %N1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*netreg_sadh_u_from_network1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI
+        [(match_operand:SI 1 "reg_or_0_operand" "rO")
+         (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE)]
+        UNSPEC_INSN_SADH_U))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "sadh_u\t%0, %r1, %N2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*netreg_sadah_u_from_network0"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI
+        [(match_operand:SI 1 "reg_or_0_operand" "0")
+         (unspec_volatile:SI [(match_operand:SI 2 "netreg_operand" "i")
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE)
+         (match_operand:SI 3 "reg_or_0_operand" "rO")]
+        UNSPEC_INSN_SADAH_U))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "sadah_u\t%0, %N2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "*netreg_sadah_u_from_network1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI
+        [(match_operand:SI 1 "reg_or_0_operand" "0")
+         (match_operand:SI 2 "reg_or_0_operand" "rO")
+         (unspec_volatile:SI [(match_operand:SI 3 "netreg_operand" "i")
+                              (reg:SI TILEPRO_NETORDER_REG)]
+                             UNSPEC_NETWORK_RECEIVE)]
+        UNSPEC_INSN_SADAH_U))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  "sadah_u\t%0, %r2, %N3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_code_iterator mm_combiner [ior xor plus])
+
+;; This doesn't seem to match -- too complex for 'combine'?
+;;
+;; (define_insn "*netreg_mm_to_network"
+;;   [(unspec_volatile:SI
+;;     [(match_operand:SI 0 "netreg_operand" "i")
+;;      (mm_combiner:SI
+;;       (and:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+;;              (match_operand:SI 3 "const_int_operand" "n"))
+;;       (and:SI (match_operand:SI 2 "reg_or_0_operand" "rO")
+;;              (match_operand:SI 4 "const_int_operand" "n")))]
+;;     UNSPEC_NETWORK_SEND)]
+;;   "tilepro_bitfield_operand_p (INTVAL (operands[3]), NULL, NULL)
+;;    && INTVAL (operands[3]) == ~INTVAL (operands[4])"
+;;   "mm\t%N0, %r1, %r2, %M3"
+;;   [(set_attr "type" "X01")])
+
+;; FIXME: the straight forward versions which do not include the
+;; subreg:QI does not match for some unknown reason.
+(define_insn "*netreg_bbs_normal"
+  [(set (pc)
+       (if_then_else
+        (ne (zero_extract:SI
+             (subreg:QI 
+              (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                                   (reg:SI TILEPRO_NETORDER_REG)]
+                                  UNSPEC_NETWORK_RECEIVE) 0)
+              (const_int 1)
+              (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  { return tilepro_output_cbranch_with_opcode (insn, operands, "bbs", "bbns",
+                                           1, 1); }
+  [(set_attr "type" "X1_branch")])
+
+(define_insn "*netreg_bbc_normal"
+  [(set (pc)
+       (if_then_else
+        (eq (zero_extract:SI
+             (subreg:QI 
+              (unspec_volatile:SI [(match_operand:SI 1 "netreg_operand" "i")
+                                   (reg:SI TILEPRO_NETORDER_REG)]
+                                  UNSPEC_NETWORK_RECEIVE) 0)
+              (const_int 1)
+              (const_int 0))
+            (const_int 0))
+        (label_ref (match_operand 0 "" ""))
+        (pc)))
+   (clobber (reg:SI TILEPRO_NETORDER_REG))]
+  ""
+  { return tilepro_output_cbranch_with_opcode (insn, operands, "bbns", "bbns",
+                                           1, 1); }
+  [(set_attr "type" "X1_branch")])
+
+\f
+;;
+;; "__insn" Intrinsics (some expand directly to normal patterns above).
+;;
+
+(define_insn "insn_addlis"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec_volatile:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                             (match_operand:SI 2 "s16bit_cint_operand" "i")] 
+                            UNSPEC_INSN_ADDLIS))]
+  ""
+  "addlis\t%0, %r1, %2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_auli"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "s16bit_cint_operand" "i")] 
+                   UNSPEC_INSN_AULI))]
+  ""
+  "auli\t%0, %r1, %2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_drain"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_DRAIN)]
+  ""
+  "drain"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_icoh"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")] 
+                         UNSPEC_INSN_ICOH)]
+  ""
+  "icoh\t%r0"
+  [(set_attr "type" "X1")])
+
+
+(define_insn "insn_info"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "s8bit_cint_operand" "i")] 
+                         UNSPEC_INSN_INFO)]
+  ""
+  "info\t%0")
+
+(define_insn "insn_infol"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "s16bit_cint_operand" "i")] 
+                         UNSPEC_INSN_INFOL)]
+  ""
+  "infol\t%0"
+  [(set_attr "type" "X01")])
+
+;; loads
+
+(define_expand "insn_<load>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (sign_extend:SI
+        (mem:I12MODE (match_operand:SI 1 "address_operand" ""))))]
+  "")
+
+(define_expand "insn_<load>_u"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (zero_extend:SI
+        (mem:I12MODE (match_operand:SI 1 "address_operand" ""))))]
+  "")
+
+(define_insn "insn_<load>add"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI (mem:I12MODE (match_dup 3))))]
+  ""
+  "<load>add\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_<load>add_u"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (zero_extend:SI (mem:I12MODE (match_dup 3))))]
+  ""
+  "<load>add_u\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_expand "insn_lw"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (mem:SI (match_operand:SI 1 "address_operand" "")))]
+  "")
+
+(define_insn "insn_lwadd"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (mem:SI (match_dup 3)))]
+  ""
+  "lwadd\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_lwadd_na"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (mem:SI (and:SI (match_dup 3) (const_int -4))))]
+  ""
+  "lwadd_na\t%0, %1, %2"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_insn "insn_lw_na"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
+                        (const_int -4))))]
+  ""
+  "lw_na\t%0, %r1"
+  [(set_attr "type" "X1_2cycle")])
+
+;; L2 hits
+
+(define_insn "insn_<load>_L2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI
+        (unspec:I12MODE
+         [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
+         UNSPEC_LATENCY_L2)))]
+  ""
+  "<load>\t%0, %r1"
+  [(set_attr "type" "Y2_L2")])
+
+(define_insn "insn_<load>_u_L2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI
+        (unspec:I12MODE
+         [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
+         UNSPEC_LATENCY_L2)))]
+  ""
+  "<load>_u\t%0, %r1"
+  [(set_attr "type" "Y2_L2")])
+
+(define_insn "insn_<load>add_L2"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (sign_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_L2)))]
+  ""
+  "<load>add\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_<load>add_u_L2"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (zero_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_L2)))]
+  ""
+  "<load>add_u\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_lwadd_L2"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(mem:SI (match_dup 3))] UNSPEC_LATENCY_L2))]
+  ""
+  "lwadd\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_lwadd_na_L2"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(mem:SI (and:SI (match_dup 3) (const_int -4)))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "lwadd_na\t%0, %1, %2"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_lw_na_L2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
+                                   (const_int -4)))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "lw_na\t%0, %r1"
+  [(set_attr "type" "X1_L2")])
+
+(define_insn "insn_lw_L2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(mem:SI (match_operand:SI 1 "address_operand" "rO"))]
+                  UNSPEC_LATENCY_L2))]
+  ""
+  "lw\t%0, %r1"
+  [(set_attr "type" "Y2_L2")])
+
+;; L2 miss
+
+(define_insn "insn_<load>_miss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (sign_extend:SI
+        (unspec:I12MODE
+         [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
+         UNSPEC_LATENCY_MISS)))]
+  ""
+  "<load>\t%0, %r1"
+  [(set_attr "type" "Y2_miss")])
+
+(define_insn "insn_<load>_u_miss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (zero_extend:SI
+        (unspec:I12MODE
+         [(mem:I12MODE (match_operand:SI 1 "address_operand" "rO"))]
+         UNSPEC_LATENCY_MISS)))]
+  ""
+  "<load>_u\t%0, %r1"
+  [(set_attr "type" "Y2_miss")])
+
+(define_insn "insn_<load>add_miss"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (sign_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_MISS)))]
+  ""
+  "<load>add\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_<load>add_u_miss"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (zero_extend:SI (unspec:I12MODE [(mem:I12MODE (match_dup 3))]
+                                       UNSPEC_LATENCY_MISS)))]
+  ""
+  "<load>add_u\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_lwadd_miss"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(mem:SI (match_dup 3))] UNSPEC_LATENCY_MISS))]
+  ""
+  "lwadd\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_lwadd_na_miss"
+  [(set (match_operand:SI 1 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "1")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(mem:SI (and:SI (match_dup 3) (const_int -4)))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "lwadd_na\t%0, %1, %2"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_lw_na_miss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(mem:SI (and:SI (match_operand:SI 1 "address_operand" "rO")
+                                   (const_int -4)))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "lw_na\t%0, %r1"
+  [(set_attr "type" "X1_miss")])
+
+(define_insn "insn_lw_miss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(mem:SI (match_operand:SI 1 "address_operand" "rO"))]
+                  UNSPEC_LATENCY_MISS))]
+  ""
+  "lw\t%0, %r1"
+  [(set_attr "type" "Y2_miss")])
+
+;; end loads
+
+(define_insn "insn_mfspr"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec_volatile:SI [(match_operand:SI 1 "u15bit_cint_operand" "i")]
+                            UNSPEC_INSN_MFSPR))
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "mfspr\t%0, %1"
+  [(set_attr "type" "X1")])
+
+(define_insn "*mm"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (mm_combiner:SI
+        (and:SI (match_operand:SI 1 "reg_or_0_operand" "rO")
+                (match_operand:SI 3 "const_int_operand" "n"))
+        (and:SI (match_operand:SI 2 "reg_or_0_operand" "rO")
+                (match_operand:SI 4 "const_int_operand" "n"))))]
+  "tilepro_bitfield_operand_p (INTVAL (operands[3]), NULL, NULL)
+   && INTVAL (operands[3]) == ~INTVAL (operands[4])"
+  "mm\t%0, %r1, %r2, %M3"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_mm"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (ior:SI
+        (and:SI (match_operand:SI 1 "reg_or_cint_operand" "")
+                (match_operand:SI 3 "u5bit_cint_operand" ""))
+        (and:SI (match_operand:SI 2 "reg_or_cint_operand" "")
+                (match_operand:SI 4 "u5bit_cint_operand" ""))))]
+  ""
+{
+  int first, last, i;
+  HOST_WIDE_INT mask;
+
+  first = INTVAL (operands[3]) & 31;
+  last = INTVAL (operands[4]) & 31;
+
+  if (((last + 1) & 31) == first)
+    {
+      /* Handle pathological case of a mask that includes only the
+         first operand. The reordering code below can't handle this. */
+      emit_move_insn (operands[0], operands[1]);
+      DONE;
+    }
+
+  /* Canonicalize order by putting constant second, if any. */
+  if (CONST_INT_P (operands[1]))
+    {
+      int tmp_first;
+
+      rtx tmp = operands[1];
+      operands[1] = operands[2];
+      operands[2] = tmp;
+
+      /* Invert the bit range. */
+      tmp_first = first;
+      first = (last + 1) & 31;
+      last = (tmp_first - 1) & 31;
+    }
+
+  /* Convert the first/last bit range into a bit mask. */
+  mask = 0;
+
+  for (i = first; ; i = (i + 1) & 31)
+    {
+      mask |= ((HOST_WIDE_INT)1) << i;
+      if (i == last)
+        break;
+    }
+
+  mask = trunc_int_for_mode (mask, SImode);
+
+  operands[1] = force_reg (SImode, operands[1]);
+  operands[3] = GEN_INT (mask);
+  operands[4] = GEN_INT (~mask);
+
+  if (CONST_INT_P (operands[2]))
+    {
+      HOST_WIDE_INT inserted_bits = INTVAL (operands[2]) & ~mask;
+
+      if (inserted_bits == 0)
+        {
+         /* All inserted bits are zero. Use a bitwise AND. */
+          emit_insn (gen_andsi3 (operands[0], operands[1], operands[3]));
+          DONE;
+        }
+      else if (inserted_bits == ~mask)
+        {
+         /* All inserted bits are ones. Use a bitwise IOR if we can. */
+         if (satisfies_constraint_I (operands[4]))
+           {
+              emit_insn (gen_iorsi3 (operands[0], operands[1], operands[4]));
+              DONE;
+           }
+
+         /* Canonicalize to inserting -1 when setting all masked bits
+            to 1, to facilitate CSE. */
+         inserted_bits = -1;
+        }
+
+      /* Sign extend the inserted bits to make them easier to materialize
+         in a register, but only if the inserted bits (~mask) do not already
+        include the high bits. */
+      if ((~mask & 0x80000000) == 0)
+        {
+          int shift = sizeof (HOST_WIDE_INT) * 8 - first;
+          inserted_bits = (inserted_bits << shift) >> shift;
+        }
+
+      operands[2] = GEN_INT (inserted_bits);
+    }
+
+  operands[2] = force_reg (SImode, operands[2]);
+})
+
+(define_insn "insn_movelis"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec_volatile:SI [(match_operand:SI 1 "s16bit_cint_operand" "i")] 
+                            UNSPEC_INSN_MOVELIS))]
+  ""
+  "movelis\t%0, %1"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_mtspr"
+  [(unspec_volatile:SI [(match_operand:SI 0 "u15bit_cint_operand" "i")
+                        (match_operand:SI 1 "reg_or_0_operand" "rO")]
+                       UNSPEC_INSN_MTSPR)
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "mtspr\t%0, %r1"
+  [(set_attr "type" "X1")])
+
+(define_expand "insn_prefetch"
+  [(prefetch (match_operand:SI 0 "address_operand" "")
+             (const_int 0)
+             (const_int 2))])
+
+(define_expand "insn_prefetch_L1"
+  [(use (match_operand:SI 0 "address_operand" ""))]
+  ""
+{
+  /* Generate a volatile byte load to a dummy register. */
+  rtx mem = gen_rtx_MEM (QImode, operands[0]);
+  MEM_VOLATILE_P (mem) = 1;
+
+  emit_insn (gen_zero_extendqisi2 (gen_reg_rtx (SImode), mem));
+  DONE;
+})
+
+(define_expand "insn_s1a"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
+                          (const_int 2))
+                 (match_operand:SI 2 "reg_or_0_operand" "")))]
+  "")
+
+(define_expand "insn_s2a"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
+                          (const_int 4))
+                 (match_operand:SI 2 "reg_or_0_operand" "")))]
+  "")
+
+(define_expand "insn_s3a"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI (mult:SI (match_operand:SI 1 "reg_or_0_operand" "")
+                          (const_int 8))
+                 (match_operand:SI 2 "reg_or_0_operand" "")))]
+  "")
+
+(define_expand "insn_<store>"
+  [(set (mem:I12MODE (match_operand:SI 0 "address_operand" ""))
+        (match_operand:SI 1 "reg_or_0_operand" ""))]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], SImode, 0);
+})
+
+(define_expand "insn_sw"
+  [(set (mem:SI (match_operand:SI 0 "address_operand" ""))
+        (match_operand:SI 1 "reg_or_0_operand" ""))]
+  "")
+
+(define_expand "insn_<store>add"
+  [(parallel
+    [(set (match_operand:SI 0 "register_operand" "")
+         (plus:SI (match_operand:SI 3 "register_operand" "")
+                  (match_operand:SI 2 "s8bit_cint_operand" "")))
+     (set (mem:I12MODE (match_dup 3))
+         (match_operand:SI 1 "reg_or_0_operand" ""))])]
+  ""
+{
+  operands[1] = simplify_gen_subreg (<MODE>mode, operands[1], SImode, 0);
+})
+
+(define_insn "*insn_<store>add"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (plus:SI (match_operand:SI 3 "register_operand" "0")
+                (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (mem:I12MODE (match_dup 3))
+       (match_operand:I12MODE 1 "reg_or_0_operand" "rO"))]
+  ""
+  "<store>add\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_swadd"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (plus:SI (match_operand:SI 3 "register_operand" "0")
+                 (match_operand:SI 2 "s8bit_cint_operand" "i")))
+   (set (mem:SI (match_dup 3))
+        (match_operand:SI 1 "reg_or_0_operand" "rO"))]
+  ""
+  "swadd\t%0, %r1, %2"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_wh64"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")]
+                         UNSPEC_INSN_WH64)
+   (clobber (mem:BLK (const_int 0)))]
+  ""
+  "wh64\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_tns"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (mem:SI (match_operand:SI 1 "reg_or_0_operand" "rO")))
+   (set (mem:SI (match_dup 1)) (const_int 1))]
+  ""
+  "tns\t%0, %1"
+  [(set_attr "type" "X1")])
+
+;; insn_addb
+;; insn_addib
+;; insn_maxb_u
+;; insn_maxib_u
+;; insn_minb_u
+;; insn_minib_u
+;; insn_seqb
+;; insn_seqib
+;; insn_sltb
+;; insn_sltib
+;; insn_sltb_u
+;; insn_sltib_u
+(define_insn "<optab>v4qi3"
+  [(set (match_operand:V4QI 0 "register_operand" "=r,r")
+       (v1op_immed:V4QI
+        (match_operand:V4QI 1 "reg_or_0_operand" "<comm>rO,rO")
+        (match_operand:V4QI 2 "reg_or_v4s8bit_operand" "W,rO")))]
+  ""
+  "@
+   <insn>ib<u>\t%0, %r1, %j2
+   <insn>b<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_expand "insn_<insn>b<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v1op_immed:V4QI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
+                                      V4QImode, operands[1], operands[2], true);
+  DONE;
+})
+
+(define_expand "insn_<insn>ib<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v1op_immed:V4QI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "s8bit_cint_operand" "")))]
+  ""
+{
+  /* Tile out immediate and expand to general case. */
+  rtx n = tilepro_simd_int (operands[2], QImode);
+  tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
+                                      V4QImode, operands[1], n, true);
+  DONE;
+})
+
+;; insn_shlb
+;; insn_shlib
+;; insn_shrb
+;; insn_shrib
+;; insn_srab
+;; insn_sraib
+(define_insn "<optab>v4qi3"
+  [(set (match_operand:V4QI 0 "register_operand" "=r,r")
+       (any_shift:V4QI
+        (match_operand:V4QI 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+   <insn>ib<u>\t%0, %r1, %2
+   <insn>b<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_expand "insn_<insn>b<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (any_shift:V4QI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_u5bit_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
+                                   V4QImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_addh
+;; insn_addih
+;; insn_maxh
+;; insn_maxih
+;; insn_minh
+;; insn_minih
+;; insn_seqh
+;; insn_seqih
+;; insn_slth
+;; insn_sltih
+;; insn_slth_u
+;; insn_sltih_u
+(define_insn "<optab>v2hi3"
+  [(set (match_operand:V2HI 0 "register_operand" "=r,r")
+       (v2op_immed:V2HI
+        (match_operand:V2HI 1 "reg_or_0_operand" "<comm>rO,rO")
+        (match_operand:V2HI 2 "reg_or_v2s8bit_operand" "Y,rO")))]
+  ""
+  "@
+   <insn>ih<u>\t%0, %r1, %j2
+   <insn>h<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_expand "insn_<insn>h<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v2op_immed:V2HI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
+                                      V2HImode, operands[1], operands[2], true);
+  DONE;
+})
+
+(define_expand "insn_<insn>ih<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v2op_immed:V2HI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "s8bit_cint_operand" "")))]
+  ""
+{
+  /* Tile out immediate and expand to general case. */
+  rtx n = tilepro_simd_int (operands[2], HImode);
+  tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
+                                      V2HImode, operands[1], n, true);
+  DONE;
+})
+
+;; insn_shlh
+;; insn_shlih
+;; insn_shrh
+;; insn_shrih
+;; insn_srah
+;; insn_sraih
+(define_insn "<optab>v2hi3"
+  [(set (match_operand:V2HI 0 "register_operand" "=r,r")
+       (any_shift:V2HI
+        (match_operand:V2HI 1 "reg_or_0_operand" "rO,rO")
+        (match_operand:SI 2 "reg_or_u5bit_operand" "I,rO")))]
+  ""
+  "@
+   <insn>ih<u>\t%0, %r1, %2
+   <insn>h<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01,X01")])
+
+(define_expand "insn_<insn>h<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (any_shift:V2HI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
+                                      V2HImode, operands[1], operands[2], false);
+  DONE;
+})
+
+;; insn_addbs_u
+;; insn_subbs_u
+;; insn_subb
+;; insn_slteb
+;; insn_slteb_u
+;; insn_sneb
+(define_insn "<optab>v4qi3"
+  [(set (match_operand:V4QI 0 "register_operand" "=r")
+       (v1op:V4QI
+        (match_operand:V4QI 1 "reg_or_0_operand" "<comm>rO")
+        (match_operand:V4QI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "<insn>b<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_<insn>b<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v1op:V4QI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v4qi3, V4QImode, operands[0],
+                                      V4QImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_addhs
+;; insn_subhs
+;; insn_subh
+;; insn_slteh
+;; insn_slteh_u
+;; insn_sneh
+(define_insn "<optab>v2hi3"
+  [(set (match_operand:V2HI 0 "register_operand" "=r")
+       (v2op:V2HI
+        (match_operand:V2HI 1 "reg_or_0_operand" "<comm>rO")
+        (match_operand:V2HI 2 "reg_or_0_operand" "rO")))]
+  ""
+  "<insn>h<u>\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_<insn>h<u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (v2op:V2HI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (match_operand:SI 2 "reg_or_0_operand" "")))]
+  ""
+{
+  tilepro_expand_builtin_vector_binop (gen_<optab>v2hi3, V2HImode, operands[0],
+                                      V2HImode, operands[1], operands[2], true);
+  DONE;
+})
+
+;; insn_inthb
+
+;; Byte ordering of these vectors is endian dependent.  We concat
+;; right-to-left for little endian.  We concat and interleave in the
+;; opposite way gcc's vector patterns work, so we need to reverse the
+;; order of source operands.
+
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3,A2,A1,A0,B3,B2,B1,B0}
+;; => {A3,B3,A2,B2}
+(define_insn "vec_interleave_highv4qi"
+  [(set (match_operand:V4QI 0 "register_operand" "=r")
+       (vec_select:V4QI
+        (vec_concat:V8QI (match_operand:V4QI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V4QI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 2) (const_int 6)
+                   (const_int 3) (const_int 7)])))]
+  ""
+  "inthb\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_inthb"
+  [(match_operand:SI 0 "register_operand" "")
+   (match_operand:SI 1 "reg_or_0_operand" "")
+   (match_operand:SI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_interleave_highv4qi, V4QImode,
+                                       operands[0], V4QImode, operands[2],
+                                      operands[1], true);
+  DONE;
+})
+
+;; insn_intlb
+;;    {B3,B2,B1,B0} {A3,A2,A1,A0}
+;; => {A3,A2,A1,A0,B3,B2,B1,B0}
+;; => {A1,B1,A0,B0}
+(define_insn "vec_interleave_lowv4qi"
+  [(set (match_operand:V4QI 0 "register_operand" "=r")
+       (vec_select:V4QI
+        (vec_concat:V8QI (match_operand:V4QI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V4QI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 0) (const_int 4)
+                   (const_int 1) (const_int 5)])))]
+  ""
+  "intlb\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_intlb"
+  [(match_operand:SI 0 "register_operand" "")
+   (match_operand:SI 1 "reg_or_0_operand" "")
+   (match_operand:SI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_interleave_lowv4qi, V4QImode,
+                                      operands[0], V4QImode, operands[2],
+                                      operands[1], true);
+  DONE;
+})
+
+;; insn_inthh
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+;; => {A1,B1}
+(define_insn "vec_interleave_highv2hi"
+  [(set (match_operand:V2HI 0 "register_operand" "=r")
+       (vec_select:V2HI
+        (vec_concat:V4HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V2HI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 1) (const_int 3)])))]
+  ""
+  "inthh\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_inthh"
+  [(match_operand:SI 0 "register_operand" "")
+   (match_operand:SI 1 "reg_or_0_operand" "")
+   (match_operand:SI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_interleave_highv2hi, V2HImode,
+                                       operands[0], V2HImode, operands[2],
+                                      operands[1], true);
+  DONE;
+})
+
+;; insn_intlh
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+;; => {A0,B0}
+(define_insn "vec_interleave_lowv2hi"
+  [(set (match_operand:V2HI 0 "register_operand" "=r")
+       (vec_select:V2HI
+        (vec_concat:V4HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
+                         (match_operand:V2HI 2 "reg_or_0_operand" "rO"))
+        (parallel [(const_int 0) (const_int 2)])))]
+  ""
+  "intlh\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_intlh"
+  [(match_operand:SI 0 "register_operand" "")
+   (match_operand:SI 1 "reg_or_0_operand" "")
+   (match_operand:SI 2 "reg_or_0_operand" "")]
+  ""
+{
+  /* Our instruction interleaves opposite of the way vec_interleave
+     works, so we need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_interleave_lowv2hi, V2HImode,
+                                       operands[0], V2HImode, operands[2],
+                                      operands[1], true);
+  DONE;
+})
+
+;; insn_packbs_u
+;; insn_packlb
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+(define_insn "vec_pack_<pack_optab>_v2hi"
+  [(set (match_operand:V4QI 0 "register_operand" "=r")
+       (vec_concat:V4QI
+        (v2pack:V2QI (match_operand:V2HI 1 "reg_or_0_operand" "rO"))
+        (v2pack:V2QI (match_operand:V2HI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "<pack_insn>b<pack_u>\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_<pack_insn>b<pack_u>"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (vec_concat:V4QI
+        (v2pack:V2QI (match_operand:SI 1 "reg_or_0_operand" ""))
+        (v2pack:V2QI (match_operand:SI 2 "reg_or_0_operand" ""))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_pack_<pack_optab>_v2hi,
+                                       V4QImode, operands[0],
+                                       V2HImode, operands[2], operands[1], true);
+  DONE;
+})
+
+;; insn_packhb
+;;    {B1,B0} {A1,A0}
+;; => {A1,A0,B1,B0}
+(define_insn "vec_pack_hipart_v2hi"
+  [(set (match_operand:V4QI 0 "register_operand" "=r")
+       (vec_concat:V4QI
+        (truncate:V2QI
+         (ashiftrt:V2HI (match_operand:V2HI 1 "reg_or_0_operand" "rO")
+                        (const_int 8)))
+        (truncate:V2QI
+         (ashiftrt:V2HI (match_operand:V2HI 2 "reg_or_0_operand" "rO")
+                        (const_int 8)))))]
+  ""
+  "packhb\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_packhb"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (vec_concat:V4QI
+        (truncate:V2QI
+         (ashiftrt:V2HI (match_operand:SI 2 "reg_or_0_operand" "")
+                        (const_int 8)))
+        (truncate:V2QI
+         (ashiftrt:V2HI (match_operand:SI 1 "reg_or_0_operand" "")
+                        (const_int 8)))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_pack_hipart_v2hi,
+                                       V4QImode, operands[0],
+                                       V2HImode, operands[2], operands[1], true);
+  DONE;
+})
+
+;; insn_packhs
+;;    {B0} {A0}
+;; => {A0,B0}
+(define_insn "vec_pack_ssat_si"
+  [(set (match_operand:V2HI 0 "register_operand" "=r")
+       (vec_concat:V2HI
+        (ss_truncate:HI (match_operand:SI 1 "reg_or_0_operand" "rO"))
+        (ss_truncate:HI (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "packhs\t%0, %r2, %r1"
+  [(set_attr "type" "X01")])
+
+(define_expand "insn_packhs"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (vec_concat:V2HI
+        (ss_truncate:HI (match_operand:SI 2 "reg_or_0_operand" ""))
+        (ss_truncate:HI (match_operand:SI 1 "reg_or_0_operand" ""))))]
+  ""
+{
+  /* Our instruction concats opposite of the way vec_pack works, so we
+     need to reverse the source operands.  */
+  tilepro_expand_builtin_vector_binop (gen_vec_pack_ssat_si,
+                                       V2HImode, operands[0],
+                                       SImode, operands[2], operands[1], true);
+  DONE;
+})
+
+;; Rest of the intrinsics
+(define_insn "insn_adiffb_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_ADIFFB_U))]
+  ""
+  "adiffb_u\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_adiffh"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_ADIFFH))]
+  ""
+  "adiffh\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_avgb_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_AVGB_U))]
+  ""
+  "avgb_u\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_avgh"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_AVGH))]
+  ""
+  "avgh\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_bitx"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")]
+                    UNSPEC_INSN_BITX))]
+  ""
+  "bitx\t%0, %r1"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_crc32_32"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_CRC32_32))]
+  ""
+  "crc32_32\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_crc32_8"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_CRC32_8))]
+  ""
+  "crc32_8\t%0, %r1, %r2"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_dtlbpr"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")] 
+                         UNSPEC_INSN_DTLBPR)]
+  ""
+  "dtlbpr\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_dword_align"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_DWORD_ALIGN))]
+  ""
+  "dword_align\t%0, %r2, %r3"
+  [(set_attr "type" "X0")])
+
+(define_insn "insn_finv"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")] 
+                         UNSPEC_INSN_FINV)]
+  ""
+  "finv\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_flush"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")] 
+                         UNSPEC_INSN_FLUSH)]
+  ""
+  "flush\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_fnop"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_FNOP)]
+  ""
+  "fnop")
+
+(define_insn "insn_ill"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_ILL)]
+  ""
+  "ill"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_inv"
+  [(unspec_volatile:VOID [(match_operand:SI 0 "reg_or_0_operand" "rO")] 
+                         UNSPEC_INSN_INV)]
+  ""
+  "inv\t%r0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_lnk"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(const_int 0)] UNSPEC_INSN_LNK))]
+  ""
+  "lnk\t%0"
+  [(set_attr "type" "X1")])
+
+(define_insn "insn_mnzb"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MNZB))]
+  ""
+  "mnzb\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_mnzh"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MNZH))]
+  ""
+  "mnzh\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_mulhh_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHH_SS))]
+  ""
+  "mulhh_ss\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulhh_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHH_SU))]
+  ""
+  "mulhh_su\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhh_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHH_UU))]
+  ""
+  "mulhh_uu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulhha_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHHA_SS))]
+  ""
+  "mulhha_ss\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulhha_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHHA_SU))]
+  ""
+  "mulhha_su\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhha_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHHA_UU))]
+  ""
+  "mulhha_uu\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulhhsa_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHHSA_UU))]
+  ""
+  "mulhhsa_uu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhl_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHL_SS))]
+  ""
+  "mulhl_ss\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhl_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHL_SU))]
+  ""
+  "mulhl_su\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhl_us"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHL_US))]
+  ""
+  "mulhl_us\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhl_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHL_UU))]
+  ""
+  "mulhl_uu\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhla_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHLA_SS))]
+  ""
+  "mulhla_ss\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhla_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHLA_SU))]
+  ""
+  "mulhla_su\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhla_us"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHLA_US))]
+  ""
+  "mulhla_us\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhla_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHLA_UU))]
+  ""
+  "mulhla_uu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulhlsa_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULHLSA_UU))]
+  ""
+  "mulhlsa_uu\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulll_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")]
+                    UNSPEC_INSN_MULLL_SS))]
+  ""
+  "mulll_ss\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+  
+(define_insn "insn_mulll_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLL_SU))]
+  ""
+  "mulll_su\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mulll_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLL_UU))]
+  ""
+  "mulll_uu\t%0, %r1, %r2"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mullla_ss"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLLA_SS))]
+  ""
+  "mullla_ss\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mullla_su"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLLA_SU))]
+  ""
+  "mullla_su\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mullla_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLLA_UU))]
+  ""
+  "mullla_uu\t%0, %r2, %r3"
+  [(set_attr "type" "Y0_2cycle")])
+
+(define_insn "insn_mulllsa_uu"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MULLLSA_UU))]
+  ""
+  "mulllsa_uu\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_mzb"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MZB))]
+  ""
+  "mzb\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_mzh"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_MZH))]
+  ""
+  "mzh\t%0, %r1, %r2"
+  [(set_attr "type" "X01")])
+
+(define_insn "insn_nap"
+  [(unspec_volatile:VOID [(const_int 0)] UNSPEC_INSN_NAP)]
+  ""
+  "nap"
+  [(set_attr "type" "cannot_bundle")])
+
+(define_insn "insn_nor"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (and:SI (not:SI (match_operand:SI 1 "reg_or_0_operand" "rO"))
+                (not:SI (match_operand:SI 2 "reg_or_0_operand" "rO"))))]
+  ""
+  "nor\t%0, %r1, %r2")
+
+(define_insn "insn_sadab_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADAB_U))]
+  ""
+  "sadab_u\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_sadah"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADAH))]
+  ""
+  "sadah\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_sadah_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")
+                    (match_operand:SI 3 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADAH_U))]
+  ""
+  "sadah_u\t%0, %r2, %r3"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_sadb_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADB_U))]
+  ""
+  "sadb_u\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_sadh"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADH))]
+  ""
+  "sadh\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_sadh_u"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "rO")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_SADH_U))]
+  ""
+  "sadh_u\t%0, %r1, %r2"
+  [(set_attr "type" "X0_2cycle")])
+
+(define_insn "insn_tblidxb0"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_TBLIDXB0))]
+  ""
+  "tblidxb0\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb1"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_TBLIDXB1))]
+  ""
+  "tblidxb1\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb2"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_TBLIDXB2))]
+  ""
+  "tblidxb2\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+(define_insn "insn_tblidxb3"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec:SI [(match_operand:SI 1 "reg_or_0_operand" "0")
+                    (match_operand:SI 2 "reg_or_0_operand" "rO")] 
+                   UNSPEC_INSN_TBLIDXB3))]
+  ""
+  "tblidxb3\t%0, %r2"
+  [(set_attr "type" "Y0")])
+
+\f
+;;
+;; pic related instructions
+;;
+
+;; NOTE: We compute the label in this unusual way because if we place
+;; the label after the lnk, whether it is at the same address as the
+;; lnk will vary depending on whether the optimization level chooses to
+;; insert bundling braces.
+(define_insn "insn_lnk_and_label"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+        (unspec_volatile:SI [(match_operand:SI 1 "symbolic_operand" "")]
+                            UNSPEC_LNK_AND_LABEL))]
+  ""
+  "%1 = . + 8\n\tlnk\t%0"
+  [(set_attr "type" "X1")])
+
+(define_expand "addli_pcrel"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+        (match_operand:SI 1 "register_operand" "")
+        (const:SI
+         (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")
+                     (match_operand:SI 3 "symbolic_operand" "")]
+                    UNSPEC_PCREL_SYM))))]
+  "flag_pic")
+
+(define_expand "auli_pcrel"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI
+         (match_operand:SI 1 "reg_or_0_operand" "")
+         (high:SI
+         (const:SI
+          (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")
+                      (match_operand:SI 3 "symbolic_operand" "")]
+                      UNSPEC_PCREL_SYM)))))]
+  "flag_pic")
+
+(define_expand "add_got16"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
+                             UNSPEC_GOT16_SYM))))]
+  "flag_pic == 1")
+
+(define_expand "addhi_got32"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (plus:SI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (high:SI
+         (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
+                              UNSPEC_GOT32_SYM)))))]
+  "flag_pic == 2")
+
+(define_expand "addlo_got32"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+        (match_operand:SI 1 "reg_or_0_operand" "")
+        (const:SI (unspec:SI [(match_operand:SI 2 "symbolic_operand" "")]
+                             UNSPEC_GOT32_SYM))))]
+  "flag_pic == 2")
+
+\f
+;;
+;; TLS
+;;
+
+(define_expand "tls_gd_addhi"
+  [(set (match_operand:SI 0 "register_operand" "")
+       (plus:SI
+         (match_operand:SI 1 "reg_or_0_operand" "")
+         (high:SI
+         (const:SI (unspec:SI [(match_operand 2 "tls_symbolic_operand" "")]
+                              UNSPEC_TLS_GD)))))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_gd_addlo"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+         (match_operand:SI 1 "reg_or_0_operand" "")
+         (const:SI (unspec:SI [(match_operand 2 "tls_symbolic_operand" "")]
+                             UNSPEC_TLS_GD))))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_gd_call"
+  [(parallel
+    [(set (reg:SI 0)
+         (unspec:SI [(match_operand:SI 0 "tls_symbolic_operand" "")
+                    (reg:SI 0)]
+                    UNSPEC_TLS_GD_CALL))
+     (clobber (reg:SI 25))
+     (clobber (reg:SI 26))
+     (clobber (reg:SI 27))
+     (clobber (reg:SI 28))
+     (clobber (reg:SI 29))
+     (clobber (reg:SI 55))])]
+   ""
+{
+  cfun->machine->calls_tls_get_addr = true;
+})
+
+(define_insn "*tls_gd_call"
+  [(set (reg:SI 0)
+       (unspec:SI [(match_operand:SI 0 "tls_symbolic_operand" "")
+                   (reg:SI 0)]
+                  UNSPEC_TLS_GD_CALL))
+   (clobber (reg:SI 25))
+   (clobber (reg:SI 26))
+   (clobber (reg:SI 27))
+   (clobber (reg:SI 28))
+   (clobber (reg:SI 29))
+   (clobber (reg:SI 55))]
+  ""
+  "jal\ttls_gd_call(%0)"
+  [(set_attr "type" "X1")])
+
+(define_insn "tls_gd_add"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "register_operand" "r")
+                   (match_operand:SI 2 "tls_symbolic_operand" "")]
+                  UNSPEC_TLS_GD_ADD))]
+  "HAVE_AS_TLS"
+  "addi\t%0, %1, tls_gd_add(%2)")
+
+(define_insn "tls_ie_load"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec:SI [(match_operand:SI 1 "register_operand" "r")
+                   (match_operand:SI 2 "tls_symbolic_operand" "")]
+                  UNSPEC_TLS_IE_LOAD))]
+  "HAVE_AS_TLS"
+  "lw_tls\t%0, %1, tls_ie_load(%2)"
+  [(set_attr "type" "X1_2cycle")])
+
+(define_expand "tls_ie_addhi"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI
+         (match_operand:SI 1 "register_operand" "")
+         (high:SI
+         (const:SI (unspec:SI [(match_operand 2 "tls_ie_symbolic_operand" "")]
+                              UNSPEC_TLS_IE)))))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_ie_addlo"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+         (match_operand:SI 1 "register_operand" "")
+         (const:SI (unspec:SI [(match_operand 2 "tls_ie_symbolic_operand" "")]
+                             UNSPEC_TLS_IE))))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_le_addhi"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (plus:SI
+         (match_operand:SI 1 "register_operand" "")
+         (high:SI
+         (const:SI (unspec:SI [(match_operand 2 "tls_le_symbolic_operand" "")]
+                              UNSPEC_TLS_LE)))))]
+  "HAVE_AS_TLS")
+
+(define_expand "tls_le_addlo"
+  [(set (match_operand:SI 0 "register_operand" "")
+        (lo_sum:SI
+         (match_operand:SI 1 "register_operand" "")
+         (const:SI (unspec:SI [(match_operand 2 "tls_le_symbolic_operand" "")]
+                             UNSPEC_TLS_LE))))]
+  "HAVE_AS_TLS")
+
+\f
+;;
+;; Stack protector instructions.
+;;
+
+(define_expand "stack_protect_set"
+  [(set (match_operand 0 "nonautoincmem_operand" "")
+       (match_operand 1 "nonautoincmem_operand" ""))]
+  ""
+{
+#ifdef TARGET_THREAD_SSP_OFFSET
+  rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
+  rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
+  rtx ssp = gen_reg_rtx (Pmode);
+  
+  emit_insn (gen_rtx_SET (VOIDmode, ssp, ssp_addr));
+
+  operands[1] = gen_rtx_MEM (Pmode, ssp);
+#endif
+
+  emit_insn (gen_stack_protect_setsi (operands[0], operands[1]));
+
+  DONE;
+})
+
+(define_insn "stack_protect_setsi"
+  [(set (match_operand:SI 0 "nonautoincmem_operand" "=U")
+        (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")]
+                  UNSPEC_SP_SET))
+   (set (match_scratch:SI 2 "=&r") (const_int 0))]
+  ""
+  "lw\t%2, %1; { sw\t%0, %2; move\t%2, zero }"
+  [(set_attr "length" "16")
+   (set_attr "type" "cannot_bundle_3cycle")])
+
+
+(define_expand "stack_protect_test"
+  [(match_operand 0 "nonautoincmem_operand" "")
+   (match_operand 1 "nonautoincmem_operand" "")
+   (match_operand 2 "" "")]
+  ""
+{
+  rtx compare_result;
+  rtx bcomp, loc_ref;
+
+#ifdef TARGET_THREAD_SSP_OFFSET
+  rtx tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM);
+  rtx ssp_addr = gen_rtx_PLUS (Pmode, tp, GEN_INT (TARGET_THREAD_SSP_OFFSET));
+  rtx ssp = gen_reg_rtx (Pmode);
+  
+  emit_insn (gen_rtx_SET (VOIDmode, ssp, ssp_addr));
+
+  operands[1] = gen_rtx_MEM (Pmode, ssp);
+#endif
+
+  compare_result = gen_reg_rtx (SImode);
+
+  emit_insn (gen_stack_protect_testsi (compare_result, operands[0],
+                                      operands[1]));
+
+  bcomp = gen_rtx_NE (SImode, compare_result, const0_rtx);
+
+  loc_ref = gen_rtx_LABEL_REF (VOIDmode, operands[2]);
+
+  emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx,
+                              gen_rtx_IF_THEN_ELSE (VOIDmode, bcomp,
+                                                    loc_ref, pc_rtx)));
+
+  DONE;
+})
+
+(define_insn "stack_protect_testsi"
+  [(set (match_operand:SI 0 "register_operand" "=&r")
+        (unspec:SI [(match_operand:SI 1 "nonautoincmem_operand" "U")
+                    (match_operand:SI 2 "nonautoincmem_operand" "U")]
+                   UNSPEC_SP_TEST))
+   (set (match_scratch:SI 3 "=&r") (const_int 0))]
+  ""
+  "lw\t%0, %1; lw\t%3, %2; { seq\t%0, %0, %3; move\t%3, zero }"
+  [(set_attr "length" "24")
+   (set_attr "type" "cannot_bundle_4cycle")])
+
diff --git a/gcc/config/tilepro/tilepro.opt b/gcc/config/tilepro/tilepro.opt
new file mode 100644 (file)
index 0000000..2ab54e0
--- /dev/null
@@ -0,0 +1,37 @@
+; Options for the TILEPro port of the compiler.
+; Copyright (C) 2011, 2012
+; Free Software Foundation, Inc.
+; Contributed by Walter Lee (walt@tilera.com)
+;
+; This file is part of GCC.
+;
+; GCC is free software; you can redistribute it and/or modify it under
+; the terms of the GNU General Public License as published by the Free
+; Software Foundation; either version 3, or (at your option) any later
+; version.
+;
+; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+; WARRANTY; without even the implied warranty of MERCHANTABILITY or
+; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+; for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with GCC; see the file COPYING3.  If not see
+; <http://www.gnu.org/licenses/>.
+
+m32
+Target Report RejectNegative
+Compile with 32 bit longs and pointers, which is the only supported
+behavior and thus the flag is ignored.
+
+mcpu=
+Target RejectNegative Joined Enum(tilepro_cpu) Var(tilepro_cpu) Init(0)
+-mcpu=CPU      Use features of and schedule code for given CPU
+
+Enum
+Name(tilepro_cpu) Type(int)
+Known TILEPro CPUs (for use with the -mcpu= option):
+
+EnumValue
+Enum(tilepro_cpu) String(tilepro) Value(0)
+
index 468369aa0a760b3c360f3c95783c47de62b297c3..15a9ece5e6fd6e2b246bd65414029854b4a199c9 100755 (executable)
@@ -23491,6 +23491,37 @@ foo:   .long   25
        xor     %l1, %tle_lox10(foo), %o5
        ld      [%g7 + %o5], %o1"
        ;;
+  tilepro*-*-*)
+      conftest_s='
+       .section ".tdata","awT",@progbits
+foo:   .long   25
+       .text
+       addli   r0, zero, tls_gd(foo)
+       auli    r0, zero, tls_gd_ha16(foo)
+       addli   r0, r0, tls_gd_lo16(foo)
+       jal     __tls_get_addr
+       addli   r0, zero, tls_ie(foo)
+       auli    r0, r0, tls_ie_ha16(foo)
+       addli   r0, r0, tls_ie_lo16(foo)'
+       tls_first_major=2
+       tls_first_minor=22
+       tls_as_opt="--fatal-warnings"
+       ;;
+  tilegx*-*-*)
+      conftest_s='
+       .section ".tdata","awT",@progbits
+foo:   .long   25
+       .text
+       shl16insli r0, zero, hw0_last_tls_gd(foo)
+       shl16insli r0, zero, hw1_last_tls_gd(foo)
+       shl16insli r0, r0,   hw0_tls_gd(foo)
+       jal        __tls_get_addr
+       shl16insli r0, zero, hw1_last_tls_ie(foo)
+       shl16insli r0, r0,   hw0_tls_ie(foo)'
+       tls_first_major=2
+       tls_first_minor=22
+       tls_as_opt="--fatal-warnings"
+       ;;
   xtensa*-*-*)
     conftest_s='
        .section ".tdata","awT",@progbits
@@ -25835,7 +25866,7 @@ esac
 # version to the per-target configury.
 case "$cpu_type" in
   alpha | arm | avr | bfin | cris | i386 | m32c | m68k | microblaze | mips \
-  | pa | rs6000 | score | sparc | spu | xstormy16 | xtensa)
+  | pa | rs6000 | score | sparc | spu | tilegx | tilepro | xstormy16 | xtensa)
     insn="nop"
     ;;
   ia64 | s390)
index 1e6f2636fba0c30f7ffe150d3975001848bfeaca..5d6aa5d3c280ed05dd95a9253de80ea3ac675925 100644 (file)
@@ -3125,6 +3125,37 @@ foo:     .long   25
        xor     %l1, %tle_lox10(foo), %o5
        ld      [%g7 + %o5], %o1"
        ;;
+  tilepro*-*-*)
+      conftest_s='
+       .section ".tdata","awT",@progbits
+foo:   .long   25
+       .text
+       addli   r0, zero, tls_gd(foo)
+       auli    r0, zero, tls_gd_ha16(foo)
+       addli   r0, r0, tls_gd_lo16(foo)
+       jal     __tls_get_addr
+       addli   r0, zero, tls_ie(foo)
+       auli    r0, r0, tls_ie_ha16(foo)
+       addli   r0, r0, tls_ie_lo16(foo)'
+       tls_first_major=2
+       tls_first_minor=22
+       tls_as_opt="--fatal-warnings"
+       ;;
+  tilegx*-*-*)
+      conftest_s='
+       .section ".tdata","awT",@progbits
+foo:   .long   25
+       .text
+       shl16insli r0, zero, hw0_last_tls_gd(foo)
+       shl16insli r0, zero, hw1_last_tls_gd(foo)
+       shl16insli r0, r0,   hw0_tls_gd(foo)
+       jal        __tls_get_addr
+       shl16insli r0, zero, hw1_last_tls_ie(foo)
+       shl16insli r0, r0,   hw0_tls_ie(foo)'
+       tls_first_major=2
+       tls_first_minor=22
+       tls_as_opt="--fatal-warnings"
+       ;;
   xtensa*-*-*)
     conftest_s='
        .section ".tdata","awT",@progbits
@@ -4071,7 +4102,7 @@ esac
 # version to the per-target configury.
 case "$cpu_type" in
   alpha | arm | avr | bfin | cris | i386 | m32c | m68k | microblaze | mips \
-  | pa | rs6000 | score | sparc | spu | xstormy16 | xtensa)
+  | pa | rs6000 | score | sparc | spu | tilegx | tilepro | xstormy16 | xtensa)
     insn="nop"
     ;;
   ia64 | s390)
index 37e24f06a1d751adcc97afc8cd7bed37b61f143a..face894ff484176e004c29cab7fe3f3701dcaa69 100644 (file)
@@ -394,6 +394,9 @@ of testing and bug fixing, particularly of GCC configury code.
 @item
 Steve Holmgren for MachTen patches.
 
+@item
+Mat Hostetter for work on the TILE-Gx and TILEPro ports.
+
 @item
 Jan Hubicka for his x86 port improvements.
 
@@ -505,6 +508,9 @@ entire egcs project and GCC 2.95, rolling out snapshots and releases,
 handling merges from GCC2, reviewing tons of patches that might have
 fallen through the cracks else, and random but extensive hacking.
 
+@item
+Walter Lee for work on the TILE-Gx and TILEPro ports.
+
 @item
 Marc Lehmann for his direction via the steering committee and helping
 with analysis and improvements of x86 performance.
index ae50ae0579db1572f6f8ddcc443e8e8d33a2b40d..4c7196080a193207738eb259c1bb757e94ea3a43 100644 (file)
@@ -8531,6 +8531,8 @@ instructions, but allow the compiler to schedule those calls.
 * SPARC VIS Built-in Functions::
 * SPU Built-in Functions::
 * TI C6X Built-in Functions::
+* TILE-Gx Built-in Functions::
+* TILEPro Built-in Functions::
 @end menu
 
 @node Alpha Built-in Functions
@@ -13718,6 +13720,78 @@ int _abs2 (int)
 
 @end smallexample
 
+@node TILE-Gx Built-in Functions
+@subsection TILE-Gx Built-in Functions
+
+GCC provides intrinsics to access every instruction of the TILE-Gx
+processor.  The intrinsics are of the form:
+
+@smallexample
+
+unsigned long long __insn_@var{op} (...)
+
+@end smallexample
+
+Where @var{op} is the name of the instruction.  Refer to the ISA manual
+for the complete list of instructions.
+
+GCC also provides intrinsics to directly access the network registers.
+The intrinsics are:
+
+@smallexample
+
+unsigned long long __tile_idn0_receive (void)
+unsigned long long __tile_idn1_receive (void)
+unsigned long long __tile_udn0_receive (void)
+unsigned long long __tile_udn1_receive (void)
+unsigned long long __tile_udn2_receive (void)
+unsigned long long __tile_udn3_receive (void)
+void __tile_idn_send (unsigned long long)
+void __tile_udn_send (unsigned long long)
+
+@end smallexample
+
+The intrinsic @code{void __tile_network_barrier (void)} is used to
+guarantee that no network operatons before it will be reordered with
+those after it.
+
+@node TILEPro Built-in Functions
+@subsection TILEPro Built-in Functions
+
+GCC provides intrinsics to access every instruction of the TILEPro
+processor.  The intrinsics are of the form:
+
+@smallexample
+
+unsigned __insn_@var{op} (...)
+
+@end smallexample
+
+Where @var{op} is the name of the instruction.  Refer to the ISA manual
+for the complete list of instructions.
+
+GCC also provides intrinsics to directly access the network registers.
+The intrinsics are:
+
+@smallexample
+
+unsigned __tile_idn0_receive (void)
+unsigned __tile_idn1_receive (void)
+unsigned __tile_sn_receive (void)
+unsigned __tile_udn0_receive (void)
+unsigned __tile_udn1_receive (void)
+unsigned __tile_udn2_receive (void)
+unsigned __tile_udn3_receive (void)
+void __tile_idn_send (unsigned)
+void __tile_sn_send (unsigned)
+void __tile_udn_send (unsigned)
+
+@end smallexample
+
+The intrinsic @code{void __tile_network_barrier (void)} is used to
+guarantee that no network operatons before it will be reordered with
+those after it.
+
 @node Target Format Checks
 @section Format Checks Specific to Particular Target Machines
 
index 4a85397b702a98491bec825c8d7ba5945b652307..f1f2a6ca87772ba7617aaa2bdcadb6fbf487d95d 100644 (file)
@@ -3096,6 +3096,10 @@ information are.
 @item
 @uref{#c6x-x-x,,c6x-*-*}
 @item
+@uref{#tilegx-x-linux,,tilegx-*-linux*}
+@item
+@uref{#tilepro-x-linux,,tilepro-*-linux*}
+@item
 @uref{#x-x-vxworks,,*-*-vxworks*}
 @item
 @uref{#x86-64-x-x,,x86_64-*-*, amd64-*-*}
@@ -4457,6 +4461,22 @@ This is a synonym for @samp{sparc64-*-solaris2*}.
 
 The C6X family of processors. This port requires binutils-2.22 or newer.
 
+@html
+<hr />
+@end html
+@heading @anchor{tilegx-*-linux}tilegx-*-linux*
+
+The TILE-Gx processor running GNU/Linux.  This port requires
+binutils-2.22 or newer.
+
+@html
+<hr />
+@end html
+@heading @anchor{tilepro-*-linux}tilepro-*-linux*
+
+The TILEPro processor running GNU/Linux.  This port requires
+binutils-2.22 or newer.
+
 @html
 <hr />
 @end html
index 6c61e53c1722efa6c1e5c2437c34ebb19ca9380b..9f3af4cff30229cb09880de8d920f5b85c75fa30 100644 (file)
@@ -923,6 +923,12 @@ See RS/6000 and PowerPC Options.
 @emph{System V Options}
 @gccoptlist{-Qy  -Qn  -YP,@var{paths}  -Ym,@var{dir}}
 
+@emph{TILE-Gx Options}
+@gccoptlist{-mcpu=CPU -m32 -m64}
+
+@emph{TILEPro Options}
+@gccoptlist{-mcpu=CPU -m32}
+
 @emph{V850 Options}
 @gccoptlist{-mlong-calls  -mno-long-calls  -mep  -mno-ep @gol
 -mprolog-function  -mno-prolog-function  -mspace @gol
@@ -10349,6 +10355,8 @@ platform.
 * SPARC Options::
 * SPU Options::
 * System V Options::
+* TILE-Gx Options::
+* TILEPro Options::
 * V850 Options::
 * VAX Options::
 * VxWorks Options::
@@ -18479,6 +18487,46 @@ The assembler uses this option.
 @c the generic assembler that comes with Solaris takes just -Ym.
 @end table
 
+@node TILE-Gx Options
+@subsection TILE-Gx Options
+@cindex TILE-Gx options
+
+These @samp{-m} options are supported on the TILE-Gx:
+
+@table @gcctabopt
+@item -mcpu=@var{name}
+@opindex mcpu
+Selects the type of CPU to be targeted.  Currently the only supported
+type is @samp{tilegx}.
+
+@item -m32
+@itemx -m64
+@opindex m32
+@opindex m64
+Generate code for a 32-bit or 64-bit environment.  The 32-bit
+environment sets int, long, and pointer to 32 bits.  The 64-bit
+environment sets int to 32 bits and long and pointer to 64 bits.
+@end table
+
+@node TILEPro Options
+@subsection TILEPro Options
+@cindex TILEPro options
+
+These @samp{-m} options are supported on the TILEPro:
+
+@table @gcctabopt
+@item -mcpu=@var{name}
+@opindex mcpu
+Selects the type of CPU to be targeted.  Currently the only supported
+type is @samp{tilepro}.
+
+@item -m32
+@opindex m32
+Generate code for a 32-bit environment, which sets int, long, and
+pointer to 32 bits.  This is the only supported behavior so the flag
+is essentially ignored.
+@end table
+
 @node V850 Options
 @subsection V850 Options
 @cindex V850 Options
index 92c1b28137d2cf13c68cab92ff1c7c9706d0c604..c4eb355e253719551b394c03acac35645a773fcb 100644 (file)
@@ -3576,6 +3576,154 @@ Register B14 (aka DP).
 
 @end table
 
+@item TILE-Gx---@file{config/tilegx/constraints.md}
+@table @code
+@item R00
+@itemx R01
+@itemx R02
+@itemx R03
+@itemx R04
+@itemx R05
+@itemx R06
+@itemx R07
+@itemx R08
+@itemx R09
+@itemx R010
+Each of these represents a register constraint for an individual
+register, from r0 to r10.
+
+@item I
+Signed 8-bit integer constant.
+
+@item J
+Signed 16-bit integer constant.
+
+@item K
+Unsigned 16-bit integer constant.
+
+@item L
+Integer constant that fits in one signed byte when incremented by one
+(@minus{}129 @dots{} 126).
+
+@item m
+Memory operand.  If used together with @samp{<} or @samp{>}, the
+operand can have postincrement which requires printing with @samp{%In}
+and @samp{%in} on TILE-Gx.  For example:
+
+@smallexample
+asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val));
+@end smallexample
+
+@item M
+A bit mask suitable for the BFINS instruction.
+
+@item N
+Integer constant that is a byte tiled out eight times.
+
+@item O
+The integer zero constant.
+
+@item P
+Integer constant that is a sign-extended byte tiled out as four shorts.
+
+@item Q
+Integer constant that fits in one signed byte when incremented
+(@minus{}129 @dots{} 126), but excluding -1.
+
+@item S
+Integer constant that has all 1 bits consecutive and starting at bit 0.
+
+@item T
+A 16-bit fragment of a got, tls, or pc-relative reference.
+
+@item U
+Memory operand except postincrement.  This is roughly the same as
+@samp{m} when not used together with @samp{<} or @samp{>}.
+
+@item W
+An 8-element vector constant with identical elements.
+
+@item Y
+A 4-element vector constant with identical elements.
+
+@item Z0
+The integer constant 0xffffffff.
+
+@item Z1
+The integer constant 0xffffffff00000000.
+
+@end table
+
+@item TILEPro---@file{config/tilepro/constraints.md}
+@table @code
+@item R00
+@itemx R01
+@itemx R02
+@itemx R03
+@itemx R04
+@itemx R05
+@itemx R06
+@itemx R07
+@itemx R08
+@itemx R09
+@itemx R010
+Each of these represents a register constraint for an individual
+register, from r0 to r10.
+
+@item I
+Signed 8-bit integer constant.
+
+@item J
+Signed 16-bit integer constant.
+
+@item K
+Nonzero integer constant with low 16 bits zero.
+
+@item L
+Integer constant that fits in one signed byte when incremented by one
+(@minus{}129 @dots{} 126).
+
+@item m
+Memory operand.  If used together with @samp{<} or @samp{>}, the
+operand can have postincrement which requires printing with @samp{%In}
+and @samp{%in} on TILEPro.  For example:
+
+@smallexample
+asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val));
+@end smallexample
+
+@item M
+A bit mask suitable for the MM instruction.
+
+@item N
+Integer constant that is a byte tiled out four times.
+
+@item O
+The integer zero constant.
+
+@item P
+Integer constant that is a sign-extended byte tiled out as two shorts.
+
+@item Q
+Integer constant that fits in one signed byte when incremented
+(@minus{}129 @dots{} 126), but excluding -1.
+
+@item T
+A symbolic operand, or a 16-bit fragment of a got, tls, or pc-relative
+reference.
+
+@item U
+Memory operand except postincrement.  This is roughly the same as
+@samp{m} when not used together with @samp{<} or @samp{>}.
+
+@item W
+A 4-element vector constant with identical elements.
+
+@item Y
+A 2-element vector constant with identical elements.
+
+@end table
+
 @item Xtensa---@file{config/xtensa/constraints.md}
 @table @code
 @item a
index 09662d837436d45c781c8822236eeb0829181f8b..05a6af0e1bc0e4ca9d95ee5a86ed0232df5991a9 100644 (file)
@@ -1,3 +1,12 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * g++.dg/other/PR23205.C: Disable test on tile.
+       * g++.dg/other/pr23205-2.C: Disable test on tile.
+       * gcc.dg/20020312-2.c: Add a condition for __tile__.
+       * gcc.dg/20040813-1.c: Disable test on tile.
+       * gcc.dg/lower-subreg-1.c: Disable test on tilegx.
+       * gcc.misc-tests/linkage.exp: Handle tilegx.
+
 2012-02-14  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/52210
index 338079fbd930ec89a462b6a5aaee640f5fce2e21..a31fc1d773ddf0b21bdb219be2646c574923d7a5 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks } { "*" } { "" } } */
+/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks } { "*" } { "" } } */
 /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types" } */
 
 const int foobar = 4;
index a4333b386302d953aa1820382ca766b6a7918f6b..fbd16dfab5836e4f0ceb987cbf42271d3728c63f 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* } { "*" } { "" } } */
+/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* } { "*" } { "" } } */
 /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types -ftoplevel-reorder" } */
 
 const int foobar = 4;
index 6e568eddb909b86b3b02d41e2779ff7a4e5f7892..768e17e64cda63d12b75f3f40bbddffe4b1b1266 100644 (file)
@@ -66,6 +66,8 @@ extern void abort (void);
 # define PIC_REG  "12"
 #elif defined(__sparc__)
 # define PIC_REG  "l7"
+#elif defined(__tile__)
+# define PIC_REG "r51"
 #elif defined(__TMS320C6X__)
 # define PIC_REG "B14"
 #elif defined(__v850)
index bf87f4172cf5fd218d368a8858d775987b4bee03..e16344164d59f5a09a7e083669132eaac4c54d7e 100644 (file)
@@ -2,7 +2,7 @@
 /* Contributed by Devang Patel  <dpatel@apple.com>  */
 
 /* { dg-do compile } */
-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } } */
+/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks* } { "*" } { "" } } */
 /* { dg-options "-gstabs" } */
 
 int
index 33be4c4eaccfaf622e57caa37af85d7e650c01ed..12a20adfc3807ff2b01bbf265b7570ba39809fd7 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { { { ! mips64 } && { ! ia64-*-* } } && { ! spu-*-* } } } } */
+/* { dg-do compile { target { { { ! mips64 } && { ! ia64-*-* } } && { ! spu-*-* } && { ! tilegx-*-* } } } } */
 /* { dg-options "-O -fdump-rtl-subreg1" } */
 /* { dg-skip-if "" { { i?86-*-* x86_64-*-* } && x32 } { "*" } { "" } } */
 /* { dg-require-effective-target ilp32 } */
index f6702e4d024e03ff97ff661c5412092894aef4ae..887f31b21ac9722a96c16bc5be40bae87c1fa46c 100644 (file)
@@ -88,6 +88,13 @@ if { [isnative] && ![is_remote host] } then {
             } elseif [ string match "*ppc" $file_string ] {
                 set native_cflags "-m32"
             }
+        } elseif [istarget "tilegx-*-linux*"] {
+           set file_string [exec file "linkage-x.o"]
+           if [ string match "*64-bit*" $file_string ] {
+               set native_cflags "-m64"
+           } elseif [ string match "*32-bit*" $file_string ] {
+               set native_cflags "-m32"
+           }
         } elseif [istarget "*86*-*-darwin*"] {
           set file_string [exec file "linkage-x.o"]
           if [ string match "*64*" $file_string ] {
index 4fc1ec8728b635cf8b4e9a915291c84936015928..a8a949c7d91ad0b8c220ed6f84a26efe678c0fe5 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * configure.ac: Require 64-bit hwint for tilegx and tilepro.
+       * configure: Regenerate.
+
 2012-01-09  Richard Guenther  <rguenther@suse.de>
 
        * macro.c (_cpp_builtin_macro_text): Remove unused variable map.
index 7ea42c54787e0aa0410acb5736554f14a2c116de..fb5654de54d8ca398aebfa9f0750d35612d13cbc 100755 (executable)
@@ -7382,7 +7382,8 @@ case $target in
        s390*-*-* | \
        sparc*-*-* | \
        spu-*-* | \
-       sh[123456789lbe]*-*-* | sh-*-*)
+       sh[123456789lbe]*-*-* | sh-*-* | \
+       tilegx-*-* | tilepro-*-* )
                need_64bit_hwint=yes ;;
        *)
                need_64bit_hwint=no ;;
index 83d5bb6e827bbd1ce99dff3a458e7d05bf634a27..070ab633d801043c1436673443828bbf2bf0aa6b 100644 (file)
@@ -162,7 +162,8 @@ case $target in
        s390*-*-* | \
        sparc*-*-* | \
        spu-*-* | \
-       sh[123456789lbe]*-*-* | sh-*-*)
+       sh[123456789lbe]*-*-* | sh-*-* | \
+       tilegx-*-* | tilepro-*-* )
                need_64bit_hwint=yes ;;
        *)
                need_64bit_hwint=no ;;
index 4a974401d6852a02e9a9058318140780a4540083..85b39cf7dfa80371c3ea6bb0206a36f8180da960 100644 (file)
@@ -1,3 +1,21 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * config.host: Handle tilegx and tilepro.
+       * config/tilegx/sfp-machine.h: New file.
+       * config/tilegx/sfp-machine32.h: New file.
+       * config/tilegx/sfp-machine64.h: New file.
+       * config/tilegx/t-crtstuff: New file.
+       * config/tilegx/t-softfp: New file.
+       * config/tilegx/t-tilegx: New file.
+       * config/tilepro/atomic.c: New file.
+       * config/tilepro/atomic.h: New file.
+       * config/tilepro/linux-unwind.h: New file.
+       * config/tilepro/sfp-machine.h: New file.
+       * config/tilepro/softdivide.c: New file.
+       * config/tilepro/softmpy.S: New file.
+       * config/tilepro/t-crtstuff: New file.
+       * config/tilepro/t-tilepro: New file.
+
 2012-02-07  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR libstdc++/51296
index da845b91743c30c8c2bc3f00f33ea6a6b389b567..5ad27caa17236940dec8cac6f6b6ac93d52a4107 100644 (file)
@@ -1090,6 +1090,14 @@ tic6x-*-elf)
        extra_parts="$extra_parts crtbeginS.o crtendS.o crti.o crtn.o"
        unwind_header=config/c6x/unwind-c6x.h
        ;;
+tilegx-*-linux*)
+       tmake_file="${tmake_file} tilegx/t-crtstuff t-softfp-sfdf tilegx/t-softfp t-softfp tilegx/t-tilegx"
+       md_unwind_header=tilepro/linux-unwind.h
+        ;;
+tilepro-*-linux*)
+       tmake_file="${tmake_file} tilepro/t-crtstuff t-softfp-sfdf t-softfp tilepro/t-tilepro"
+       md_unwind_header=tilepro/linux-unwind.h
+        ;;
 v850*-*-*)
        tmake_file="v850/t-v850 t-fdpbit"
        ;;
diff --git a/libgcc/config/tilegx/sfp-machine.h b/libgcc/config/tilegx/sfp-machine.h
new file mode 100644 (file)
index 0000000..1ce84e1
--- /dev/null
@@ -0,0 +1,5 @@
+#ifdef __tilegx32__
+#include "config/tilegx/sfp-machine32.h"
+#else
+#include "config/tilegx/sfp-machine64.h"
+#endif
diff --git a/libgcc/config/tilegx/sfp-machine32.h b/libgcc/config/tilegx/sfp-machine32.h
new file mode 100644 (file)
index 0000000..3784100
--- /dev/null
@@ -0,0 +1,61 @@
+#define _FP_W_TYPE_SIZE                32
+#define _FP_W_TYPE             unsigned long
+#define _FP_WS_TYPE            signed long
+#define _FP_I_TYPE             long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison.  This must
+   match `__libgcc_cmp_return__' in GCC for the target.  */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y)                          \
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y)                          \
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y)                          \
+  _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y)  _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y)  _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S          1
+#define _FP_NANSIGN_D          1
+#define _FP_NANSIGN_Q          1
+
+#define _FP_KEEPNANFRACP 1
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                     \
+  do {                                                         \
+    if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)         \
+       && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs))     \
+      {                                                                \
+       R##_s = Y##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,Y);                                \
+      }                                                                \
+    else                                                       \
+      {                                                                \
+       R##_s = X##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,X);                                \
+      }                                                                \
+    R##_c = FP_CLS_NAN;                                                \
+  } while (0)
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME.  */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/libgcc/config/tilegx/sfp-machine64.h b/libgcc/config/tilegx/sfp-machine64.h
new file mode 100644 (file)
index 0000000..88bdcf5
--- /dev/null
@@ -0,0 +1,61 @@
+#define _FP_W_TYPE_SIZE                64
+#define _FP_W_TYPE             unsigned long
+#define _FP_WS_TYPE            signed long
+#define _FP_I_TYPE             long
+
+typedef int TItype __attribute__ ((mode (TI)));
+typedef unsigned int UTItype __attribute__ ((mode (TI)));
+
+#define TI_BITS (__CHAR_BIT__ * (int)sizeof(TItype))
+
+/* The type of the result of a floating point comparison.  This must
+   match `__libgcc_cmp_return__' in GCC for the target.  */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y)                          \
+  _FP_MUL_MEAT_1_imm(_FP_WFRACBITS_S,R,X,Y)
+#define _FP_MUL_MEAT_D(R,X,Y)                          \
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y)                          \
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y)  _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm)
+#define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y)  _FP_DIV_MEAT_2_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0
+#define _FP_NANSIGN_S          1
+#define _FP_NANSIGN_D          1
+#define _FP_NANSIGN_Q          1
+
+#define _FP_KEEPNANFRACP 1
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                     \
+  do {                                                         \
+    if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)         \
+       && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs))     \
+      {                                                                \
+       R##_s = Y##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,Y);                                \
+      }                                                                \
+    else                                                       \
+      {                                                                \
+       R##_s = X##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,X);                                \
+      }                                                                \
+    R##_c = FP_CLS_NAN;                                                \
+  } while (0)
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME.  */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/libgcc/config/tilegx/t-crtstuff b/libgcc/config/tilegx/t-crtstuff
new file mode 100644 (file)
index 0000000..eddc45c
--- /dev/null
@@ -0,0 +1,4 @@
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section.
+CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
diff --git a/libgcc/config/tilegx/t-softfp b/libgcc/config/tilegx/t-softfp
new file mode 100644 (file)
index 0000000..a1e3513
--- /dev/null
@@ -0,0 +1 @@
+softfp_int_modes += ti
diff --git a/libgcc/config/tilegx/t-tilegx b/libgcc/config/tilegx/t-tilegx
new file mode 100644 (file)
index 0000000..2fb6445
--- /dev/null
@@ -0,0 +1,26 @@
+LIB2ADD += \
+  $(srcdir)/config/tilepro/atomic.c
+
+SOFTDIVIDE_FUNCS := \
+  _tile_udivsi3 \
+  _tile_divsi3 \
+  _tile_udivdi3 \
+  _tile_divdi3 \
+  _tile_umodsi3 \
+  _tile_modsi3 \
+  _tile_umoddi3 \
+  _tile_moddi3
+
+softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
+       $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
+         $(vis_hide)
+libgcc-objects += $(softdivide-o)
+
+ifeq ($(enable_shared),yes)
+softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
+       $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
+libgcc-s-objects += $(softdivide-s-o)
+libgcc-eh-objects += _tile_divdi3.o _tile_umoddi3.o
+endif
diff --git a/libgcc/config/tilepro/atomic.c b/libgcc/config/tilepro/atomic.c
new file mode 100644 (file)
index 0000000..cafbde8
--- /dev/null
@@ -0,0 +1,232 @@
+/* TILE atomics.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This file is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "system.h"
+#include "coretypes.h"
+#include "atomic.h"
+
+/* This code should be inlined by the compiler, but for now support
+   it as out-of-line methods in libgcc.  */
+
+static void
+pre_atomic_barrier (int model)
+{
+  switch ((enum memmodel) model)
+    {
+    case MEMMODEL_RELEASE:
+    case MEMMODEL_ACQ_REL:
+    case MEMMODEL_SEQ_CST:
+      __atomic_thread_fence (model);
+      break;
+    default:
+      break;
+    }
+  return;
+}
+
+static void
+post_atomic_barrier (int model)
+{
+  switch ((enum memmodel) model)
+    {
+    case MEMMODEL_ACQUIRE:
+    case MEMMODEL_ACQ_REL:
+    case MEMMODEL_SEQ_CST:
+      __atomic_thread_fence (model);
+      break;
+    default:
+      break;
+    }
+  return;
+}
+
+#define __unused __attribute__((unused))
+
+/* Provide additional methods not implemented by atomic.h. */
+#define atomic_xor(mem, mask) \
+  __atomic_update_cmpxchg(mem, mask, __old ^ __value)
+#define atomic_nand(mem, mask) \
+  __atomic_update_cmpxchg(mem, mask, ~(__old & __value))
+
+#define __atomic_fetch_and_do(type, size, opname)              \
+type                                                           \
+__atomic_fetch_##opname##_##size(type* p, type i, int model)   \
+{                                                              \
+  pre_atomic_barrier(model);                                   \
+  type rv = atomic_##opname(p, i);                             \
+  post_atomic_barrier(model);                                  \
+  return rv;                                                   \
+}
+
+__atomic_fetch_and_do (int, 4, add)
+__atomic_fetch_and_do (int, 4, sub)
+__atomic_fetch_and_do (int, 4, or)
+__atomic_fetch_and_do (int, 4, and)
+__atomic_fetch_and_do (int, 4, xor)
+__atomic_fetch_and_do (int, 4, nand)
+__atomic_fetch_and_do (long long, 8, add)
+__atomic_fetch_and_do (long long, 8, sub)
+__atomic_fetch_and_do (long long, 8, or)
+__atomic_fetch_and_do (long long, 8, and)
+__atomic_fetch_and_do (long long, 8, xor)
+__atomic_fetch_and_do (long long, 8, nand)
+#define __atomic_do_and_fetch(type, size, opname, op)          \
+type                                                           \
+__atomic_##opname##_fetch_##size(type* p, type i, int model)   \
+{                                                              \
+  pre_atomic_barrier(model);                                   \
+  type rv = atomic_##opname(p, i) op i;                                \
+  post_atomic_barrier(model);                                  \
+  return rv;                                                   \
+}
+__atomic_do_and_fetch (int, 4, add, +)
+__atomic_do_and_fetch (int, 4, sub, -)
+__atomic_do_and_fetch (int, 4, or, |)
+__atomic_do_and_fetch (int, 4, and, &)
+__atomic_do_and_fetch (int, 4, xor, |)
+__atomic_do_and_fetch (int, 4, nand, &)
+__atomic_do_and_fetch (long long, 8, add, +)
+__atomic_do_and_fetch (long long, 8, sub, -)
+__atomic_do_and_fetch (long long, 8, or, |)
+__atomic_do_and_fetch (long long, 8, and, &)
+__atomic_do_and_fetch (long long, 8, xor, |)
+__atomic_do_and_fetch (long long, 8, nand, &)
+#define __atomic_exchange_methods(type, size)                          \
+bool                                                                   \
+__atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp,    \
+                                type newval, bool weak __unused,       \
+                                int models, int modelf __unused)       \
+{                                                                      \
+  type oldval = *oldvalp;                                              \
+  pre_atomic_barrier(models);                                          \
+  type retval = atomic_val_compare_and_exchange(ptr, oldval, newval);  \
+  post_atomic_barrier(models);                                         \
+  bool success = (retval == oldval);                                   \
+  *oldvalp = retval;                                                   \
+  return success;                                                      \
+}                                                                      \
+                                                                       \
+type                                                                   \
+__atomic_exchange_##size(volatile type* ptr, type val, int model)      \
+{                                                                      \
+  pre_atomic_barrier(model);                                           \
+  type retval = atomic_exchange(ptr, val);                             \
+  post_atomic_barrier(model);                                          \
+  return retval;                                                       \
+}
+__atomic_exchange_methods (int, 4)
+__atomic_exchange_methods (long long, 8)
+
+/* Subword methods require the same approach for both TILEPro and
+   TILE-Gx.  We load the background data for the word, insert the
+   desired subword piece, then compare-and-exchange it into place.  */
+#define u8 unsigned char
+#define u16 unsigned short
+#define __atomic_subword_cmpxchg(type, size)                           \
+                                                                       \
+bool                                                                   \
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess,      \
+                                type val, bool weak __unused, int models, \
+                                int modelf __unused)                   \
+{                                                                      \
+  pre_atomic_barrier(models);                                          \
+  unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
+  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
+  const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
+  const unsigned int bgmask = ~(valmask << shift);                     \
+  unsigned int oldword = *p;                                           \
+  type oldval = (oldword >> shift) & valmask;                          \
+  if (__builtin_expect((oldval == *guess), 1)) {                       \
+    unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+    oldword = atomic_val_compare_and_exchange(p, oldword, word);       \
+    oldval = (oldword >> shift) & valmask;                             \
+  }                                                                    \
+  post_atomic_barrier(models);                                         \
+  bool success = (oldval == *guess);                                   \
+  *guess = oldval;                                                     \
+  return success;                                                      \
+}
+__atomic_subword_cmpxchg (u8, 1)
+__atomic_subword_cmpxchg (u16, 2)
+/* For the atomic-update subword methods, we use the same approach as
+   above, but we retry until we succeed if the compare-and-exchange
+   fails.  */
+#define __atomic_subword(type, proto, top, expr, bottom)               \
+proto                                                                  \
+{                                                                      \
+  top                                                                  \
+  unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
+  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
+  const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
+  const unsigned int bgmask = ~(valmask << shift);                     \
+  unsigned int oldword, xword = *p;                                    \
+  type val, oldval;                                                    \
+  do {                                                                 \
+    oldword = xword;                                                   \
+    oldval = (oldword >> shift) & valmask;                             \
+    val = expr;                                                                \
+    unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+    xword = atomic_val_compare_and_exchange(p, oldword, word);          \
+  } while (__builtin_expect(xword != oldword, 0));                     \
+  bottom                                                               \
+}
+#define __atomic_subword_fetch(type, funcname, expr, retval)           \
+  __atomic_subword(type,                                               \
+                  type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
+                  pre_atomic_barrier(model);,                          \
+                  expr,                                                \
+                  post_atomic_barrier(model); return retval;)
+__atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
+__atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
+__atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
+__atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
+__atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
+__atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
+__atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
+__atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
+__atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
+__atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
+__atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
+__atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
+__atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
+__atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
+__atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
+__atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
+__atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
+__atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
+__atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
+__atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
+__atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
+__atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
+__atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
+__atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
+#define __atomic_subword_lock(type, size)                              \
+                                                                       \
+__atomic_subword(type,                                                 \
+                type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
+                pre_atomic_barrier(model);,                            \
+                nval,                                                  \
+                post_atomic_barrier(model); return oldval;)
+__atomic_subword_lock (u8, 1)
+__atomic_subword_lock (u16, 2)
diff --git a/libgcc/config/tilepro/atomic.h b/libgcc/config/tilepro/atomic.h
new file mode 100644 (file)
index 0000000..16306fe
--- /dev/null
@@ -0,0 +1,428 @@
+/* Macros for atomic functionality for tile.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This file is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+/* Provides macros for common atomic functionality.  */
+
+#ifndef _ATOMIC_H_
+#define _ATOMIC_H_
+
+#ifdef __tilegx__
+/* Atomic instruction macros
+
+   The macros provided by atomic.h simplify access to the TILE-Gx
+   architecture's atomic instructions.  The architecture provides a
+   variety of atomic instructions, including "exchange", "compare and
+   exchange", "fetch and ADD", "fetch and AND", "fetch and OR", and
+   "fetch and ADD if greater than or equal to zero".
+
+   No barrier or fence semantics are implied by any of the atomic
+   instructions for manipulating memory; you must specify the barriers
+   that you wish explicitly, using the provided macros.
+
+   Any integral 32- or 64-bit value can be used as the argument
+   to these macros, such as "int", "long long", "unsigned long", etc.
+   The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
+   The "exchange" and "compare and exchange" macros may also take
+   pointer values.  We use the pseudo-type "VAL" in the documentation
+   to indicate the use of an appropriate type.  */
+#else
+/* Atomic instruction macros
+
+   The macros provided by atomic.h simplify access to the Tile
+   architecture's atomic instructions.  Since the architecture
+   supports test-and-set as its only in-silicon atomic operation, many
+   of the operations provided by this header are implemented as
+   fast-path calls to Linux emulation routines.
+
+   Using the kernel for atomic operations allows userspace to take
+   advantage of the kernel's existing atomic-integer support (managed
+   by a distributed array of locks).  The kernel provides proper
+   ordering among simultaneous atomic operations on different cores,
+   and guarantees a process can not be context-switched part way
+   through an atomic operation.  By virtue of sharing the kernel
+   atomic implementation, the userspace atomic operations
+   are compatible with the atomic methods provided by the kernel's
+   futex() syscall API.  Note that these operations never cause Linux
+   kernel scheduling, and are in fact invisible to the kernel; they
+   simply act as regular function calls but with an elevated privilege
+   level.  Note that the kernel's distributed lock array is hashed by
+   using only VA bits from the atomic value's address (to avoid the
+   performance hit of page table locking and multiple page-table
+   lookups to get the PA) and only the VA bits that are below page
+   granularity (to properly lock simultaneous accesses to the same
+   page mapped at different VAs).  As a result, simultaneous atomic
+   operations on values whose addresses are at the same offset on a
+   page will contend in the kernel for the same lock array element.
+
+   No barrier or fence semantics are implied by any of the atomic
+   instructions for manipulating memory; you must specify the barriers
+   that you wish explicitly, using the provided macros.
+
+   Any integral 32- or 64-bit value can be used as the argument
+   to these macros, such as "int", "long long", "unsigned long", etc.
+   The pointers must be aligned to 4 or 8 bytes for 32- or 64-bit data.
+   The "exchange" and "compare and exchange" macros may also take
+   pointer values.  We use the pseudo-type "VAL" in the documentation
+   to indicate the use of an appropriate type.
+
+   The 32-bit routines are implemented using a single kernel fast
+   syscall, as is the 64-bit compare-and-exchange.  The other 64-bit
+   routines are implemented by looping over the 64-bit
+   compare-and-exchange routine, so may be potentially less efficient.  */
+#endif
+
+#include <stdint.h>
+#include <features.h>
+#ifdef __tilegx__
+#include <arch/spr_def.h>
+#else
+#include <asm/unistd.h>
+#endif
+
+
+/* 32-bit integer compare-and-exchange.  */
+static __inline __attribute__ ((always_inline))
+     int atomic_val_compare_and_exchange_4 (volatile int *mem,
+                                           int oldval, int newval)
+{
+#ifdef __tilegx__
+  __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+  return __insn_cmpexch4 (mem, newval);
+#else
+  int result;
+  __asm__ __volatile__ ("swint1":"=R00" (result),
+                       "=m" (*mem):"R10" (__NR_FAST_cmpxchg), "R00" (mem),
+                       "R01" (oldval), "R02" (newval), "m" (*mem):"r20",
+                       "r21", "r22", "r23", "r24", "r25", "r26", "r27",
+                       "r28", "r29", "memory");
+  return result;
+#endif
+}
+
+/* 64-bit integer compare-and-exchange.  */
+static __inline __attribute__ ((always_inline))
+     int64_t atomic_val_compare_and_exchange_8 (volatile int64_t * mem,
+                                               int64_t oldval,
+                                               int64_t newval)
+{
+#ifdef __tilegx__
+  __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+  return __insn_cmpexch (mem, newval);
+#else
+  unsigned int result_lo, result_hi;
+  unsigned int oldval_lo = oldval & 0xffffffffu, oldval_hi = oldval >> 32;
+  unsigned int newval_lo = newval & 0xffffffffu, newval_hi = newval >> 32;
+  __asm__ __volatile__ ("swint1":"=R00" (result_lo), "=R01" (result_hi),
+                       "=m" (*mem):"R10" (__NR_FAST_cmpxchg64), "R00" (mem),
+                       "R02" (oldval_lo), "R03" (oldval_hi),
+                       "R04" (newval_lo), "R05" (newval_hi),
+                       "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+                       "r26", "r27", "r28", "r29", "memory");
+  return ((uint64_t) result_hi) << 32 | result_lo;
+#endif
+}
+
+/* This non-existent symbol is called for sizes other than "4" and "8",
+   indicating a bug in the caller.  */
+extern int __atomic_error_bad_argument_size (void)
+  __attribute__ ((warning ("sizeof atomic argument not 4 or 8")));
+
+
+#define atomic_val_compare_and_exchange(mem, o, n)                      \
+  ({                                                                    \
+    (__typeof(*(mem)))(__typeof(*(mem)-*(mem)))                         \
+      ((sizeof(*(mem)) == 8) ?                                          \
+       atomic_val_compare_and_exchange_8(                               \
+         (volatile int64_t*)(mem), (__typeof((o)-(o)))(o),              \
+         (__typeof((n)-(n)))(n)) :                                      \
+       (sizeof(*(mem)) == 4) ?                                          \
+       atomic_val_compare_and_exchange_4(                               \
+         (volatile int*)(mem), (__typeof((o)-(o)))(o),                  \
+         (__typeof((n)-(n)))(n)) :                                      \
+       __atomic_error_bad_argument_size());                             \
+  })
+
+#define atomic_bool_compare_and_exchange(mem, o, n)                     \
+  ({                                                                    \
+    __typeof(o) __o = (o);                                              \
+    __builtin_expect(                                                   \
+      __o == atomic_val_compare_and_exchange((mem), __o, (n)), 1);      \
+  })
+
+
+/* Loop with compare_and_exchange until we guess the correct value.
+   Normally "expr" will be an expression using __old and __value.  */
+#define __atomic_update_cmpxchg(mem, value, expr)                       \
+  ({                                                                    \
+    __typeof(value) __value = (value);                                  \
+    __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess;           \
+    do {                                                                \
+      __guess = __old;                                                  \
+      __old = atomic_val_compare_and_exchange(__mem, __old, (expr));    \
+    } while (__builtin_expect(__old != __guess, 0));                    \
+    __old;                                                              \
+  })
+
+#ifdef __tilegx__
+
+/* Generic atomic op with 8- or 4-byte variant.
+   The _mask, _addend, and _expr arguments are ignored on tilegx.  */
+#define __atomic_update(mem, value, op, _mask, _addend, _expr)          \
+  ({                                                                    \
+    ((__typeof(*(mem)))                                                 \
+     ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op(     \
+        (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) :   \
+      (sizeof(*(mem)) == 4) ? (int)__insn_##op##4(                      \
+        (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) :   \
+      __atomic_error_bad_argument_size()));                             \
+  })
+
+#else
+
+/* This uses TILEPro's fast syscall support to atomically compute:
+
+   int old = *ptr;
+   *ptr = (old & mask) + addend;
+   return old;
+
+   This primitive can be used for atomic exchange, add, or, and.
+   Only 32-bit support is provided.  */
+static __inline __attribute__ ((always_inline))
+     int
+     __atomic_update_4 (volatile int *mem, int mask, int addend)
+{
+  int result;
+  __asm__ __volatile__ ("swint1":"=R00" (result),
+                       "=m" (*mem):"R10" (__NR_FAST_atomic_update),
+                       "R00" (mem), "R01" (mask), "R02" (addend),
+                       "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+                       "r26", "r27", "r28", "r29", "memory");
+  return result;
+}
+
+/* Generic atomic op with 8- or 4-byte variant.
+   The _op argument is ignored on tilepro.  */
+#define __atomic_update(mem, value, _op, mask, addend, expr)            \
+  ({                                                                    \
+    (__typeof(*(mem)))(__typeof(*(mem)-*(mem)))                         \
+      ((sizeof(*(mem)) == 8) ?                                          \
+       __atomic_update_cmpxchg((mem), (value), (expr)) :                \
+       (sizeof(*(mem)) == 4) ?                                          \
+       __atomic_update_4((volatile int*)(mem), (__typeof((mask)-(mask)))(mask), \
+                         (__typeof((addend)-(addend)))(addend)) :       \
+       __atomic_error_bad_argument_size());                             \
+  })
+
+#endif /* __tilegx__ */
+
+
+#define atomic_exchange(mem, newvalue) \
+  __atomic_update(mem, newvalue, exch, 0, newvalue, __value)
+
+#define atomic_add(mem, value) \
+  __atomic_update(mem, value, fetchadd, -1, value, __old + __value)
+
+#define atomic_sub(mem, value) atomic_add((mem), -(value))
+
+#define atomic_increment(mem) atomic_add((mem), 1)
+
+#define atomic_decrement(mem) atomic_add((mem), -1)
+
+#define atomic_and(mem, mask) \
+  __atomic_update(mem, mask, fetchand, mask, 0, __old & __value)
+
+#define atomic_or(mem, mask) \
+  __atomic_update(mem, mask, fetchor, ~mask, mask, __old | __value)
+
+#define atomic_bit_set(mem, bit)                                        \
+  ({                                                                    \
+    __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit);             \
+    __mask & atomic_or((mem), __mask);                                  \
+  })
+
+#define atomic_bit_clear(mem, bit)                                      \
+  ({                                                                    \
+    __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit);             \
+    __mask & atomic_and((mem), ~__mask);                                \
+  })
+
+#ifdef __tilegx__
+/* Atomically store a new value to memory.
+   Note that you can freely use types of any size here, unlike the
+   other atomic routines, which require 32- or 64-bit types.
+   This accessor is provided for compatibility with TILEPro, which
+   required an explicit atomic operation for stores that needed
+   to be atomic with respect to other atomic methods in this header.  */
+#define atomic_write(mem, value) ((void) (*(mem) = (value)))
+#else
+#define atomic_write(mem, value)                                        \
+  do {                                                                  \
+    __typeof(mem) __aw_mem = (mem);                                     \
+    __typeof(value) __aw_val = (value);                                 \
+    unsigned int *__aw_mem32, __aw_intval, __aw_val32, __aw_off, __aw_mask; \
+    __aw_intval = (__typeof((value) - (value)))__aw_val;                \
+    switch (sizeof(*__aw_mem)) {                                        \
+    case 8:                                                             \
+      __atomic_update_cmpxchg(__aw_mem, __aw_val, __value);             \
+      break;                                                            \
+    case 4:                                                             \
+      __atomic_update_4((int *)__aw_mem, 0, __aw_intval);               \
+      break;                                                            \
+    case 2:                                                             \
+      __aw_off = 8 * ((long)__aw_mem & 0x2);                            \
+      __aw_mask = 0xffffU << __aw_off;                                  \
+      __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x2);             \
+      __aw_val32 = (__aw_intval << __aw_off) & __aw_mask;               \
+      __atomic_update_cmpxchg(__aw_mem32, __aw_val32,                   \
+                              (__old & ~__aw_mask) | __value);          \
+      break;                                                            \
+    case 1:                                                             \
+      __aw_off = 8 * ((long)__aw_mem & 0x3);                            \
+      __aw_mask = 0xffU << __aw_off;                                    \
+      __aw_mem32 = (unsigned int *)((long)__aw_mem & ~0x3);             \
+      __aw_val32 = (__aw_intval << __aw_off) & __aw_mask;               \
+      __atomic_update_cmpxchg(__aw_mem32, __aw_val32,                   \
+                              (__old & ~__aw_mask) | __value);          \
+      break;                                                            \
+    }                                                                   \
+  } while (0)
+#endif
+
+/* Compiler barrier.
+
+   This macro prevents loads or stores from being moved by the compiler
+   across the macro.  Any loaded value that was loaded before this
+   macro must then be reloaded by the compiler.  */
+#define atomic_compiler_barrier() __asm__ __volatile__("" ::: "memory")
+
+/* Full memory barrier.
+
+   This macro has the semantics of atomic_compiler_barrer(), but also
+   ensures that previous stores are visible to other cores, and that
+   all previous loaded values have been placed into their target
+   register on this core.  */
+#define atomic_full_barrier() __insn_mf()
+
+/* Read memory barrier.
+
+   Ensure that all reads by this processor that occurred prior to the
+   read memory barrier have completed, and that no reads that occur
+   after the read memory barrier on this processor are initiated
+   before the barrier.
+
+   On current TILE chips a read barrier is implemented as a full barrier,
+   but this may not be true in later versions of the architecture.
+
+   See also atomic_acquire_barrier() for the appropriate idiom to use
+   to ensure no reads are lifted above an atomic lock instruction.  */
+#define atomic_read_barrier() atomic_full_barrier()
+
+/* Write memory barrier.
+
+   Ensure that all writes by this processor that occurred prior to the
+   write memory barrier have completed, and that no writes that occur
+   after the write memory barrier on this processor are initiated
+   before the barrier.
+
+   On current TILE chips a write barrier is implemented as a full barrier,
+   but this may not be true in later versions of the architecture.
+
+   See also atomic_release_barrier() for the appropriate idiom to use
+   to ensure all writes are complete prior to an atomic unlock instruction.  */
+#define atomic_write_barrier() atomic_full_barrier()
+
+/* Lock acquisition barrier.
+
+   Ensure that no load operations that follow this macro in the
+   program can issue prior to the barrier.  Without such a barrier,
+   the compiler can reorder them to issue earlier, or the hardware can
+   issue them speculatively.  The latter is not currently done in the
+   Tile microarchitecture, but using this operation improves
+   portability to future implementations.
+
+   This operation is intended to be used as part of the "acquire"
+   path for locking, that is, when entering a critical section.
+   This should be done after the atomic operation that actually
+   acquires the lock, and in conjunction with a "control dependency"
+   that checks the atomic operation result to see if the lock was
+   in fact acquired.  See the atomic_read_barrier() macro
+   for a heavier-weight barrier to use in certain unusual constructs,
+   or atomic_acquire_barrier_value() if no control dependency exists.  */
+#define atomic_acquire_barrier() atomic_compiler_barrier()
+
+/* Lock release barrier.
+
+   Ensure that no store operations that precede this macro in the
+   program complete subsequent to the barrier.  Without such a
+   barrier, the compiler can reorder stores to issue later, or stores
+   can be still outstanding in the memory network.
+
+   This operation is intended to be used as part of the "release" path
+   for locking, that is, when leaving a critical section.  This should
+   be done before the operation (such as a store of zero) that
+   actually releases the lock.  */
+#define atomic_release_barrier() atomic_write_barrier()
+
+/* Barrier until the read of a particular value is complete.
+
+   This is occasionally useful when constructing certain locking
+   scenarios.  For example, you might write a routine that issues an
+   atomic instruction to enter a critical section, then reads one or
+   more values within the critical section without checking to see if
+   the critical section was in fact acquired, and only later checks
+   the atomic instruction result to see if the lock was acquired.  If
+   so the routine could properly release the lock and know that the
+   values that were read were valid.
+
+   In this scenario, it is required to wait for the result of the
+   atomic instruction, even if the value itself is not checked.  This
+   guarantees that if the atomic instruction succeeded in taking the lock,
+   the lock was held before any reads in the critical section issued.  */
+#define atomic_acquire_barrier_value(val) \
+  __asm__ __volatile__("move %0, %0" :: "r"(val))
+
+/* Access the given variable in memory exactly once.
+
+   In some contexts, an algorithm may need to force access to memory,
+   since otherwise the compiler may think it can optimize away a
+   memory load or store; for example, in a loop when polling memory to
+   see if another cpu has updated it yet.  Generally this is only
+   required for certain very carefully hand-tuned algorithms; using it
+   unnecessarily may result in performance losses.
+
+   A related use of this macro is to ensure that the compiler does not
+   rematerialize the value of "x" by reloading it from memory
+   unexpectedly; the "volatile" marking will prevent the compiler from
+   being able to rematerialize.  This is helpful if an algorithm needs
+   to read a variable without locking, but needs it to have the same
+   value if it ends up being used several times within the algorithm.
+
+   Note that multiple uses of this macro are guaranteed to be ordered,
+   i.e. the compiler will not reorder stores or loads that are wrapped
+   in atomic_access_once().  */
+#define atomic_access_once(x) (*(volatile __typeof(x) *)&(x))
+
+
+#endif /* !_ATOMIC_H_ */
diff --git a/libgcc/config/tilepro/linux-unwind.h b/libgcc/config/tilepro/linux-unwind.h
new file mode 100644 (file)
index 0000000..0ed662c
--- /dev/null
@@ -0,0 +1,100 @@
+/* DWARF2 EH unwinding support for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef inhibit_libc
+
+#include <arch/abi.h>
+#include <signal.h>
+#include <sys/ucontext.h>
+#include <linux/unistd.h>
+
+/* Macro to define a copy of the kernel's __rt_sigreturn function
+   (in arch/tile/kernel/entry.S).  If that function is changed,
+   this one needs to be changed to match it.  */
+#define _sigreturn_asm(REG, NR) asm(                    \
+    ".pushsection .text.__rt_sigreturn,\"a\"\n"         \
+    ".global __rt_sigreturn\n"                          \
+    ".type __rt_sigreturn,@function\n"                  \
+    "__rt_sigreturn:\n"                                 \
+    "moveli " #REG ", " #NR "\n"                        \
+    "swint1\n"                                          \
+    ".size __rt_sigreturn, . - __rt_sigreturn\n"        \
+    ".popsection")
+#define sigreturn_asm(REG, NR) _sigreturn_asm(REG, NR)
+sigreturn_asm (TREG_SYSCALL_NR_NAME, __NR_rt_sigreturn);
+#define SIGRETURN_LEN 16
+extern char __rt_sigreturn[];
+
+#define MD_FALLBACK_FRAME_STATE_FOR tile_fallback_frame_state
+
+static _Unwind_Reason_Code
+tile_fallback_frame_state (struct _Unwind_Context *context,
+                             _Unwind_FrameState *fs)
+{
+  unsigned char *pc = context->ra;
+  struct sigcontext *sc;
+  long new_cfa;
+  int i;
+
+  struct rt_sigframe {
+    unsigned char save_area[C_ABI_SAVE_AREA_SIZE];
+    struct siginfo info;
+    struct ucontext uc;
+  } *rt_;
+
+  /* Return if this is not a signal handler.  */
+  if (memcmp (pc, __rt_sigreturn, SIGRETURN_LEN) != 0)
+    return _URC_END_OF_STACK;
+
+  /* It was a signal handler; update the reported PC to point to our
+     copy, since that will be findable with dladdr() and therefore
+     somewhat easier to help understand what actually happened. */
+  context->ra = __rt_sigreturn;
+
+  rt_ = context->cfa;
+  sc = &rt_->uc.uc_mcontext;
+
+  new_cfa = sc->sp;
+  fs->regs.cfa_how = CFA_REG_OFFSET;
+  fs->regs.cfa_reg = STACK_POINTER_REGNUM;
+  fs->regs.cfa_offset = new_cfa - (long) context->cfa;
+
+  for (i = 0; i < 56; ++i)
+    {
+      fs->regs.reg[i].how = REG_SAVED_OFFSET;
+      fs->regs.reg[i].loc.offset
+       = (long)&sc->gregs[i] - new_cfa;
+    }
+
+  fs->regs.reg[56].how = REG_SAVED_OFFSET;
+  fs->regs.reg[56].loc.offset = (long)&sc->pc - new_cfa;
+  fs->retaddr_column = 56;
+  fs->signal_frame = 1;
+
+  return _URC_NO_REASON;
+}
+
+#endif /* ifdef inhibit_libc  */
diff --git a/libgcc/config/tilepro/sfp-machine.h b/libgcc/config/tilepro/sfp-machine.h
new file mode 100644 (file)
index 0000000..ac5b828
--- /dev/null
@@ -0,0 +1,56 @@
+#define _FP_W_TYPE_SIZE                32
+#define _FP_W_TYPE             unsigned long
+#define _FP_WS_TYPE            signed long
+#define _FP_I_TYPE             long
+
+/* The type of the result of a floating point comparison.  This must
+   match `__libgcc_cmp_return__' in GCC for the target.  */
+typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__)));
+#define CMPtype __gcc_CMPtype
+
+#define _FP_MUL_MEAT_S(R,X,Y)                          \
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y)                          \
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y)                          \
+  _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y)  _FP_DIV_MEAT_1_loop(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y)  _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S          1
+#define _FP_NANSIGN_D          1
+#define _FP_NANSIGN_Q          1
+
+#define _FP_KEEPNANFRACP 1
+
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                     \
+  do {                                                         \
+    if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)         \
+       && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs))     \
+      {                                                                \
+       R##_s = Y##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,Y);                                \
+      }                                                                \
+    else                                                       \
+      {                                                                \
+       R##_s = X##_s;                                          \
+       _FP_FRAC_COPY_##wc(R,X);                                \
+      }                                                                \
+    R##_c = FP_CLS_NAN;                                                \
+  } while (0)
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+/* Define ALIASNAME as a strong alias for NAME.  */
+# define strong_alias(name, aliasname) _strong_alias(name, aliasname)
+# define _strong_alias(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+
diff --git a/libgcc/config/tilepro/softdivide.c b/libgcc/config/tilepro/softdivide.c
new file mode 100644 (file)
index 0000000..f09b9a2
--- /dev/null
@@ -0,0 +1,354 @@
+/* Division and remainder routines for Tile.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This file is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+typedef int int32_t;
+typedef unsigned uint32_t;
+typedef long long int64_t;
+typedef unsigned long long uint64_t;
+
+/* Raise signal 8 (SIGFPE) with code 1 (FPE_INTDIV).  */
+static inline void
+raise_intdiv (void)
+{
+  asm ("{ raise; moveli zero, 8 + (1 << 6) }");
+}
+
+
+#ifndef __tilegx__
+/*__udivsi3 - 32 bit integer unsigned divide  */
+static inline uint32_t __attribute__ ((always_inline))
+__udivsi3_inline (uint32_t dividend, uint32_t divisor)
+{
+  /* Divide out any power of two factor from dividend and divisor.
+     Note that when dividing by zero the divisor will remain zero,
+     which is all we need to detect that case below.  */
+  const int power_of_two_factor = __insn_ctz (divisor);
+  divisor >>= power_of_two_factor;
+  dividend >>= power_of_two_factor;
+
+  /* Checks for division by power of two or division by zero.  */
+  if (divisor <= 1)
+    {
+      if (divisor == 0)
+       {
+         raise_intdiv ();
+         return 0;
+       }
+      return dividend;
+    }
+
+  /* Compute (a / b) by repeatedly finding the largest N
+     such that (b << N) <= a. For each such N, set bit N in the
+     quotient, subtract (b << N) from a, and keep going. Think of this as
+     the reverse of the "shift-and-add" that a multiply does. The values
+     of N are precisely those shift counts.
+
+     Finding N is easy. First, use clz(b) - clz(a) to find the N
+     that lines up the high bit of (b << N) with the high bit of a.
+     Any larger value of N would definitely make (b << N) > a,
+     which is too big.
+
+     Then, if (b << N) > a (because it has larger low bits), decrement
+     N by one.  This adjustment will definitely make (b << N) less
+     than a, because a's high bit is now one higher than b's.  */
+
+  /* Precomputing the max_ values allows us to avoid a subtract
+     in the inner loop and just right shift by clz(remainder).  */
+  const int divisor_clz = __insn_clz (divisor);
+  const uint32_t max_divisor = divisor << divisor_clz;
+  const uint32_t max_qbit = 1 << divisor_clz;
+
+  uint32_t quotient = 0;
+  uint32_t remainder = dividend;
+
+  while (remainder >= divisor)
+    {
+      int shift = __insn_clz (remainder);
+      uint32_t scaled_divisor = max_divisor >> shift;
+      uint32_t quotient_bit = max_qbit >> shift;
+
+      int too_big = (scaled_divisor > remainder);
+      scaled_divisor >>= too_big;
+      quotient_bit >>= too_big;
+      remainder -= scaled_divisor;
+      quotient |= quotient_bit;
+    }
+  return quotient;
+}
+#endif /* !__tilegx__ */
+
+
+/* __udivdi3 - 64 bit integer unsigned divide  */
+static inline uint64_t __attribute__ ((always_inline))
+__udivdi3_inline (uint64_t dividend, uint64_t divisor)
+{
+  /* Divide out any power of two factor from dividend and divisor.
+     Note that when dividing by zero the divisor will remain zero,
+     which is all we need to detect that case below.  */
+  const int power_of_two_factor = __builtin_ctzll (divisor);
+  divisor >>= power_of_two_factor;
+  dividend >>= power_of_two_factor;
+
+  /* Checks for division by power of two or division by zero.  */
+  if (divisor <= 1)
+    {
+      if (divisor == 0)
+       {
+         raise_intdiv ();
+         return 0;
+       }
+      return dividend;
+    }
+
+#ifndef __tilegx__
+  if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
+    {
+      /* Operands both fit in 32 bits, so use faster 32 bit algorithm.  */
+      return __udivsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
+    }
+#endif /* !__tilegx__ */
+
+  /* See algorithm description in __udivsi3  */
+
+  const int divisor_clz = __builtin_clzll (divisor);
+  const uint64_t max_divisor = divisor << divisor_clz;
+  const uint64_t max_qbit = 1ULL << divisor_clz;
+
+  uint64_t quotient = 0;
+  uint64_t remainder = dividend;
+
+  while (remainder >= divisor)
+    {
+      int shift = __builtin_clzll (remainder);
+      uint64_t scaled_divisor = max_divisor >> shift;
+      uint64_t quotient_bit = max_qbit >> shift;
+
+      int too_big = (scaled_divisor > remainder);
+      scaled_divisor >>= too_big;
+      quotient_bit >>= too_big;
+      remainder -= scaled_divisor;
+      quotient |= quotient_bit;
+    }
+  return quotient;
+}
+
+
+#ifndef __tilegx__
+/* __umodsi3 - 32 bit integer unsigned modulo  */
+static inline uint32_t __attribute__ ((always_inline))
+__umodsi3_inline (uint32_t dividend, uint32_t divisor)
+{
+  /* Shortcircuit mod by a power of two (and catch mod by zero).  */
+  const uint32_t mask = divisor - 1;
+  if ((divisor & mask) == 0)
+    {
+      if (divisor == 0)
+       {
+         raise_intdiv ();
+         return 0;
+       }
+      return dividend & mask;
+    }
+
+  /* We compute the remainder (a % b) by repeatedly subtracting off
+     multiples of b from a until a < b. The key is that subtracting
+     off a multiple of b does not affect the result mod b.
+
+     To make the algorithm run efficiently, we need to subtract
+     off a large multiple of b at each step. We subtract the largest
+     (b << N) that is <= a.
+
+     Finding N is easy. First, use clz(b) - clz(a) to find the N
+     that lines up the high bit of (b << N) with the high bit of a.
+     Any larger value of N would definitely make (b << N) > a,
+     which is too big.
+
+     Then, if (b << N) > a (because it has larger low bits), decrement
+     N by one.  This adjustment will definitely make (b << N) less
+     than a, because a's high bit is now one higher than b's.  */
+  const uint32_t max_divisor = divisor << __insn_clz (divisor);
+
+  uint32_t remainder = dividend;
+  while (remainder >= divisor)
+    {
+      const int shift = __insn_clz (remainder);
+      uint32_t scaled_divisor = max_divisor >> shift;
+      scaled_divisor >>= (scaled_divisor > remainder);
+      remainder -= scaled_divisor;
+    }
+
+  return remainder;
+}
+#endif /* !__tilegx__ */
+
+
+/* __umoddi3 - 64 bit integer unsigned modulo  */
+static inline uint64_t __attribute__ ((always_inline))
+__umoddi3_inline (uint64_t dividend, uint64_t divisor)
+{
+#ifndef __tilegx__
+  if (((uint32_t) (dividend >> 32) | ((uint32_t) (divisor >> 32))) == 0)
+    {
+      /* Operands both fit in 32 bits, so use faster 32 bit algorithm.  */
+      return __umodsi3_inline ((uint32_t) dividend, (uint32_t) divisor);
+    }
+#endif /* !__tilegx__ */
+
+  /* Shortcircuit mod by a power of two (and catch mod by zero).  */
+  const uint64_t mask = divisor - 1;
+  if ((divisor & mask) == 0)
+    {
+      if (divisor == 0)
+       {
+         raise_intdiv ();
+         return 0;
+       }
+      return dividend & mask;
+    }
+
+  /* See algorithm description in __umodsi3  */
+  const uint64_t max_divisor = divisor << __builtin_clzll (divisor);
+
+  uint64_t remainder = dividend;
+  while (remainder >= divisor)
+    {
+      const int shift = __builtin_clzll (remainder);
+      uint64_t scaled_divisor = max_divisor >> shift;
+      scaled_divisor >>= (scaled_divisor > remainder);
+      remainder -= scaled_divisor;
+    }
+
+  return remainder;
+}
+
+
+uint32_t __udivsi3 (uint32_t dividend, uint32_t divisor);
+#ifdef L_tile_udivsi3
+uint32_t
+__udivsi3 (uint32_t dividend, uint32_t divisor)
+{
+#ifndef __tilegx__
+  return __udivsi3_inline (dividend, divisor);
+#else /* !__tilegx__ */
+  uint64_t n = __udivdi3_inline (((uint64_t) dividend), ((uint64_t) divisor));
+  return (uint32_t) n;
+#endif /* !__tilegx__ */
+}
+#endif
+
+#define ABS(x) ((x) >= 0 ? (x) : -(x))
+
+int32_t __divsi3 (int32_t dividend, int32_t divisor);
+#ifdef L_tile_divsi3
+/* __divsi3 - 32 bit integer signed divide  */
+int32_t
+__divsi3 (int32_t dividend, int32_t divisor)
+{
+#ifndef __tilegx__
+  uint32_t n = __udivsi3_inline (ABS (dividend), ABS (divisor));
+#else /* !__tilegx__ */
+  uint64_t n =
+    __udivdi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
+#endif /* !__tilegx__ */
+  if ((dividend ^ divisor) < 0)
+    n = -n;
+  return (int32_t) n;
+}
+#endif
+
+
+uint64_t __udivdi3 (uint64_t dividend, uint64_t divisor);
+#ifdef L_tile_udivdi3
+uint64_t
+__udivdi3 (uint64_t dividend, uint64_t divisor)
+{
+  return __udivdi3_inline (dividend, divisor);
+}
+#endif
+
+/*__divdi3 - 64 bit integer signed divide  */
+int64_t __divdi3 (int64_t dividend, int64_t divisor);
+#ifdef L_tile_divdi3
+int64_t
+__divdi3 (int64_t dividend, int64_t divisor)
+{
+  uint64_t n = __udivdi3_inline (ABS (dividend), ABS (divisor));
+  if ((dividend ^ divisor) < 0)
+    n = -n;
+  return (int64_t) n;
+}
+#endif
+
+
+uint32_t __umodsi3 (uint32_t dividend, uint32_t divisor);
+#ifdef L_tile_umodsi3
+uint32_t
+__umodsi3 (uint32_t dividend, uint32_t divisor)
+{
+#ifndef __tilegx__
+  return __umodsi3_inline (dividend, divisor);
+#else /* !__tilegx__ */
+  return __umoddi3_inline ((uint64_t) dividend, (uint64_t) divisor);
+#endif /* !__tilegx__ */
+}
+#endif
+
+
+/* __modsi3 - 32 bit integer signed modulo  */
+int32_t __modsi3 (int32_t dividend, int32_t divisor);
+#ifdef L_tile_modsi3
+int32_t
+__modsi3 (int32_t dividend, int32_t divisor)
+{
+#ifndef __tilegx__
+  uint32_t remainder = __umodsi3_inline (ABS (dividend), ABS (divisor));
+#else /* !__tilegx__ */
+  uint64_t remainder =
+    __umoddi3_inline (ABS ((int64_t) dividend), ABS ((int64_t) divisor));
+#endif /* !__tilegx__ */
+  return (int32_t) ((dividend >= 0) ? remainder : -remainder);
+}
+#endif
+
+
+uint64_t __umoddi3 (uint64_t dividend, uint64_t divisor);
+#ifdef L_tile_umoddi3
+uint64_t
+__umoddi3 (uint64_t dividend, uint64_t divisor)
+{
+  return __umoddi3_inline (dividend, divisor);
+}
+#endif
+
+
+/* __moddi3 - 64 bit integer signed modulo  */
+int64_t __moddi3 (int64_t dividend, int64_t divisor);
+#ifdef L_tile_moddi3
+int64_t
+__moddi3 (int64_t dividend, int64_t divisor)
+{
+  uint64_t remainder = __umoddi3_inline (ABS (dividend), ABS (divisor));
+  return (int64_t) ((dividend >= 0) ? remainder : -remainder);
+}
+#endif
diff --git a/libgcc/config/tilepro/softmpy.S b/libgcc/config/tilepro/softmpy.S
new file mode 100644 (file)
index 0000000..eb571f6
--- /dev/null
@@ -0,0 +1,95 @@
+/* 64-bit multiplication support for TILEPro.
+   Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This file is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* 64-bit multiplication support.  */
+
+       .file "softmpy.S"
+
+/* Parameters */
+#define lo0             r9   /* low 32 bits of n0  */
+#define hi0             r1   /* high 32 bits of n0 */
+#define lo1             r2   /* low 32 bits of n1  */
+#define hi1             r3   /* high 32 bits of n1 */
+
+/* temps */
+#define result1_a       r4
+#define result1_b       r5
+
+#define tmp0            r6
+#define tmp0_left_16    r7
+#define tmp1            r8
+
+       .section .text.__muldi3, "ax"
+       .align 8
+       .globl __muldi3
+       .type __muldi3, @function
+__muldi3:
+       {
+        move        lo0, r0 /* so we can write "out r0" while "in r0" alive */
+        mulhl_uu    tmp0, lo1, r0
+       }
+       {
+        mulll_uu    result1_a, lo1, hi0
+       }
+       {
+        move        tmp1, tmp0
+        mulhla_uu   tmp0, lo0, lo1
+       }
+       {
+        mulhlsa_uu  result1_a, lo1, hi0
+       }
+       {
+        mulll_uu    result1_b, lo0, hi1
+        slt_u       tmp1, tmp0, tmp1
+       }
+       {
+        mulhlsa_uu  result1_a, lo0, hi1
+        shli        r0, tmp0, 16
+       }
+       {
+        move        tmp0_left_16, r0
+        mulhha_uu   result1_b, lo0, lo1
+       }
+       {
+        mullla_uu   r0, lo1, lo0
+        shli        tmp1, tmp1, 16
+       }
+       {
+        mulhlsa_uu  result1_b, hi0, lo1
+        inthh       tmp1, tmp1, tmp0
+       }
+       {
+        mulhlsa_uu  result1_a, hi1, lo0
+        slt_u       tmp0, r0, tmp0_left_16
+       }
+       /* NOTE: this will stall for a cycle here. Oh well. */
+       {
+        add         r1, tmp0, tmp1
+        add         result1_a, result1_a, result1_b
+       }
+       {
+        add         r1, r1, result1_a
+        jrp         lr
+       }
+       .size __muldi3,.-__muldi3
diff --git a/libgcc/config/tilepro/t-crtstuff b/libgcc/config/tilepro/t-crtstuff
new file mode 100644 (file)
index 0000000..eddc45c
--- /dev/null
@@ -0,0 +1,4 @@
+# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
+# because then __FRAME_END__ might not be the last thing in .eh_frame
+# section.
+CRTSTUFF_T_CFLAGS += -fno-asynchronous-unwind-tables
diff --git a/libgcc/config/tilepro/t-tilepro b/libgcc/config/tilepro/t-tilepro
new file mode 100644 (file)
index 0000000..eb6894c
--- /dev/null
@@ -0,0 +1,33 @@
+LIB2ADD += \
+  $(srcdir)/config/tilepro/softmpy.S \
+  $(srcdir)/config/tilepro/atomic.c
+
+LIB2FUNCS_EXCLUDE += \
+  _divdi3 \
+  _moddi3 \
+  _muldi3 \
+  _udivdi3 \
+  _umoddi3
+
+SOFTDIVIDE_FUNCS := \
+  _tile_udivsi3 \
+  _tile_divsi3 \
+  _tile_udivdi3 \
+  _tile_divdi3 \
+  _tile_umodsi3 \
+  _tile_modsi3 \
+  _tile_umoddi3 \
+  _tile_moddi3
+
+softdivide-o = $(patsubst %,%$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-o): %$(objext): $(srcdir)/config/tilepro/softdivide.c
+       $(gcc_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $< \
+         $(vis_hide)
+libgcc-objects += $(softdivide-o)
+
+ifeq ($(enable_shared),yes)
+softdivide-s-o = $(patsubst %,%_s$(objext),$(SOFTDIVIDE_FUNCS))
+$(softdivide-s-o): %_s$(objext): $(srcdir)/config/tilepro/softdivide.c
+       $(gcc_s_compile) -ffunction-sections -DMAYBE_STATIC= -DL$* -c $<
+libgcc-s-objects += $(softdivide-s-o)
+endif
index daebf23e69edaf4cdd178d5858112ae3c6e104d8..95a6303738e9afb283f580c85b60805e1aacd2e9 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-14  Walter Lee  <walt@tilera.com>
+
+       * configure.tgt: Handle tilegx and tilepro.
+       * config/linux/tile/futex.h: New file.
+
 2012-02-08  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/46886
diff --git a/libgomp/config/linux/tile/futex.h b/libgomp/config/linux/tile/futex.h
new file mode 100644 (file)
index 0000000..2e733a7
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright (C) 2011, 2012
+   Free Software Foundation, Inc.
+   Contributed by Walter Lee (walt@tilera.com)
+
+   This file is part of the GNU OpenMP Library (libgomp).
+
+   Libgomp is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+   more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Provide target-specific access to the futex system call.  */
+
+#include <sys/syscall.h>
+#include <linux/futex.h>
+
+static inline void
+sys_futex0 (int *addr, int op, int val)
+{
+  long _sys_result;
+  long _clobber_r2, _clobber_r3, _clobber_r4, _clobber_r5, _clobber_r10;
+  int err;
+
+  __asm__ __volatile__ (
+    "swint1"
+    : "=R00" (_sys_result), "=R01" (err), "=R02" (_clobber_r2),
+      "=R03" (_clobber_r3), "=R04" (_clobber_r4), "=R05" (_clobber_r5),
+      "=R10" (_clobber_r10)
+    : "R10" (SYS_futex), "R00" (addr), "R01" (op), "R02" (val),
+      "R03" (0)
+    :  "r6",  "r7",
+       "r8",  "r9",        "r11", "r12", "r13", "r14", "r15",
+      "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+      "r24", "r25", "r26", "r27", "r28", "r29", "memory");
+}
+
+static inline void
+futex_wait (int *addr, int val)
+{
+  sys_futex0 (addr, FUTEX_WAIT, val);
+}
+
+static inline void
+futex_wake (int *addr, int count)
+{
+  sys_futex0 (addr, FUTEX_WAKE, count);
+}
+
+static inline void
+cpu_relax (void)
+{
+  __asm volatile ("" : : : "memory");
+}
+
+static inline void
+atomic_write_barrier (void)
+{
+  __sync_synchronize ();
+}
index ce8b9c2f929bf08cef986589102d539c530ca57b..210dd5da3482ca029e41cd2a220c54e6f321d4ca 100644 (file)
@@ -51,6 +51,10 @@ if test $enable_linux_futex = yes; then
        config_path="linux/s390 linux posix"
        ;;
 
+    tile*-*-linux*)
+       config_path="linux/tile linux posix"
+       ;;
+
     # Note that bare i386 is not included here.  We need cmpxchg.
     i[456]86-*-linux*)
        config_path="linux/x86 linux posix"