diff options
77 files changed, 71556 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog index 43a18dee0f8..3a14fa7b6d5 100644 --- 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> diff --git a/MAINTAINERS b/MAINTAINERS index aeb2a1444dd..2c8f466bc6e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -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 diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 6386f083ea5..789f345e0f5 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -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. diff --git a/contrib/config-list.mk b/contrib/config-list.mk index e0e8554351f..108f84d85cf 100644 --- a/contrib/config-list.mk +++ b/contrib/config-list.mk @@ -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 \ diff --git a/contrib/gcc_update b/contrib/gcc_update index 364a1a24098..0289d9b2663 100755 --- a/contrib/gcc_update +++ b/contrib/gcc_update @@ -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 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 863952c343e..eca470c3cc8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 index 00000000000..7ee29b76bf7 --- /dev/null +++ b/gcc/common/config/tilegx/tilegx-common.c @@ -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 index 00000000000..01ceb7f248c --- /dev/null +++ b/gcc/common/config/tilepro/tilepro-common.c @@ -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; diff --git a/gcc/config.gcc b/gcc/config.gcc index 65a423a0f96..bdd5eb31890 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -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 index 00000000000..fcbd2207068 --- /dev/null +++ b/gcc/config/tilegx/constraints.md @@ -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 index 00000000000..b42e2bb0536 --- /dev/null +++ b/gcc/config/tilegx/linux.h @@ -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 index 00000000000..b7d171f192e --- /dev/null +++ b/gcc/config/tilegx/mul-tables.c @@ -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 index 00000000000..5a493ff6df0 --- /dev/null +++ b/gcc/config/tilegx/predicates.md @@ -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 index 00000000000..8be762af004 --- /dev/null +++ b/gcc/config/tilegx/sync.md @@ -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 index 00000000000..4e3203cd1b7 --- /dev/null +++ b/gcc/config/tilegx/t-tilegx @@ -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 index 00000000000..49067ae0b26 --- /dev/null +++ b/gcc/config/tilegx/tilegx-builtins.h @@ -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 index 00000000000..9cb8f7af171 --- /dev/null +++ b/gcc/config/tilegx/tilegx-c.c @@ -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 index 00000000000..970344aacf4 --- /dev/null +++ b/gcc/config/tilegx/tilegx-generic.md @@ -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 index 00000000000..47c959f7ba9 --- /dev/null +++ b/gcc/config/tilegx/tilegx-modes.def @@ -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 index 00000000000..7acba069736 --- /dev/null +++ b/gcc/config/tilegx/tilegx-multiply.h @@ -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 index 00000000000..56ce617e1f6 --- /dev/null +++ b/gcc/config/tilegx/tilegx-protos.h @@ -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 index 00000000000..276b5d21672 --- /dev/null +++ b/gcc/config/tilegx/tilegx.c @@ -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; + + + +/* 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; +} + + + +/* 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); +} + + + +/* 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; + } +} + + + +/* 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); +} + + + +/* 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); +} + + + +/* 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)); +} + + + +/* 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; +} + + + +/* 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; +} + + + +/* 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; +} + + + +/* 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); +} + + + +/* 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 index 00000000000..081ecc1756a --- /dev/null +++ b/gcc/config/tilegx/tilegx.h @@ -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 + + +/* 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) + + +/* 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 + + +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) + + +/* 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) + + +#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 + + +/* 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)) + + +/* 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) + + +#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) + + +/* 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))) + + + +#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 index 00000000000..033d125a99b --- /dev/null +++ b/gcc/config/tilegx/tilegx.md @@ -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")]) + +;; +;; 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")]) + + +;; +;; 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; + } +}) + + +;; +;; 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))]) + + +;; +;; 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") + + +;; +;; 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")]) + + +;; +;; 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; +}) + + +;; +;; 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")]) + + +;; +;; 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,*")]) + + +;; +;; 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") + + +;; +;; 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" "")))]) + + +;; +;; 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") + + +;; +;; 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; +}) + + +;; +;; 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; +}) + + +;; +;; 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")]) + + +;; +;; 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")]) + + +;; +;; "__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")]) + + +;; 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")]) + + +;; +;; 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 index 00000000000..5a65eaec380 --- /dev/null +++ b/gcc/config/tilegx/tilegx.opt @@ -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 index 00000000000..868c9cafb7f --- /dev/null +++ b/gcc/config/tilepro/constraints.md @@ -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 index 00000000000..5f4551b356f --- /dev/null +++ b/gcc/config/tilepro/gen-mul-tables.cc @@ -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 index 00000000000..c96399fdadd --- /dev/null +++ b/gcc/config/tilepro/linux.h @@ -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 index 00000000000..742e061bfe9 --- /dev/null +++ b/gcc/config/tilepro/mul-tables.c @@ -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 index 00000000000..6c4ffbe4a20 --- /dev/null +++ b/gcc/config/tilepro/predicates.md @@ -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 index 00000000000..bc2a5aa5b66 --- /dev/null +++ b/gcc/config/tilepro/t-tilepro @@ -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 index 00000000000..807401fcdb1 --- /dev/null +++ b/gcc/config/tilepro/tilepro-builtins.h @@ -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 index 00000000000..7eb95f1332d --- /dev/null +++ b/gcc/config/tilepro/tilepro-c.c @@ -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 index 00000000000..fcbb1d43ad2 --- /dev/null +++ b/gcc/config/tilepro/tilepro-generic.md @@ -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 index 00000000000..0031f4948da --- /dev/null +++ b/gcc/config/tilepro/tilepro-modes.def @@ -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 index 00000000000..e3f88587e6a --- /dev/null +++ b/gcc/config/tilepro/tilepro-multiply.h @@ -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 index 00000000000..9325bb976b0 --- /dev/null +++ b/gcc/config/tilepro/tilepro-protos.h @@ -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 index 00000000000..71b5807c5de --- /dev/null +++ b/gcc/config/tilepro/tilepro.c @@ -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; + + + +/* 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; +} + + + +/* 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); +} + + + +/* 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; + } +} + + + +/* 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); +} + + + +/* 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); +} + + + +/* 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)); +} + + + +/* 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; +} + + + +/* 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; +} + + + +/* 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; +} + + + +/* 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); +} + + + +/* 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 index 00000000000..930612d1fb4 --- /dev/null +++ b/gcc/config/tilepro/tilepro.h @@ -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" + + +/* 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) + + +/* 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 + + +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) + + +/* 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) + + +#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 + + +/* 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)) + + +/* 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) + + +#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) + + +/* 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))) + + + +#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 index 00000000000..9d5d44e85ed --- /dev/null +++ b/gcc/config/tilepro/tilepro.md @@ -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))) + + +;; 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")]) + + +;; +;; 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")]) + + +;; +;; 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; +}) + + +;; +;; 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") + + +;; +;; 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") + + +;; +;; 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") + + +;; +;; 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" "")))]) + + +;; +;; 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")]) + + +;; +;; 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; +}) + + +;; +;; 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")]) + + +;; +;; 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")]) + + +;; +;; 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")]) + + +;; +;; "__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")]) + + +;; +;; 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") + + +;; +;; 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") + + +;; +;; 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 index 00000000000..2ab54e0c520 --- /dev/null +++ b/gcc/config/tilepro/tilepro.opt @@ -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) + diff --git a/gcc/configure b/gcc/configure index 468369aa0a7..15a9ece5e6f 100755 --- a/gcc/configure +++ b/gcc/configure @@ -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) diff --git a/gcc/configure.ac b/gcc/configure.ac index 1e6f2636fba..5d6aa5d3c28 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -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) diff --git a/gcc/doc/contrib.texi b/gcc/doc/contrib.texi index 37e24f06a1d..face894ff48 100644 --- a/gcc/doc/contrib.texi +++ b/gcc/doc/contrib.texi @@ -395,6 +395,9 @@ of testing and bug fixing, particularly of GCC configury code. 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. @item @@ -506,6 +509,9 @@ 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. diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index ae50ae0579d..4c7196080a1 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -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 diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 4a85397b702..f1f2a6ca877 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -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-*-*} @@ -4460,6 +4464,22 @@ 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 @heading @anchor{x-x-vxworks}*-*-vxworks* Support for VxWorks is in flux. At present GCC supports @emph{only} the very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC@. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6c61e53c172..9f3af4cff30 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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 diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 92c1b28137d..c4eb355e253 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 09662d83743..05a6af0e1bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/other/PR23205.C b/gcc/testsuite/g++.dg/other/PR23205.C index 338079fbd93..a31fc1d773d 100644 --- a/gcc/testsuite/g++.dg/other/PR23205.C +++ b/gcc/testsuite/g++.dg/other/PR23205.C @@ -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; diff --git a/gcc/testsuite/g++.dg/other/pr23205-2.C b/gcc/testsuite/g++.dg/other/pr23205-2.C index a4333b38630..fbd16dfab58 100644 --- a/gcc/testsuite/g++.dg/other/pr23205-2.C +++ b/gcc/testsuite/g++.dg/other/pr23205-2.C @@ -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; diff --git a/gcc/testsuite/gcc.dg/20020312-2.c b/gcc/testsuite/gcc.dg/20020312-2.c index 6e568eddb90..768e17e64cd 100644 --- a/gcc/testsuite/gcc.dg/20020312-2.c +++ b/gcc/testsuite/gcc.dg/20020312-2.c @@ -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) diff --git a/gcc/testsuite/gcc.dg/20040813-1.c b/gcc/testsuite/gcc.dg/20040813-1.c index bf87f4172cf..e16344164d5 100644 --- a/gcc/testsuite/gcc.dg/20040813-1.c +++ b/gcc/testsuite/gcc.dg/20040813-1.c @@ -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 diff --git a/gcc/testsuite/gcc.dg/lower-subreg-1.c b/gcc/testsuite/gcc.dg/lower-subreg-1.c index 33be4c4eacc..12a20adfc38 100644 --- a/gcc/testsuite/gcc.dg/lower-subreg-1.c +++ b/gcc/testsuite/gcc.dg/lower-subreg-1.c @@ -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 } */ diff --git a/gcc/testsuite/gcc.misc-tests/linkage.exp b/gcc/testsuite/gcc.misc-tests/linkage.exp index f6702e4d024..887f31b21ac 100644 --- a/gcc/testsuite/gcc.misc-tests/linkage.exp +++ b/gcc/testsuite/gcc.misc-tests/linkage.exp @@ -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 ] { diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 4fc1ec8728b..a8a949c7d91 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -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. diff --git a/libcpp/configure b/libcpp/configure index 7ea42c54787..fb5654de54d 100755 --- a/libcpp/configure +++ b/libcpp/configure @@ -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 ;; diff --git a/libcpp/configure.ac b/libcpp/configure.ac index 83d5bb6e827..070ab633d80 100644 --- a/libcpp/configure.ac +++ b/libcpp/configure.ac @@ -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 ;; diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 4a974401d68..85b39cf7dfa 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -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 diff --git a/libgcc/config.host b/libgcc/config.host index da845b91743..5ad27caa172 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -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 index 00000000000..1ce84e10943 --- /dev/null +++ b/libgcc/config/tilegx/sfp-machine.h @@ -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 index 00000000000..37841000167 --- /dev/null +++ b/libgcc/config/tilegx/sfp-machine32.h @@ -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 index 00000000000..88bdcf5a318 --- /dev/null +++ b/libgcc/config/tilegx/sfp-machine64.h @@ -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 index 00000000000..eddc45ce9d8 --- /dev/null +++ b/libgcc/config/tilegx/t-crtstuff @@ -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 index 00000000000..a1e3513e288 --- /dev/null +++ b/libgcc/config/tilegx/t-softfp @@ -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 index 00000000000..2fb64454c36 --- /dev/null +++ b/libgcc/config/tilegx/t-tilegx @@ -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 index 00000000000..cafbde8abee --- /dev/null +++ b/libgcc/config/tilepro/atomic.c @@ -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 index 00000000000..16306fe0e76 --- /dev/null +++ b/libgcc/config/tilepro/atomic.h @@ -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 index 00000000000..0ed662c6598 --- /dev/null +++ b/libgcc/config/tilepro/linux-unwind.h @@ -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 index 00000000000..ac5b8285e2e --- /dev/null +++ b/libgcc/config/tilepro/sfp-machine.h @@ -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 index 00000000000..f09b9a29406 --- /dev/null +++ b/libgcc/config/tilepro/softdivide.c @@ -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 index 00000000000..eb571f65a74 --- /dev/null +++ b/libgcc/config/tilepro/softmpy.S @@ -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 index 00000000000..eddc45ce9d8 --- /dev/null +++ b/libgcc/config/tilepro/t-crtstuff @@ -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 index 00000000000..eb6894ce115 --- /dev/null +++ b/libgcc/config/tilepro/t-tilepro @@ -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 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index daebf23e69e..95a6303738e 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -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 index 00000000000..2e733a74018 --- /dev/null +++ b/libgomp/config/linux/tile/futex.h @@ -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 (); +} diff --git a/libgomp/configure.tgt b/libgomp/configure.tgt index ce8b9c2f929..210dd5da348 100644 --- a/libgomp/configure.tgt +++ b/libgomp/configure.tgt @@ -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" |