git subrepo pull (merge) --force deps/lightning
authorPaul Cercueil <paul@crapouillou.net>
Fri, 6 Oct 2023 21:32:55 +0000 (23:32 +0200)
committerPaul Cercueil <paul@crapouillou.net>
Fri, 6 Oct 2023 21:34:32 +0000 (23:34 +0200)
subrepo:
  subdir:   "deps/lightning"
  merged:   "4d1ef4c372"
upstream:
  origin:   "https://github.com/pcercuei/gnu_lightning.git"
  branch:   "pcsx_rearmed"
  commit:   "4d1ef4c372"
git-subrepo:
  version:  "0.4.6"
  origin:   "https://github.com/ingydotnet/git-subrepo.git"
  commit:   "110b9eb"

13 files changed:
deps/lightning/.gitrepo
deps/lightning/check/lightning.c
deps/lightning/check/qalu_shift.tst
deps/lightning/include/lightning/jit_private.h
deps/lightning/lib/jit_aarch64-cpu.c
deps/lightning/lib/jit_alpha-cpu.c
deps/lightning/lib/jit_fallback.c
deps/lightning/lib/jit_ia64-cpu.c
deps/lightning/lib/jit_mips-cpu.c
deps/lightning/lib/jit_ppc-cpu.c
deps/lightning/lib/jit_print.c
deps/lightning/lib/jit_x86-cpu.c
deps/lightning/lib/lightning.c

index 0ea98e5..6e32aaa 100644 (file)
@@ -6,7 +6,7 @@
 [subrepo]
        remote = https://github.com/pcercuei/gnu_lightning.git
        branch = pcsx_rearmed
-       commit = fe12b4b8d9989addcdb812db6da16fac3b3a9fa1
-       parent = 56e500f3428614e677ba5e9719f002046e87d980
+       commit = 4d1ef4c372a2d7cd1cd25c637a18d802af7dfcb4
+       parent = 0f67f144fb172e9eaa7a722a0a853350f77aad15
        method = merge
        cmdver = 0.4.6
index 42a6ed8..9bb5c5b 100644 (file)
@@ -509,7 +509,6 @@ static void unldr_x(void);  static void unldi_x(void);
 static void str_f(void);       static void sti_f(void);
 static void stxr_f(void);      static void stxi_f(void);
 static void unstr_x(void);     static void unsti_x(void);
-static void unldr_f(void);     static void unldi_f(void);
 static void bltr_f(void);      static void blti_f(void);
 static void bler_f(void);      static void blei_f(void);
 static void beqr_f(void);      static void beqi_f(void);
index fc030e4..226450f 100644 (file)
@@ -7,7 +7,7 @@ fmt:
 #  if __WORDSIZE == 32
 .c     "%s(%2d, 0x%08x, %2d, 0x%08x, 0x%08x)"
 #  else
-.c     "%s(%2d, 0x%016lx, %2d, 0x%016lx, 0x%016lx)"
+.c     "%s(%3d, 0x%016lx, %2d, 0x%016lx, 0x%016lx)"
 #  endif
 opt_start:
 .c     "\tOPTIONAL("
@@ -47,9 +47,11 @@ func_qlsh:
        prolog
        arg $value
        arg $shift
+       arg $num
        getarg %v0 $value
        getarg %v1 $shift
-       allocai $((__WORDSIZE >> 3) * 2) $buf
+       getarg %v2 $num
+       allocai $((__WORDSIZE >> 3) * 3) $buf
        beqi func_qlsh_zero %v1 0
        beqi func_qlsh_overflow %v1 __WORDSIZE
        rsbi %r0 %v1 __WORDSIZE
@@ -66,6 +68,7 @@ func_qlsh_zero:
 func_qlsh_done:
        stxi $buf %fp %r0
        stxi $($buf + (__WORDSIZE >> 3)) %fp %r1
+       stxi $($buf + (__WORDSIZE >> 2)) %fp %v2
        beqi func_qlsh_not_optional %v1 0
        beqi func_qlsh_not_optional %v1 1
        beqi func_qlsh_not_optional %v1 $(__WORDSIZE / 2 - 1)
@@ -88,11 +91,12 @@ func_qlsh_optional:
 func_qlsh_printf:
        ldxi %r0 %fp $buf
        ldxi %r1 %fp $($buf + (__WORDSIZE >> 3))
+       ldxi %r2 %fp $($buf + (__WORDSIZE >> 2))
        prepare
                pushargi fmt
                ellipsis
                pushargi QLSH
-               pushargr %v1
+               pushargr %r2
                pushargr %v0
                pushargr %v1
                pushargr %r0
@@ -115,9 +119,11 @@ func_qlsh_u:
        prolog
        arg $value
        arg $shift
+       arg $num
        getarg %v0 $value
        getarg %v1 $shift
-       allocai $((__WORDSIZE >> 3) * 2) $buf
+       getarg %v2 $num
+       allocai $((__WORDSIZE >> 3) * 3) $buf
        beqi func_qlsh_u_zero %v1 0
        beqi func_qlsh_u_overflow %v1 __WORDSIZE
        rsbi %r0 %v1 __WORDSIZE
@@ -134,6 +140,7 @@ func_qlsh_u_zero:
 func_qlsh_u_done:
        stxi $buf %fp %r0
        stxi $($buf + (__WORDSIZE >> 3)) %fp %r1
+       stxi $($buf + (__WORDSIZE >> 2)) %fp %v2
        beqi func_qlsh_u_not_optional %v1 0
        beqi func_qlsh_u_not_optional %v1 1
        beqi func_qlsh_u_not_optional %v1 $(__WORDSIZE / 2 - 1)
@@ -156,11 +163,12 @@ func_qlsh_u_optional:
 func_qlsh_u_printf:
        ldxi %r0 %fp $buf
        ldxi %r1 %fp $($buf + (__WORDSIZE >> 3))
+       ldxi %r2 %fp $($buf + (__WORDSIZE >> 2))
        prepare
                pushargi fmt
                ellipsis
                pushargi QLSHU
-               pushargr %v1
+               pushargr %r2
                pushargr %v0
                pushargr %v1
                pushargr %r0
@@ -183,9 +191,11 @@ func_qrsh:
        prolog
        arg $value
        arg $shift
+       arg $num
        getarg %v0 $value
        getarg %v1 $shift
-       allocai $((__WORDSIZE >> 3) * 2) $buf
+       getarg %v2 $num
+       allocai $((__WORDSIZE >> 3) * 3) $buf
        beqi func_qrsh_zero %v1 0
        beqi func_qrsh_overflow %v1 __WORDSIZE
        rsbi %r0 %v1 __WORDSIZE
@@ -198,10 +208,11 @@ func_qrsh_overflow:
        jmpi func_qrsh_done
 func_qrsh_zero:
        movr %r0 %v0
-       rshi %r1 %v0 $(__WORDSIZE - 1)
+       movi %r1 0
 func_qrsh_done:
        stxi $buf %fp %r0
        stxi $($buf + (__WORDSIZE >> 3)) %fp %r1
+       stxi $($buf + (__WORDSIZE >> 2)) %fp %v2
        beqi func_qrsh_not_optional %v1 0
        beqi func_qrsh_not_optional %v1 1
        beqi func_qrsh_not_optional %v1 $(__WORDSIZE / 2 - 1)
@@ -224,11 +235,12 @@ func_qrsh_optional:
 func_qrsh_printf:
        ldxi %r0 %fp $buf
        ldxi %r1 %fp $($buf + (__WORDSIZE >> 3))
+       ldxi %r2 %fp $($buf + (__WORDSIZE >> 2))
        prepare
                pushargi fmt
                ellipsis
                pushargi QRSH
-               pushargr %v1
+               pushargr %r2
                pushargr %v0
                pushargr %v1
                pushargr %r0
@@ -251,9 +263,11 @@ func_qrsh_u:
        prolog
        arg $value
        arg $shift
+       arg $num
        getarg %v0 $value
        getarg %v1 $shift
-       allocai $((__WORDSIZE >> 3) * 2) $buf
+       getarg %v2 $num
+       allocai $((__WORDSIZE >> 3) * 3) $buf
        beqi func_qrsh_u_zero %v1 0
        beqi func_qrsh_u_overflow %v1 __WORDSIZE
        rsbi %r0 %v1 __WORDSIZE
@@ -270,6 +284,7 @@ func_qrsh_u_zero:
 func_qrsh_u_done:
        stxi $buf %fp %r0
        stxi $($buf + (__WORDSIZE >> 3)) %fp %r1
+       stxi $($buf + (__WORDSIZE >> 2)) %fp %v2
        beqi func_qrsh_u_not_optional %v1 0
        beqi func_qrsh_u_not_optional %v1 1
        beqi func_qrsh_u_not_optional %v1 $(__WORDSIZE / 2 - 1)
@@ -292,11 +307,12 @@ func_qrsh_u_optional:
 func_qrsh_u_printf:
        ldxi %r0 %fp $buf
        ldxi %r1 %fp $($buf + (__WORDSIZE >> 3))
+       ldxi %r2 %fp $($buf + (__WORDSIZE >> 2))
        prepare
                pushargi fmt
                ellipsis
                pushargi QRSHU
-               pushargr %v1
+               pushargr %r2
                pushargr %v0
                pushargr %v1
                pushargr %r0
@@ -321,428 +337,850 @@ main:
 #if GENTABLE
 #  if __WORDSIZE == 32
        movi %v0 0x89abcdef
+       movi %v2 0x12345678
 #  else
        movi %v0 0x89abcdef01234567
+       movi %v2 0x123456789abcdef0
 #  endif
        movi %v1 0
 loop:
        prepare
                pushargr %v0
                pushargr %v1
+               pushargr %v1
+       finishi func_qlsh
+       addi %r2 %v1 $(__WORDSIZE + 1)
+       prepare
+               pushargr %v2
+               pushargr %v1
+               pushargr %r2
        finishi func_qlsh
        prepare
                pushargr %v0
                pushargr %v1
+               pushargr %v1
+       finishi func_qlsh_u
+       addi %r2 %v1 $(__WORDSIZE + 1)
+       prepare
+               pushargr %v2
+               pushargr %v1
+               pushargr %r2
        finishi func_qlsh_u
        prepare
                pushargr %v0
                pushargr %v1
+               pushargr %v1
+       finishi func_qrsh
+       addi %r2 %v1 $(__WORDSIZE + 1)
+       prepare
+               pushargr %v2
+               pushargr %v1
+               pushargr %r2
        finishi func_qrsh
        prepare
                pushargr %v0
                pushargr %v1
+               pushargr %v1
+       finishi func_qrsh_u
+       addi %r2 %v1 $(__WORDSIZE + 1)
+       prepare
+               pushargr %v2
+               pushargr %v1
+               pushargr %r2
        finishi func_qrsh_u
        addi %v1 %v1 1
        blei loop %v1 __WORDSIZE
 #else
 #  if __WORDSIZE == 32
         QLSH( 0, 0x89abcdef,  0, 0x89abcdef, 0xffffffff)
+        QLSH(33, 0x12345678,  0, 0x12345678, 0x00000000)
        QLSHU( 0, 0x89abcdef,  0, 0x89abcdef, 0x00000000)
-        QRSH( 0, 0x89abcdef,  0, 0x89abcdef, 0xffffffff)
+       QLSHU(33, 0x12345678,  0, 0x12345678, 0x00000000)
+        QRSH( 0, 0x89abcdef,  0, 0x89abcdef, 0x00000000)
+        QRSH(33, 0x12345678,  0, 0x12345678, 0x00000000)
        QRSHU( 0, 0x89abcdef,  0, 0x89abcdef, 0x00000000)
+       QRSHU(33, 0x12345678,  0, 0x12345678, 0x00000000)
         QLSH( 1, 0x89abcdef,  1, 0x13579bde, 0xffffffff)
+        QLSH(34, 0x12345678,  1, 0x2468acf0, 0x00000000)
        QLSHU( 1, 0x89abcdef,  1, 0x13579bde, 0x00000001)
+       QLSHU(34, 0x12345678,  1, 0x2468acf0, 0x00000000)
         QRSH( 1, 0x89abcdef,  1, 0xc4d5e6f7, 0x80000000)
+        QRSH(34, 0x12345678,  1, 0x091a2b3c, 0x00000000)
        QRSHU( 1, 0x89abcdef,  1, 0x44d5e6f7, 0x80000000)
+       QRSHU(34, 0x12345678,  1, 0x091a2b3c, 0x00000000)
        OPTIONAL( QLSH( 2, 0x89abcdef,  2, 0x26af37bc, 0xfffffffe))
+       OPTIONAL( QLSH(35, 0x12345678,  2, 0x48d159e0, 0x00000000))
        OPTIONAL(QLSHU( 2, 0x89abcdef,  2, 0x26af37bc, 0x00000002))
+       OPTIONAL(QLSHU(35, 0x12345678,  2, 0x48d159e0, 0x00000000))
        OPTIONAL( QRSH( 2, 0x89abcdef,  2, 0xe26af37b, 0xc0000000))
+       OPTIONAL( QRSH(35, 0x12345678,  2, 0x048d159e, 0x00000000))
        OPTIONAL(QRSHU( 2, 0x89abcdef,  2, 0x226af37b, 0xc0000000))
+       OPTIONAL(QRSHU(35, 0x12345678,  2, 0x048d159e, 0x00000000))
        OPTIONAL( QLSH( 3, 0x89abcdef,  3, 0x4d5e6f78, 0xfffffffc))
+       OPTIONAL( QLSH(36, 0x12345678,  3, 0x91a2b3c0, 0x00000000))
        OPTIONAL(QLSHU( 3, 0x89abcdef,  3, 0x4d5e6f78, 0x00000004))
+       OPTIONAL(QLSHU(36, 0x12345678,  3, 0x91a2b3c0, 0x00000000))
        OPTIONAL( QRSH( 3, 0x89abcdef,  3, 0xf13579bd, 0xe0000000))
+       OPTIONAL( QRSH(36, 0x12345678,  3, 0x02468acf, 0x00000000))
        OPTIONAL(QRSHU( 3, 0x89abcdef,  3, 0x113579bd, 0xe0000000))
+       OPTIONAL(QRSHU(36, 0x12345678,  3, 0x02468acf, 0x00000000))
        OPTIONAL( QLSH( 4, 0x89abcdef,  4, 0x9abcdef0, 0xfffffff8))
+       OPTIONAL( QLSH(37, 0x12345678,  4, 0x23456780, 0x00000001))
        OPTIONAL(QLSHU( 4, 0x89abcdef,  4, 0x9abcdef0, 0x00000008))
+       OPTIONAL(QLSHU(37, 0x12345678,  4, 0x23456780, 0x00000001))
        OPTIONAL( QRSH( 4, 0x89abcdef,  4, 0xf89abcde, 0xf0000000))
+       OPTIONAL( QRSH(37, 0x12345678,  4, 0x01234567, 0x80000000))
        OPTIONAL(QRSHU( 4, 0x89abcdef,  4, 0x089abcde, 0xf0000000))
+       OPTIONAL(QRSHU(37, 0x12345678,  4, 0x01234567, 0x80000000))
        OPTIONAL( QLSH( 5, 0x89abcdef,  5, 0x3579bde0, 0xfffffff1))
+       OPTIONAL( QLSH(38, 0x12345678,  5, 0x468acf00, 0x00000002))
        OPTIONAL(QLSHU( 5, 0x89abcdef,  5, 0x3579bde0, 0x00000011))
+       OPTIONAL(QLSHU(38, 0x12345678,  5, 0x468acf00, 0x00000002))
        OPTIONAL( QRSH( 5, 0x89abcdef,  5, 0xfc4d5e6f, 0x78000000))
+       OPTIONAL( QRSH(38, 0x12345678,  5, 0x0091a2b3, 0xc0000000))
        OPTIONAL(QRSHU( 5, 0x89abcdef,  5, 0x044d5e6f, 0x78000000))
+       OPTIONAL(QRSHU(38, 0x12345678,  5, 0x0091a2b3, 0xc0000000))
        OPTIONAL( QLSH( 6, 0x89abcdef,  6, 0x6af37bc0, 0xffffffe2))
+       OPTIONAL( QLSH(39, 0x12345678,  6, 0x8d159e00, 0x00000004))
        OPTIONAL(QLSHU( 6, 0x89abcdef,  6, 0x6af37bc0, 0x00000022))
+       OPTIONAL(QLSHU(39, 0x12345678,  6, 0x8d159e00, 0x00000004))
        OPTIONAL( QRSH( 6, 0x89abcdef,  6, 0xfe26af37, 0xbc000000))
+       OPTIONAL( QRSH(39, 0x12345678,  6, 0x0048d159, 0xe0000000))
        OPTIONAL(QRSHU( 6, 0x89abcdef,  6, 0x0226af37, 0xbc000000))
+       OPTIONAL(QRSHU(39, 0x12345678,  6, 0x0048d159, 0xe0000000))
        OPTIONAL( QLSH( 7, 0x89abcdef,  7, 0xd5e6f780, 0xffffffc4))
+       OPTIONAL( QLSH(40, 0x12345678,  7, 0x1a2b3c00, 0x00000009))
        OPTIONAL(QLSHU( 7, 0x89abcdef,  7, 0xd5e6f780, 0x00000044))
+       OPTIONAL(QLSHU(40, 0x12345678,  7, 0x1a2b3c00, 0x00000009))
        OPTIONAL( QRSH( 7, 0x89abcdef,  7, 0xff13579b, 0xde000000))
+       OPTIONAL( QRSH(40, 0x12345678,  7, 0x002468ac, 0xf0000000))
        OPTIONAL(QRSHU( 7, 0x89abcdef,  7, 0x0113579b, 0xde000000))
+       OPTIONAL(QRSHU(40, 0x12345678,  7, 0x002468ac, 0xf0000000))
        OPTIONAL( QLSH( 8, 0x89abcdef,  8, 0xabcdef00, 0xffffff89))
+       OPTIONAL( QLSH(41, 0x12345678,  8, 0x34567800, 0x00000012))
        OPTIONAL(QLSHU( 8, 0x89abcdef,  8, 0xabcdef00, 0x00000089))
+       OPTIONAL(QLSHU(41, 0x12345678,  8, 0x34567800, 0x00000012))
        OPTIONAL( QRSH( 8, 0x89abcdef,  8, 0xff89abcd, 0xef000000))
+       OPTIONAL( QRSH(41, 0x12345678,  8, 0x00123456, 0x78000000))
        OPTIONAL(QRSHU( 8, 0x89abcdef,  8, 0x0089abcd, 0xef000000))
+       OPTIONAL(QRSHU(41, 0x12345678,  8, 0x00123456, 0x78000000))
        OPTIONAL( QLSH( 9, 0x89abcdef,  9, 0x579bde00, 0xffffff13))
+       OPTIONAL( QLSH(42, 0x12345678,  9, 0x68acf000, 0x00000024))
        OPTIONAL(QLSHU( 9, 0x89abcdef,  9, 0x579bde00, 0x00000113))
+       OPTIONAL(QLSHU(42, 0x12345678,  9, 0x68acf000, 0x00000024))
        OPTIONAL( QRSH( 9, 0x89abcdef,  9, 0xffc4d5e6, 0xf7800000))
+       OPTIONAL( QRSH(42, 0x12345678,  9, 0x00091a2b, 0x3c000000))
        OPTIONAL(QRSHU( 9, 0x89abcdef,  9, 0x0044d5e6, 0xf7800000))
+       OPTIONAL(QRSHU(42, 0x12345678,  9, 0x00091a2b, 0x3c000000))
        OPTIONAL( QLSH(10, 0x89abcdef, 10, 0xaf37bc00, 0xfffffe26))
+       OPTIONAL( QLSH(43, 0x12345678, 10, 0xd159e000, 0x00000048))
        OPTIONAL(QLSHU(10, 0x89abcdef, 10, 0xaf37bc00, 0x00000226))
+       OPTIONAL(QLSHU(43, 0x12345678, 10, 0xd159e000, 0x00000048))
        OPTIONAL( QRSH(10, 0x89abcdef, 10, 0xffe26af3, 0x7bc00000))
+       OPTIONAL( QRSH(43, 0x12345678, 10, 0x00048d15, 0x9e000000))
        OPTIONAL(QRSHU(10, 0x89abcdef, 10, 0x00226af3, 0x7bc00000))
+       OPTIONAL(QRSHU(43, 0x12345678, 10, 0x00048d15, 0x9e000000))
        OPTIONAL( QLSH(11, 0x89abcdef, 11, 0x5e6f7800, 0xfffffc4d))
+       OPTIONAL( QLSH(44, 0x12345678, 11, 0xa2b3c000, 0x00000091))
        OPTIONAL(QLSHU(11, 0x89abcdef, 11, 0x5e6f7800, 0x0000044d))
+       OPTIONAL(QLSHU(44, 0x12345678, 11, 0xa2b3c000, 0x00000091))
        OPTIONAL( QRSH(11, 0x89abcdef, 11, 0xfff13579, 0xbde00000))
+       OPTIONAL( QRSH(44, 0x12345678, 11, 0x0002468a, 0xcf000000))
        OPTIONAL(QRSHU(11, 0x89abcdef, 11, 0x00113579, 0xbde00000))
+       OPTIONAL(QRSHU(44, 0x12345678, 11, 0x0002468a, 0xcf000000))
        OPTIONAL( QLSH(12, 0x89abcdef, 12, 0xbcdef000, 0xfffff89a))
+       OPTIONAL( QLSH(45, 0x12345678, 12, 0x45678000, 0x00000123))
        OPTIONAL(QLSHU(12, 0x89abcdef, 12, 0xbcdef000, 0x0000089a))
+       OPTIONAL(QLSHU(45, 0x12345678, 12, 0x45678000, 0x00000123))
        OPTIONAL( QRSH(12, 0x89abcdef, 12, 0xfff89abc, 0xdef00000))
+       OPTIONAL( QRSH(45, 0x12345678, 12, 0x00012345, 0x67800000))
        OPTIONAL(QRSHU(12, 0x89abcdef, 12, 0x00089abc, 0xdef00000))
+       OPTIONAL(QRSHU(45, 0x12345678, 12, 0x00012345, 0x67800000))
        OPTIONAL( QLSH(13, 0x89abcdef, 13, 0x79bde000, 0xfffff135))
+       OPTIONAL( QLSH(46, 0x12345678, 13, 0x8acf0000, 0x00000246))
        OPTIONAL(QLSHU(13, 0x89abcdef, 13, 0x79bde000, 0x00001135))
+       OPTIONAL(QLSHU(46, 0x12345678, 13, 0x8acf0000, 0x00000246))
        OPTIONAL( QRSH(13, 0x89abcdef, 13, 0xfffc4d5e, 0x6f780000))
+       OPTIONAL( QRSH(46, 0x12345678, 13, 0x000091a2, 0xb3c00000))
        OPTIONAL(QRSHU(13, 0x89abcdef, 13, 0x00044d5e, 0x6f780000))
+       OPTIONAL(QRSHU(46, 0x12345678, 13, 0x000091a2, 0xb3c00000))
        OPTIONAL( QLSH(14, 0x89abcdef, 14, 0xf37bc000, 0xffffe26a))
+       OPTIONAL( QLSH(47, 0x12345678, 14, 0x159e0000, 0x0000048d))
        OPTIONAL(QLSHU(14, 0x89abcdef, 14, 0xf37bc000, 0x0000226a))
+       OPTIONAL(QLSHU(47, 0x12345678, 14, 0x159e0000, 0x0000048d))
        OPTIONAL( QRSH(14, 0x89abcdef, 14, 0xfffe26af, 0x37bc0000))
+       OPTIONAL( QRSH(47, 0x12345678, 14, 0x000048d1, 0x59e00000))
        OPTIONAL(QRSHU(14, 0x89abcdef, 14, 0x000226af, 0x37bc0000))
+       OPTIONAL(QRSHU(47, 0x12345678, 14, 0x000048d1, 0x59e00000))
         QLSH(15, 0x89abcdef, 15, 0xe6f78000, 0xffffc4d5)
+        QLSH(48, 0x12345678, 15, 0x2b3c0000, 0x0000091a)
        QLSHU(15, 0x89abcdef, 15, 0xe6f78000, 0x000044d5)
+       QLSHU(48, 0x12345678, 15, 0x2b3c0000, 0x0000091a)
         QRSH(15, 0x89abcdef, 15, 0xffff1357, 0x9bde0000)
+        QRSH(48, 0x12345678, 15, 0x00002468, 0xacf00000)
        QRSHU(15, 0x89abcdef, 15, 0x00011357, 0x9bde0000)
+       QRSHU(48, 0x12345678, 15, 0x00002468, 0xacf00000)
         QLSH(16, 0x89abcdef, 16, 0xcdef0000, 0xffff89ab)
+        QLSH(49, 0x12345678, 16, 0x56780000, 0x00001234)
        QLSHU(16, 0x89abcdef, 16, 0xcdef0000, 0x000089ab)
+       QLSHU(49, 0x12345678, 16, 0x56780000, 0x00001234)
         QRSH(16, 0x89abcdef, 16, 0xffff89ab, 0xcdef0000)
+        QRSH(49, 0x12345678, 16, 0x00001234, 0x56780000)
        QRSHU(16, 0x89abcdef, 16, 0x000089ab, 0xcdef0000)
+       QRSHU(49, 0x12345678, 16, 0x00001234, 0x56780000)
         QLSH(17, 0x89abcdef, 17, 0x9bde0000, 0xffff1357)
+        QLSH(50, 0x12345678, 17, 0xacf00000, 0x00002468)
        QLSHU(17, 0x89abcdef, 17, 0x9bde0000, 0x00011357)
+       QLSHU(50, 0x12345678, 17, 0xacf00000, 0x00002468)
         QRSH(17, 0x89abcdef, 17, 0xffffc4d5, 0xe6f78000)
+        QRSH(50, 0x12345678, 17, 0x0000091a, 0x2b3c0000)
        QRSHU(17, 0x89abcdef, 17, 0x000044d5, 0xe6f78000)
+       QRSHU(50, 0x12345678, 17, 0x0000091a, 0x2b3c0000)
        OPTIONAL( QLSH(18, 0x89abcdef, 18, 0x37bc0000, 0xfffe26af))
+       OPTIONAL( QLSH(51, 0x12345678, 18, 0x59e00000, 0x000048d1))
        OPTIONAL(QLSHU(18, 0x89abcdef, 18, 0x37bc0000, 0x000226af))
+       OPTIONAL(QLSHU(51, 0x12345678, 18, 0x59e00000, 0x000048d1))
        OPTIONAL( QRSH(18, 0x89abcdef, 18, 0xffffe26a, 0xf37bc000))
+       OPTIONAL( QRSH(51, 0x12345678, 18, 0x0000048d, 0x159e0000))
        OPTIONAL(QRSHU(18, 0x89abcdef, 18, 0x0000226a, 0xf37bc000))
+       OPTIONAL(QRSHU(51, 0x12345678, 18, 0x0000048d, 0x159e0000))
        OPTIONAL( QLSH(19, 0x89abcdef, 19, 0x6f780000, 0xfffc4d5e))
+       OPTIONAL( QLSH(52, 0x12345678, 19, 0xb3c00000, 0x000091a2))
        OPTIONAL(QLSHU(19, 0x89abcdef, 19, 0x6f780000, 0x00044d5e))
+       OPTIONAL(QLSHU(52, 0x12345678, 19, 0xb3c00000, 0x000091a2))
        OPTIONAL( QRSH(19, 0x89abcdef, 19, 0xfffff135, 0x79bde000))
+       OPTIONAL( QRSH(52, 0x12345678, 19, 0x00000246, 0x8acf0000))
        OPTIONAL(QRSHU(19, 0x89abcdef, 19, 0x00001135, 0x79bde000))
+       OPTIONAL(QRSHU(52, 0x12345678, 19, 0x00000246, 0x8acf0000))
        OPTIONAL( QLSH(20, 0x89abcdef, 20, 0xdef00000, 0xfff89abc))
+       OPTIONAL( QLSH(53, 0x12345678, 20, 0x67800000, 0x00012345))
        OPTIONAL(QLSHU(20, 0x89abcdef, 20, 0xdef00000, 0x00089abc))
+       OPTIONAL(QLSHU(53, 0x12345678, 20, 0x67800000, 0x00012345))
        OPTIONAL( QRSH(20, 0x89abcdef, 20, 0xfffff89a, 0xbcdef000))
+       OPTIONAL( QRSH(53, 0x12345678, 20, 0x00000123, 0x45678000))
        OPTIONAL(QRSHU(20, 0x89abcdef, 20, 0x0000089a, 0xbcdef000))
+       OPTIONAL(QRSHU(53, 0x12345678, 20, 0x00000123, 0x45678000))
        OPTIONAL( QLSH(21, 0x89abcdef, 21, 0xbde00000, 0xfff13579))
+       OPTIONAL( QLSH(54, 0x12345678, 21, 0xcf000000, 0x0002468a))
        OPTIONAL(QLSHU(21, 0x89abcdef, 21, 0xbde00000, 0x00113579))
+       OPTIONAL(QLSHU(54, 0x12345678, 21, 0xcf000000, 0x0002468a))
        OPTIONAL( QRSH(21, 0x89abcdef, 21, 0xfffffc4d, 0x5e6f7800))
+       OPTIONAL( QRSH(54, 0x12345678, 21, 0x00000091, 0xa2b3c000))
        OPTIONAL(QRSHU(21, 0x89abcdef, 21, 0x0000044d, 0x5e6f7800))
+       OPTIONAL(QRSHU(54, 0x12345678, 21, 0x00000091, 0xa2b3c000))
        OPTIONAL( QLSH(22, 0x89abcdef, 22, 0x7bc00000, 0xffe26af3))
+       OPTIONAL( QLSH(55, 0x12345678, 22, 0x9e000000, 0x00048d15))
        OPTIONAL(QLSHU(22, 0x89abcdef, 22, 0x7bc00000, 0x00226af3))
+       OPTIONAL(QLSHU(55, 0x12345678, 22, 0x9e000000, 0x00048d15))
        OPTIONAL( QRSH(22, 0x89abcdef, 22, 0xfffffe26, 0xaf37bc00))
+       OPTIONAL( QRSH(55, 0x12345678, 22, 0x00000048, 0xd159e000))
        OPTIONAL(QRSHU(22, 0x89abcdef, 22, 0x00000226, 0xaf37bc00))
+       OPTIONAL(QRSHU(55, 0x12345678, 22, 0x00000048, 0xd159e000))
        OPTIONAL( QLSH(23, 0x89abcdef, 23, 0xf7800000, 0xffc4d5e6))
+       OPTIONAL( QLSH(56, 0x12345678, 23, 0x3c000000, 0x00091a2b))
        OPTIONAL(QLSHU(23, 0x89abcdef, 23, 0xf7800000, 0x0044d5e6))
+       OPTIONAL(QLSHU(56, 0x12345678, 23, 0x3c000000, 0x00091a2b))
        OPTIONAL( QRSH(23, 0x89abcdef, 23, 0xffffff13, 0x579bde00))
+       OPTIONAL( QRSH(56, 0x12345678, 23, 0x00000024, 0x68acf000))
        OPTIONAL(QRSHU(23, 0x89abcdef, 23, 0x00000113, 0x579bde00))
+       OPTIONAL(QRSHU(56, 0x12345678, 23, 0x00000024, 0x68acf000))
        OPTIONAL( QLSH(24, 0x89abcdef, 24, 0xef000000, 0xff89abcd))
+       OPTIONAL( QLSH(57, 0x12345678, 24, 0x78000000, 0x00123456))
        OPTIONAL(QLSHU(24, 0x89abcdef, 24, 0xef000000, 0x0089abcd))
+       OPTIONAL(QLSHU(57, 0x12345678, 24, 0x78000000, 0x00123456))
        OPTIONAL( QRSH(24, 0x89abcdef, 24, 0xffffff89, 0xabcdef00))
+       OPTIONAL( QRSH(57, 0x12345678, 24, 0x00000012, 0x34567800))
        OPTIONAL(QRSHU(24, 0x89abcdef, 24, 0x00000089, 0xabcdef00))
+       OPTIONAL(QRSHU(57, 0x12345678, 24, 0x00000012, 0x34567800))
        OPTIONAL( QLSH(25, 0x89abcdef, 25, 0xde000000, 0xff13579b))
+       OPTIONAL( QLSH(58, 0x12345678, 25, 0xf0000000, 0x002468ac))
        OPTIONAL(QLSHU(25, 0x89abcdef, 25, 0xde000000, 0x0113579b))
+       OPTIONAL(QLSHU(58, 0x12345678, 25, 0xf0000000, 0x002468ac))
        OPTIONAL( QRSH(25, 0x89abcdef, 25, 0xffffffc4, 0xd5e6f780))
+       OPTIONAL( QRSH(58, 0x12345678, 25, 0x00000009, 0x1a2b3c00))
        OPTIONAL(QRSHU(25, 0x89abcdef, 25, 0x00000044, 0xd5e6f780))
+       OPTIONAL(QRSHU(58, 0x12345678, 25, 0x00000009, 0x1a2b3c00))
        OPTIONAL( QLSH(26, 0x89abcdef, 26, 0xbc000000, 0xfe26af37))
+       OPTIONAL( QLSH(59, 0x12345678, 26, 0xe0000000, 0x0048d159))
        OPTIONAL(QLSHU(26, 0x89abcdef, 26, 0xbc000000, 0x0226af37))
+       OPTIONAL(QLSHU(59, 0x12345678, 26, 0xe0000000, 0x0048d159))
        OPTIONAL( QRSH(26, 0x89abcdef, 26, 0xffffffe2, 0x6af37bc0))
+       OPTIONAL( QRSH(59, 0x12345678, 26, 0x00000004, 0x8d159e00))
        OPTIONAL(QRSHU(26, 0x89abcdef, 26, 0x00000022, 0x6af37bc0))
+       OPTIONAL(QRSHU(59, 0x12345678, 26, 0x00000004, 0x8d159e00))
        OPTIONAL( QLSH(27, 0x89abcdef, 27, 0x78000000, 0xfc4d5e6f))
+       OPTIONAL( QLSH(60, 0x12345678, 27, 0xc0000000, 0x0091a2b3))
        OPTIONAL(QLSHU(27, 0x89abcdef, 27, 0x78000000, 0x044d5e6f))
+       OPTIONAL(QLSHU(60, 0x12345678, 27, 0xc0000000, 0x0091a2b3))
        OPTIONAL( QRSH(27, 0x89abcdef, 27, 0xfffffff1, 0x3579bde0))
+       OPTIONAL( QRSH(60, 0x12345678, 27, 0x00000002, 0x468acf00))
        OPTIONAL(QRSHU(27, 0x89abcdef, 27, 0x00000011, 0x3579bde0))
+       OPTIONAL(QRSHU(60, 0x12345678, 27, 0x00000002, 0x468acf00))
        OPTIONAL( QLSH(28, 0x89abcdef, 28, 0xf0000000, 0xf89abcde))
+       OPTIONAL( QLSH(61, 0x12345678, 28, 0x80000000, 0x01234567))
        OPTIONAL(QLSHU(28, 0x89abcdef, 28, 0xf0000000, 0x089abcde))
+       OPTIONAL(QLSHU(61, 0x12345678, 28, 0x80000000, 0x01234567))
        OPTIONAL( QRSH(28, 0x89abcdef, 28, 0xfffffff8, 0x9abcdef0))
+       OPTIONAL( QRSH(61, 0x12345678, 28, 0x00000001, 0x23456780))
        OPTIONAL(QRSHU(28, 0x89abcdef, 28, 0x00000008, 0x9abcdef0))
+       OPTIONAL(QRSHU(61, 0x12345678, 28, 0x00000001, 0x23456780))
        OPTIONAL( QLSH(29, 0x89abcdef, 29, 0xe0000000, 0xf13579bd))
+       OPTIONAL( QLSH(62, 0x12345678, 29, 0x00000000, 0x02468acf))
        OPTIONAL(QLSHU(29, 0x89abcdef, 29, 0xe0000000, 0x113579bd))
+       OPTIONAL(QLSHU(62, 0x12345678, 29, 0x00000000, 0x02468acf))
        OPTIONAL( QRSH(29, 0x89abcdef, 29, 0xfffffffc, 0x4d5e6f78))
+       OPTIONAL( QRSH(62, 0x12345678, 29, 0x00000000, 0x91a2b3c0))
        OPTIONAL(QRSHU(29, 0x89abcdef, 29, 0x00000004, 0x4d5e6f78))
+       OPTIONAL(QRSHU(62, 0x12345678, 29, 0x00000000, 0x91a2b3c0))
        OPTIONAL( QLSH(30, 0x89abcdef, 30, 0xc0000000, 0xe26af37b))
+       OPTIONAL( QLSH(63, 0x12345678, 30, 0x00000000, 0x048d159e))
        OPTIONAL(QLSHU(30, 0x89abcdef, 30, 0xc0000000, 0x226af37b))
+       OPTIONAL(QLSHU(63, 0x12345678, 30, 0x00000000, 0x048d159e))
        OPTIONAL( QRSH(30, 0x89abcdef, 30, 0xfffffffe, 0x26af37bc))
+       OPTIONAL( QRSH(63, 0x12345678, 30, 0x00000000, 0x48d159e0))
        OPTIONAL(QRSHU(30, 0x89abcdef, 30, 0x00000002, 0x26af37bc))
+       OPTIONAL(QRSHU(63, 0x12345678, 30, 0x00000000, 0x48d159e0))
         QLSH(31, 0x89abcdef, 31, 0x80000000, 0xc4d5e6f7)
+        QLSH(64, 0x12345678, 31, 0x00000000, 0x091a2b3c)
        QLSHU(31, 0x89abcdef, 31, 0x80000000, 0x44d5e6f7)
+       QLSHU(64, 0x12345678, 31, 0x00000000, 0x091a2b3c)
         QRSH(31, 0x89abcdef, 31, 0xffffffff, 0x13579bde)
+        QRSH(64, 0x12345678, 31, 0x00000000, 0x2468acf0)
        QRSHU(31, 0x89abcdef, 31, 0x00000001, 0x13579bde)
+       QRSHU(64, 0x12345678, 31, 0x00000000, 0x2468acf0)
         QLSH(32, 0x89abcdef, 32, 0x00000000, 0x89abcdef)
+        QLSH(65, 0x12345678, 32, 0x00000000, 0x12345678)
        QLSHU(32, 0x89abcdef, 32, 0x00000000, 0x89abcdef)
+       QLSHU(65, 0x12345678, 32, 0x00000000, 0x12345678)
         QRSH(32, 0x89abcdef, 32, 0xffffffff, 0x89abcdef)
+        QRSH(65, 0x12345678, 32, 0x00000000, 0x12345678)
        QRSHU(32, 0x89abcdef, 32, 0x00000000, 0x89abcdef)
+       QRSHU(65, 0x12345678, 32, 0x00000000, 0x12345678)
 #  else
-        QLSH( 0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0xffffffffffffffff)
-       QLSHU( 0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0x0000000000000000)
-        QRSH( 0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0xffffffffffffffff)
-       QRSHU( 0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0x0000000000000000)
-        QLSH( 1, 0x89abcdef01234567,  1, 0x13579bde02468ace, 0xffffffffffffffff)
-       QLSHU( 1, 0x89abcdef01234567,  1, 0x13579bde02468ace, 0x0000000000000001)
-        QRSH( 1, 0x89abcdef01234567,  1, 0xc4d5e6f78091a2b3, 0x8000000000000000)
-       QRSHU( 1, 0x89abcdef01234567,  1, 0x44d5e6f78091a2b3, 0x8000000000000000)
-       OPTIONAL( QLSH( 2, 0x89abcdef01234567,  2, 0x26af37bc048d159c, 0xfffffffffffffffe))
-       OPTIONAL(QLSHU( 2, 0x89abcdef01234567,  2, 0x26af37bc048d159c, 0x0000000000000002))
-       OPTIONAL( QRSH( 2, 0x89abcdef01234567,  2, 0xe26af37bc048d159, 0xc000000000000000))
-       OPTIONAL(QRSHU( 2, 0x89abcdef01234567,  2, 0x226af37bc048d159, 0xc000000000000000))
-       OPTIONAL( QLSH( 3, 0x89abcdef01234567,  3, 0x4d5e6f78091a2b38, 0xfffffffffffffffc))
-       OPTIONAL(QLSHU( 3, 0x89abcdef01234567,  3, 0x4d5e6f78091a2b38, 0x0000000000000004))
-       OPTIONAL( QRSH( 3, 0x89abcdef01234567,  3, 0xf13579bde02468ac, 0xe000000000000000))
-       OPTIONAL(QRSHU( 3, 0x89abcdef01234567,  3, 0x113579bde02468ac, 0xe000000000000000))
-       OPTIONAL( QLSH( 4, 0x89abcdef01234567,  4, 0x9abcdef012345670, 0xfffffffffffffff8))
-       OPTIONAL(QLSHU( 4, 0x89abcdef01234567,  4, 0x9abcdef012345670, 0x0000000000000008))
-       OPTIONAL( QRSH( 4, 0x89abcdef01234567,  4, 0xf89abcdef0123456, 0x7000000000000000))
-       OPTIONAL(QRSHU( 4, 0x89abcdef01234567,  4, 0x089abcdef0123456, 0x7000000000000000))
-       OPTIONAL( QLSH( 5, 0x89abcdef01234567,  5, 0x3579bde02468ace0, 0xfffffffffffffff1))
-       OPTIONAL(QLSHU( 5, 0x89abcdef01234567,  5, 0x3579bde02468ace0, 0x0000000000000011))
-       OPTIONAL( QRSH( 5, 0x89abcdef01234567,  5, 0xfc4d5e6f78091a2b, 0x3800000000000000))
-       OPTIONAL(QRSHU( 5, 0x89abcdef01234567,  5, 0x044d5e6f78091a2b, 0x3800000000000000))
-       OPTIONAL( QLSH( 6, 0x89abcdef01234567,  6, 0x6af37bc048d159c0, 0xffffffffffffffe2))
-       OPTIONAL(QLSHU( 6, 0x89abcdef01234567,  6, 0x6af37bc048d159c0, 0x0000000000000022))
-       OPTIONAL( QRSH( 6, 0x89abcdef01234567,  6, 0xfe26af37bc048d15, 0x9c00000000000000))
-       OPTIONAL(QRSHU( 6, 0x89abcdef01234567,  6, 0x0226af37bc048d15, 0x9c00000000000000))
-       OPTIONAL( QLSH( 7, 0x89abcdef01234567,  7, 0xd5e6f78091a2b380, 0xffffffffffffffc4))
-       OPTIONAL(QLSHU( 7, 0x89abcdef01234567,  7, 0xd5e6f78091a2b380, 0x0000000000000044))
-       OPTIONAL( QRSH( 7, 0x89abcdef01234567,  7, 0xff13579bde02468a, 0xce00000000000000))
-       OPTIONAL(QRSHU( 7, 0x89abcdef01234567,  7, 0x0113579bde02468a, 0xce00000000000000))
-       OPTIONAL( QLSH( 8, 0x89abcdef01234567,  8, 0xabcdef0123456700, 0xffffffffffffff89))
-       OPTIONAL(QLSHU( 8, 0x89abcdef01234567,  8, 0xabcdef0123456700, 0x0000000000000089))
-       OPTIONAL( QRSH( 8, 0x89abcdef01234567,  8, 0xff89abcdef012345, 0x6700000000000000))
-       OPTIONAL(QRSHU( 8, 0x89abcdef01234567,  8, 0x0089abcdef012345, 0x6700000000000000))
-       OPTIONAL( QLSH( 9, 0x89abcdef01234567,  9, 0x579bde02468ace00, 0xffffffffffffff13))
-       OPTIONAL(QLSHU( 9, 0x89abcdef01234567,  9, 0x579bde02468ace00, 0x0000000000000113))
-       OPTIONAL( QRSH( 9, 0x89abcdef01234567,  9, 0xffc4d5e6f78091a2, 0xb380000000000000))
-       OPTIONAL(QRSHU( 9, 0x89abcdef01234567,  9, 0x0044d5e6f78091a2, 0xb380000000000000))
-       OPTIONAL( QLSH(10, 0x89abcdef01234567, 10, 0xaf37bc048d159c00, 0xfffffffffffffe26))
-       OPTIONAL(QLSHU(10, 0x89abcdef01234567, 10, 0xaf37bc048d159c00, 0x0000000000000226))
-       OPTIONAL( QRSH(10, 0x89abcdef01234567, 10, 0xffe26af37bc048d1, 0x59c0000000000000))
-       OPTIONAL(QRSHU(10, 0x89abcdef01234567, 10, 0x00226af37bc048d1, 0x59c0000000000000))
-       OPTIONAL( QLSH(11, 0x89abcdef01234567, 11, 0x5e6f78091a2b3800, 0xfffffffffffffc4d))
-       OPTIONAL(QLSHU(11, 0x89abcdef01234567, 11, 0x5e6f78091a2b3800, 0x000000000000044d))
-       OPTIONAL( QRSH(11, 0x89abcdef01234567, 11, 0xfff13579bde02468, 0xace0000000000000))
-       OPTIONAL(QRSHU(11, 0x89abcdef01234567, 11, 0x00113579bde02468, 0xace0000000000000))
-       OPTIONAL( QLSH(12, 0x89abcdef01234567, 12, 0xbcdef01234567000, 0xfffffffffffff89a))
-       OPTIONAL(QLSHU(12, 0x89abcdef01234567, 12, 0xbcdef01234567000, 0x000000000000089a))
-       OPTIONAL( QRSH(12, 0x89abcdef01234567, 12, 0xfff89abcdef01234, 0x5670000000000000))
-       OPTIONAL(QRSHU(12, 0x89abcdef01234567, 12, 0x00089abcdef01234, 0x5670000000000000))
-       OPTIONAL( QLSH(13, 0x89abcdef01234567, 13, 0x79bde02468ace000, 0xfffffffffffff135))
-       OPTIONAL(QLSHU(13, 0x89abcdef01234567, 13, 0x79bde02468ace000, 0x0000000000001135))
-       OPTIONAL( QRSH(13, 0x89abcdef01234567, 13, 0xfffc4d5e6f78091a, 0x2b38000000000000))
-       OPTIONAL(QRSHU(13, 0x89abcdef01234567, 13, 0x00044d5e6f78091a, 0x2b38000000000000))
-       OPTIONAL( QLSH(14, 0x89abcdef01234567, 14, 0xf37bc048d159c000, 0xffffffffffffe26a))
-       OPTIONAL(QLSHU(14, 0x89abcdef01234567, 14, 0xf37bc048d159c000, 0x000000000000226a))
-       OPTIONAL( QRSH(14, 0x89abcdef01234567, 14, 0xfffe26af37bc048d, 0x159c000000000000))
-       OPTIONAL(QRSHU(14, 0x89abcdef01234567, 14, 0x000226af37bc048d, 0x159c000000000000))
-       OPTIONAL( QLSH(15, 0x89abcdef01234567, 15, 0xe6f78091a2b38000, 0xffffffffffffc4d5))
-       OPTIONAL(QLSHU(15, 0x89abcdef01234567, 15, 0xe6f78091a2b38000, 0x00000000000044d5))
-       OPTIONAL( QRSH(15, 0x89abcdef01234567, 15, 0xffff13579bde0246, 0x8ace000000000000))
-       OPTIONAL(QRSHU(15, 0x89abcdef01234567, 15, 0x000113579bde0246, 0x8ace000000000000))
-       OPTIONAL( QLSH(16, 0x89abcdef01234567, 16, 0xcdef012345670000, 0xffffffffffff89ab))
-       OPTIONAL(QLSHU(16, 0x89abcdef01234567, 16, 0xcdef012345670000, 0x00000000000089ab))
-       OPTIONAL( QRSH(16, 0x89abcdef01234567, 16, 0xffff89abcdef0123, 0x4567000000000000))
-       OPTIONAL(QRSHU(16, 0x89abcdef01234567, 16, 0x000089abcdef0123, 0x4567000000000000))
-       OPTIONAL( QLSH(17, 0x89abcdef01234567, 17, 0x9bde02468ace0000, 0xffffffffffff1357))
-       OPTIONAL(QLSHU(17, 0x89abcdef01234567, 17, 0x9bde02468ace0000, 0x0000000000011357))
-       OPTIONAL( QRSH(17, 0x89abcdef01234567, 17, 0xffffc4d5e6f78091, 0xa2b3800000000000))
-       OPTIONAL(QRSHU(17, 0x89abcdef01234567, 17, 0x000044d5e6f78091, 0xa2b3800000000000))
-       OPTIONAL( QLSH(18, 0x89abcdef01234567, 18, 0x37bc048d159c0000, 0xfffffffffffe26af))
-       OPTIONAL(QLSHU(18, 0x89abcdef01234567, 18, 0x37bc048d159c0000, 0x00000000000226af))
-       OPTIONAL( QRSH(18, 0x89abcdef01234567, 18, 0xffffe26af37bc048, 0xd159c00000000000))
-       OPTIONAL(QRSHU(18, 0x89abcdef01234567, 18, 0x0000226af37bc048, 0xd159c00000000000))
-       OPTIONAL( QLSH(19, 0x89abcdef01234567, 19, 0x6f78091a2b380000, 0xfffffffffffc4d5e))
-       OPTIONAL(QLSHU(19, 0x89abcdef01234567, 19, 0x6f78091a2b380000, 0x0000000000044d5e))
-       OPTIONAL( QRSH(19, 0x89abcdef01234567, 19, 0xfffff13579bde024, 0x68ace00000000000))
-       OPTIONAL(QRSHU(19, 0x89abcdef01234567, 19, 0x0000113579bde024, 0x68ace00000000000))
-       OPTIONAL( QLSH(20, 0x89abcdef01234567, 20, 0xdef0123456700000, 0xfffffffffff89abc))
-       OPTIONAL(QLSHU(20, 0x89abcdef01234567, 20, 0xdef0123456700000, 0x0000000000089abc))
-       OPTIONAL( QRSH(20, 0x89abcdef01234567, 20, 0xfffff89abcdef012, 0x3456700000000000))
-       OPTIONAL(QRSHU(20, 0x89abcdef01234567, 20, 0x0000089abcdef012, 0x3456700000000000))
-       OPTIONAL( QLSH(21, 0x89abcdef01234567, 21, 0xbde02468ace00000, 0xfffffffffff13579))
-       OPTIONAL(QLSHU(21, 0x89abcdef01234567, 21, 0xbde02468ace00000, 0x0000000000113579))
-       OPTIONAL( QRSH(21, 0x89abcdef01234567, 21, 0xfffffc4d5e6f7809, 0x1a2b380000000000))
-       OPTIONAL(QRSHU(21, 0x89abcdef01234567, 21, 0x0000044d5e6f7809, 0x1a2b380000000000))
-       OPTIONAL( QLSH(22, 0x89abcdef01234567, 22, 0x7bc048d159c00000, 0xffffffffffe26af3))
-       OPTIONAL(QLSHU(22, 0x89abcdef01234567, 22, 0x7bc048d159c00000, 0x0000000000226af3))
-       OPTIONAL( QRSH(22, 0x89abcdef01234567, 22, 0xfffffe26af37bc04, 0x8d159c0000000000))
-       OPTIONAL(QRSHU(22, 0x89abcdef01234567, 22, 0x00000226af37bc04, 0x8d159c0000000000))
-       OPTIONAL( QLSH(23, 0x89abcdef01234567, 23, 0xf78091a2b3800000, 0xffffffffffc4d5e6))
-       OPTIONAL(QLSHU(23, 0x89abcdef01234567, 23, 0xf78091a2b3800000, 0x000000000044d5e6))
-       OPTIONAL( QRSH(23, 0x89abcdef01234567, 23, 0xffffff13579bde02, 0x468ace0000000000))
-       OPTIONAL(QRSHU(23, 0x89abcdef01234567, 23, 0x00000113579bde02, 0x468ace0000000000))
-       OPTIONAL( QLSH(24, 0x89abcdef01234567, 24, 0xef01234567000000, 0xffffffffff89abcd))
-       OPTIONAL(QLSHU(24, 0x89abcdef01234567, 24, 0xef01234567000000, 0x000000000089abcd))
-       OPTIONAL( QRSH(24, 0x89abcdef01234567, 24, 0xffffff89abcdef01, 0x2345670000000000))
-       OPTIONAL(QRSHU(24, 0x89abcdef01234567, 24, 0x00000089abcdef01, 0x2345670000000000))
-       OPTIONAL( QLSH(25, 0x89abcdef01234567, 25, 0xde02468ace000000, 0xffffffffff13579b))
-       OPTIONAL(QLSHU(25, 0x89abcdef01234567, 25, 0xde02468ace000000, 0x000000000113579b))
-       OPTIONAL( QRSH(25, 0x89abcdef01234567, 25, 0xffffffc4d5e6f780, 0x91a2b38000000000))
-       OPTIONAL(QRSHU(25, 0x89abcdef01234567, 25, 0x00000044d5e6f780, 0x91a2b38000000000))
-       OPTIONAL( QLSH(26, 0x89abcdef01234567, 26, 0xbc048d159c000000, 0xfffffffffe26af37))
-       OPTIONAL(QLSHU(26, 0x89abcdef01234567, 26, 0xbc048d159c000000, 0x000000000226af37))
-       OPTIONAL( QRSH(26, 0x89abcdef01234567, 26, 0xffffffe26af37bc0, 0x48d159c000000000))
-       OPTIONAL(QRSHU(26, 0x89abcdef01234567, 26, 0x000000226af37bc0, 0x48d159c000000000))
-       OPTIONAL( QLSH(27, 0x89abcdef01234567, 27, 0x78091a2b38000000, 0xfffffffffc4d5e6f))
-       OPTIONAL(QLSHU(27, 0x89abcdef01234567, 27, 0x78091a2b38000000, 0x00000000044d5e6f))
-       OPTIONAL( QRSH(27, 0x89abcdef01234567, 27, 0xfffffff13579bde0, 0x2468ace000000000))
-       OPTIONAL(QRSHU(27, 0x89abcdef01234567, 27, 0x000000113579bde0, 0x2468ace000000000))
-       OPTIONAL( QLSH(28, 0x89abcdef01234567, 28, 0xf012345670000000, 0xfffffffff89abcde))
-       OPTIONAL(QLSHU(28, 0x89abcdef01234567, 28, 0xf012345670000000, 0x00000000089abcde))
-       OPTIONAL( QRSH(28, 0x89abcdef01234567, 28, 0xfffffff89abcdef0, 0x1234567000000000))
-       OPTIONAL(QRSHU(28, 0x89abcdef01234567, 28, 0x000000089abcdef0, 0x1234567000000000))
-       OPTIONAL( QLSH(29, 0x89abcdef01234567, 29, 0xe02468ace0000000, 0xfffffffff13579bd))
-       OPTIONAL(QLSHU(29, 0x89abcdef01234567, 29, 0xe02468ace0000000, 0x00000000113579bd))
-       OPTIONAL( QRSH(29, 0x89abcdef01234567, 29, 0xfffffffc4d5e6f78, 0x091a2b3800000000))
-       OPTIONAL(QRSHU(29, 0x89abcdef01234567, 29, 0x000000044d5e6f78, 0x091a2b3800000000))
-       OPTIONAL( QLSH(30, 0x89abcdef01234567, 30, 0xc048d159c0000000, 0xffffffffe26af37b))
-       OPTIONAL(QLSHU(30, 0x89abcdef01234567, 30, 0xc048d159c0000000, 0x00000000226af37b))
-       OPTIONAL( QRSH(30, 0x89abcdef01234567, 30, 0xfffffffe26af37bc, 0x048d159c00000000))
-       OPTIONAL(QRSHU(30, 0x89abcdef01234567, 30, 0x0000000226af37bc, 0x048d159c00000000))
-        QLSH(31, 0x89abcdef01234567, 31, 0x8091a2b380000000, 0xffffffffc4d5e6f7)
-       QLSHU(31, 0x89abcdef01234567, 31, 0x8091a2b380000000, 0x0000000044d5e6f7)
-        QRSH(31, 0x89abcdef01234567, 31, 0xffffffff13579bde, 0x02468ace00000000)
-       QRSHU(31, 0x89abcdef01234567, 31, 0x0000000113579bde, 0x02468ace00000000)
-        QLSH(32, 0x89abcdef01234567, 32, 0x0123456700000000, 0xffffffff89abcdef)
-       QLSHU(32, 0x89abcdef01234567, 32, 0x0123456700000000, 0x0000000089abcdef)
-        QRSH(32, 0x89abcdef01234567, 32, 0xffffffff89abcdef, 0x0123456700000000)
-       QRSHU(32, 0x89abcdef01234567, 32, 0x0000000089abcdef, 0x0123456700000000)
-        QLSH(33, 0x89abcdef01234567, 33, 0x02468ace00000000, 0xffffffff13579bde)
-       QLSHU(33, 0x89abcdef01234567, 33, 0x02468ace00000000, 0x0000000113579bde)
-        QRSH(33, 0x89abcdef01234567, 33, 0xffffffffc4d5e6f7, 0x8091a2b380000000)
-       QRSHU(33, 0x89abcdef01234567, 33, 0x0000000044d5e6f7, 0x8091a2b380000000)
-       OPTIONAL( QLSH(34, 0x89abcdef01234567, 34, 0x048d159c00000000, 0xfffffffe26af37bc))
-       OPTIONAL(QLSHU(34, 0x89abcdef01234567, 34, 0x048d159c00000000, 0x0000000226af37bc))
-       OPTIONAL( QRSH(34, 0x89abcdef01234567, 34, 0xffffffffe26af37b, 0xc048d159c0000000))
-       OPTIONAL(QRSHU(34, 0x89abcdef01234567, 34, 0x00000000226af37b, 0xc048d159c0000000))
-       OPTIONAL( QLSH(35, 0x89abcdef01234567, 35, 0x091a2b3800000000, 0xfffffffc4d5e6f78))
-       OPTIONAL(QLSHU(35, 0x89abcdef01234567, 35, 0x091a2b3800000000, 0x000000044d5e6f78))
-       OPTIONAL( QRSH(35, 0x89abcdef01234567, 35, 0xfffffffff13579bd, 0xe02468ace0000000))
-       OPTIONAL(QRSHU(35, 0x89abcdef01234567, 35, 0x00000000113579bd, 0xe02468ace0000000))
-       OPTIONAL( QLSH(36, 0x89abcdef01234567, 36, 0x1234567000000000, 0xfffffff89abcdef0))
-       OPTIONAL(QLSHU(36, 0x89abcdef01234567, 36, 0x1234567000000000, 0x000000089abcdef0))
-       OPTIONAL( QRSH(36, 0x89abcdef01234567, 36, 0xfffffffff89abcde, 0xf012345670000000))
-       OPTIONAL(QRSHU(36, 0x89abcdef01234567, 36, 0x00000000089abcde, 0xf012345670000000))
-       OPTIONAL( QLSH(37, 0x89abcdef01234567, 37, 0x2468ace000000000, 0xfffffff13579bde0))
-       OPTIONAL(QLSHU(37, 0x89abcdef01234567, 37, 0x2468ace000000000, 0x000000113579bde0))
-       OPTIONAL( QRSH(37, 0x89abcdef01234567, 37, 0xfffffffffc4d5e6f, 0x78091a2b38000000))
-       OPTIONAL(QRSHU(37, 0x89abcdef01234567, 37, 0x00000000044d5e6f, 0x78091a2b38000000))
-       OPTIONAL( QLSH(38, 0x89abcdef01234567, 38, 0x48d159c000000000, 0xffffffe26af37bc0))
-       OPTIONAL(QLSHU(38, 0x89abcdef01234567, 38, 0x48d159c000000000, 0x000000226af37bc0))
-       OPTIONAL( QRSH(38, 0x89abcdef01234567, 38, 0xfffffffffe26af37, 0xbc048d159c000000))
-       OPTIONAL(QRSHU(38, 0x89abcdef01234567, 38, 0x000000000226af37, 0xbc048d159c000000))
-       OPTIONAL( QLSH(39, 0x89abcdef01234567, 39, 0x91a2b38000000000, 0xffffffc4d5e6f780))
-       OPTIONAL(QLSHU(39, 0x89abcdef01234567, 39, 0x91a2b38000000000, 0x00000044d5e6f780))
-       OPTIONAL( QRSH(39, 0x89abcdef01234567, 39, 0xffffffffff13579b, 0xde02468ace000000))
-       OPTIONAL(QRSHU(39, 0x89abcdef01234567, 39, 0x000000000113579b, 0xde02468ace000000))
-       OPTIONAL( QLSH(40, 0x89abcdef01234567, 40, 0x2345670000000000, 0xffffff89abcdef01))
-       OPTIONAL(QLSHU(40, 0x89abcdef01234567, 40, 0x2345670000000000, 0x00000089abcdef01))
-       OPTIONAL( QRSH(40, 0x89abcdef01234567, 40, 0xffffffffff89abcd, 0xef01234567000000))
-       OPTIONAL(QRSHU(40, 0x89abcdef01234567, 40, 0x000000000089abcd, 0xef01234567000000))
-       OPTIONAL( QLSH(41, 0x89abcdef01234567, 41, 0x468ace0000000000, 0xffffff13579bde02))
-       OPTIONAL(QLSHU(41, 0x89abcdef01234567, 41, 0x468ace0000000000, 0x00000113579bde02))
-       OPTIONAL( QRSH(41, 0x89abcdef01234567, 41, 0xffffffffffc4d5e6, 0xf78091a2b3800000))
-       OPTIONAL(QRSHU(41, 0x89abcdef01234567, 41, 0x000000000044d5e6, 0xf78091a2b3800000))
-       OPTIONAL( QLSH(42, 0x89abcdef01234567, 42, 0x8d159c0000000000, 0xfffffe26af37bc04))
-       OPTIONAL(QLSHU(42, 0x89abcdef01234567, 42, 0x8d159c0000000000, 0x00000226af37bc04))
-       OPTIONAL( QRSH(42, 0x89abcdef01234567, 42, 0xffffffffffe26af3, 0x7bc048d159c00000))
-       OPTIONAL(QRSHU(42, 0x89abcdef01234567, 42, 0x0000000000226af3, 0x7bc048d159c00000))
-       OPTIONAL( QLSH(43, 0x89abcdef01234567, 43, 0x1a2b380000000000, 0xfffffc4d5e6f7809))
-       OPTIONAL(QLSHU(43, 0x89abcdef01234567, 43, 0x1a2b380000000000, 0x0000044d5e6f7809))
-       OPTIONAL( QRSH(43, 0x89abcdef01234567, 43, 0xfffffffffff13579, 0xbde02468ace00000))
-       OPTIONAL(QRSHU(43, 0x89abcdef01234567, 43, 0x0000000000113579, 0xbde02468ace00000))
-       OPTIONAL( QLSH(44, 0x89abcdef01234567, 44, 0x3456700000000000, 0xfffff89abcdef012))
-       OPTIONAL(QLSHU(44, 0x89abcdef01234567, 44, 0x3456700000000000, 0x0000089abcdef012))
-       OPTIONAL( QRSH(44, 0x89abcdef01234567, 44, 0xfffffffffff89abc, 0xdef0123456700000))
-       OPTIONAL(QRSHU(44, 0x89abcdef01234567, 44, 0x0000000000089abc, 0xdef0123456700000))
-       OPTIONAL( QLSH(45, 0x89abcdef01234567, 45, 0x68ace00000000000, 0xfffff13579bde024))
-       OPTIONAL(QLSHU(45, 0x89abcdef01234567, 45, 0x68ace00000000000, 0x0000113579bde024))
-       OPTIONAL( QRSH(45, 0x89abcdef01234567, 45, 0xfffffffffffc4d5e, 0x6f78091a2b380000))
-       OPTIONAL(QRSHU(45, 0x89abcdef01234567, 45, 0x0000000000044d5e, 0x6f78091a2b380000))
-       OPTIONAL( QLSH(46, 0x89abcdef01234567, 46, 0xd159c00000000000, 0xffffe26af37bc048))
-       OPTIONAL(QLSHU(46, 0x89abcdef01234567, 46, 0xd159c00000000000, 0x0000226af37bc048))
-       OPTIONAL( QRSH(46, 0x89abcdef01234567, 46, 0xfffffffffffe26af, 0x37bc048d159c0000))
-       OPTIONAL(QRSHU(46, 0x89abcdef01234567, 46, 0x00000000000226af, 0x37bc048d159c0000))
-       OPTIONAL( QLSH(47, 0x89abcdef01234567, 47, 0xa2b3800000000000, 0xffffc4d5e6f78091))
-       OPTIONAL(QLSHU(47, 0x89abcdef01234567, 47, 0xa2b3800000000000, 0x000044d5e6f78091))
-       OPTIONAL( QRSH(47, 0x89abcdef01234567, 47, 0xffffffffffff1357, 0x9bde02468ace0000))
-       OPTIONAL(QRSHU(47, 0x89abcdef01234567, 47, 0x0000000000011357, 0x9bde02468ace0000))
-       OPTIONAL( QLSH(48, 0x89abcdef01234567, 48, 0x4567000000000000, 0xffff89abcdef0123))
-       OPTIONAL(QLSHU(48, 0x89abcdef01234567, 48, 0x4567000000000000, 0x000089abcdef0123))
-       OPTIONAL( QRSH(48, 0x89abcdef01234567, 48, 0xffffffffffff89ab, 0xcdef012345670000))
-       OPTIONAL(QRSHU(48, 0x89abcdef01234567, 48, 0x00000000000089ab, 0xcdef012345670000))
-       OPTIONAL( QLSH(49, 0x89abcdef01234567, 49, 0x8ace000000000000, 0xffff13579bde0246))
-       OPTIONAL(QLSHU(49, 0x89abcdef01234567, 49, 0x8ace000000000000, 0x000113579bde0246))
-       OPTIONAL( QRSH(49, 0x89abcdef01234567, 49, 0xffffffffffffc4d5, 0xe6f78091a2b38000))
-       OPTIONAL(QRSHU(49, 0x89abcdef01234567, 49, 0x00000000000044d5, 0xe6f78091a2b38000))
-       OPTIONAL( QLSH(50, 0x89abcdef01234567, 50, 0x159c000000000000, 0xfffe26af37bc048d))
-       OPTIONAL(QLSHU(50, 0x89abcdef01234567, 50, 0x159c000000000000, 0x000226af37bc048d))
-       OPTIONAL( QRSH(50, 0x89abcdef01234567, 50, 0xffffffffffffe26a, 0xf37bc048d159c000))
-       OPTIONAL(QRSHU(50, 0x89abcdef01234567, 50, 0x000000000000226a, 0xf37bc048d159c000))
-       OPTIONAL( QLSH(51, 0x89abcdef01234567, 51, 0x2b38000000000000, 0xfffc4d5e6f78091a))
-       OPTIONAL(QLSHU(51, 0x89abcdef01234567, 51, 0x2b38000000000000, 0x00044d5e6f78091a))
-       OPTIONAL( QRSH(51, 0x89abcdef01234567, 51, 0xfffffffffffff135, 0x79bde02468ace000))
-       OPTIONAL(QRSHU(51, 0x89abcdef01234567, 51, 0x0000000000001135, 0x79bde02468ace000))
-       OPTIONAL( QLSH(52, 0x89abcdef01234567, 52, 0x5670000000000000, 0xfff89abcdef01234))
-       OPTIONAL(QLSHU(52, 0x89abcdef01234567, 52, 0x5670000000000000, 0x00089abcdef01234))
-       OPTIONAL( QRSH(52, 0x89abcdef01234567, 52, 0xfffffffffffff89a, 0xbcdef01234567000))
-       OPTIONAL(QRSHU(52, 0x89abcdef01234567, 52, 0x000000000000089a, 0xbcdef01234567000))
-       OPTIONAL( QLSH(53, 0x89abcdef01234567, 53, 0xace0000000000000, 0xfff13579bde02468))
-       OPTIONAL(QLSHU(53, 0x89abcdef01234567, 53, 0xace0000000000000, 0x00113579bde02468))
-       OPTIONAL( QRSH(53, 0x89abcdef01234567, 53, 0xfffffffffffffc4d, 0x5e6f78091a2b3800))
-       OPTIONAL(QRSHU(53, 0x89abcdef01234567, 53, 0x000000000000044d, 0x5e6f78091a2b3800))
-       OPTIONAL( QLSH(54, 0x89abcdef01234567, 54, 0x59c0000000000000, 0xffe26af37bc048d1))
-       OPTIONAL(QLSHU(54, 0x89abcdef01234567, 54, 0x59c0000000000000, 0x00226af37bc048d1))
-       OPTIONAL( QRSH(54, 0x89abcdef01234567, 54, 0xfffffffffffffe26, 0xaf37bc048d159c00))
-       OPTIONAL(QRSHU(54, 0x89abcdef01234567, 54, 0x0000000000000226, 0xaf37bc048d159c00))
-       OPTIONAL( QLSH(55, 0x89abcdef01234567, 55, 0xb380000000000000, 0xffc4d5e6f78091a2))
-       OPTIONAL(QLSHU(55, 0x89abcdef01234567, 55, 0xb380000000000000, 0x0044d5e6f78091a2))
-       OPTIONAL( QRSH(55, 0x89abcdef01234567, 55, 0xffffffffffffff13, 0x579bde02468ace00))
-       OPTIONAL(QRSHU(55, 0x89abcdef01234567, 55, 0x0000000000000113, 0x579bde02468ace00))
-       OPTIONAL( QLSH(56, 0x89abcdef01234567, 56, 0x6700000000000000, 0xff89abcdef012345))
-       OPTIONAL(QLSHU(56, 0x89abcdef01234567, 56, 0x6700000000000000, 0x0089abcdef012345))
-       OPTIONAL( QRSH(56, 0x89abcdef01234567, 56, 0xffffffffffffff89, 0xabcdef0123456700))
-       OPTIONAL(QRSHU(56, 0x89abcdef01234567, 56, 0x0000000000000089, 0xabcdef0123456700))
-       OPTIONAL( QLSH(57, 0x89abcdef01234567, 57, 0xce00000000000000, 0xff13579bde02468a))
-       OPTIONAL(QLSHU(57, 0x89abcdef01234567, 57, 0xce00000000000000, 0x0113579bde02468a))
-       OPTIONAL( QRSH(57, 0x89abcdef01234567, 57, 0xffffffffffffffc4, 0xd5e6f78091a2b380))
-       OPTIONAL(QRSHU(57, 0x89abcdef01234567, 57, 0x0000000000000044, 0xd5e6f78091a2b380))
-       OPTIONAL( QLSH(58, 0x89abcdef01234567, 58, 0x9c00000000000000, 0xfe26af37bc048d15))
-       OPTIONAL(QLSHU(58, 0x89abcdef01234567, 58, 0x9c00000000000000, 0x0226af37bc048d15))
-       OPTIONAL( QRSH(58, 0x89abcdef01234567, 58, 0xffffffffffffffe2, 0x6af37bc048d159c0))
-       OPTIONAL(QRSHU(58, 0x89abcdef01234567, 58, 0x0000000000000022, 0x6af37bc048d159c0))
-       OPTIONAL( QLSH(59, 0x89abcdef01234567, 59, 0x3800000000000000, 0xfc4d5e6f78091a2b))
-       OPTIONAL(QLSHU(59, 0x89abcdef01234567, 59, 0x3800000000000000, 0x044d5e6f78091a2b))
-       OPTIONAL( QRSH(59, 0x89abcdef01234567, 59, 0xfffffffffffffff1, 0x3579bde02468ace0))
-       OPTIONAL(QRSHU(59, 0x89abcdef01234567, 59, 0x0000000000000011, 0x3579bde02468ace0))
-       OPTIONAL( QLSH(60, 0x89abcdef01234567, 60, 0x7000000000000000, 0xf89abcdef0123456))
-       OPTIONAL(QLSHU(60, 0x89abcdef01234567, 60, 0x7000000000000000, 0x089abcdef0123456))
-       OPTIONAL( QRSH(60, 0x89abcdef01234567, 60, 0xfffffffffffffff8, 0x9abcdef012345670))
-       OPTIONAL(QRSHU(60, 0x89abcdef01234567, 60, 0x0000000000000008, 0x9abcdef012345670))
-       OPTIONAL( QLSH(61, 0x89abcdef01234567, 61, 0xe000000000000000, 0xf13579bde02468ac))
-       OPTIONAL(QLSHU(61, 0x89abcdef01234567, 61, 0xe000000000000000, 0x113579bde02468ac))
-       OPTIONAL( QRSH(61, 0x89abcdef01234567, 61, 0xfffffffffffffffc, 0x4d5e6f78091a2b38))
-       OPTIONAL(QRSHU(61, 0x89abcdef01234567, 61, 0x0000000000000004, 0x4d5e6f78091a2b38))
-       OPTIONAL( QLSH(62, 0x89abcdef01234567, 62, 0xc000000000000000, 0xe26af37bc048d159))
-       OPTIONAL(QLSHU(62, 0x89abcdef01234567, 62, 0xc000000000000000, 0x226af37bc048d159))
-       OPTIONAL( QRSH(62, 0x89abcdef01234567, 62, 0xfffffffffffffffe, 0x26af37bc048d159c))
-       OPTIONAL(QRSHU(62, 0x89abcdef01234567, 62, 0x0000000000000002, 0x26af37bc048d159c))
-        QLSH(63, 0x89abcdef01234567, 63, 0x8000000000000000, 0xc4d5e6f78091a2b3)
-       QLSHU(63, 0x89abcdef01234567, 63, 0x8000000000000000, 0x44d5e6f78091a2b3)
-        QRSH(63, 0x89abcdef01234567, 63, 0xffffffffffffffff, 0x13579bde02468ace)
-       QRSHU(63, 0x89abcdef01234567, 63, 0x0000000000000001, 0x13579bde02468ace)
-        QLSH(64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
-       QLSHU(64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
-        QRSH(64, 0x89abcdef01234567, 64, 0xffffffffffffffff, 0x89abcdef01234567)
-       QRSHU(64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
+        QLSH(  0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0xffffffffffffffff)
+        QLSH( 65, 0x123456789abcdef0,  0, 0x123456789abcdef0, 0x0000000000000000)
+       QLSHU(  0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0x0000000000000000)
+       QLSHU( 65, 0x123456789abcdef0,  0, 0x123456789abcdef0, 0x0000000000000000)
+        QRSH(  0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0x0000000000000000)
+        QRSH( 65, 0x123456789abcdef0,  0, 0x123456789abcdef0, 0x0000000000000000)
+       QRSHU(  0, 0x89abcdef01234567,  0, 0x89abcdef01234567, 0x0000000000000000)
+       QRSHU( 65, 0x123456789abcdef0,  0, 0x123456789abcdef0, 0x0000000000000000)
+        QLSH(  1, 0x89abcdef01234567,  1, 0x13579bde02468ace, 0xffffffffffffffff)
+        QLSH( 66, 0x123456789abcdef0,  1, 0x2468acf13579bde0, 0x0000000000000000)
+       QLSHU(  1, 0x89abcdef01234567,  1, 0x13579bde02468ace, 0x0000000000000001)
+       QLSHU( 66, 0x123456789abcdef0,  1, 0x2468acf13579bde0, 0x0000000000000000)
+        QRSH(  1, 0x89abcdef01234567,  1, 0xc4d5e6f78091a2b3, 0x8000000000000000)
+        QRSH( 66, 0x123456789abcdef0,  1, 0x091a2b3c4d5e6f78, 0x0000000000000000)
+       QRSHU(  1, 0x89abcdef01234567,  1, 0x44d5e6f78091a2b3, 0x8000000000000000)
+       QRSHU( 66, 0x123456789abcdef0,  1, 0x091a2b3c4d5e6f78, 0x0000000000000000)
+       OPTIONAL( QLSH(  2, 0x89abcdef01234567,  2, 0x26af37bc048d159c, 0xfffffffffffffffe))
+       OPTIONAL( QLSH( 67, 0x123456789abcdef0,  2, 0x48d159e26af37bc0, 0x0000000000000000))
+       OPTIONAL(QLSHU(  2, 0x89abcdef01234567,  2, 0x26af37bc048d159c, 0x0000000000000002))
+       OPTIONAL(QLSHU( 67, 0x123456789abcdef0,  2, 0x48d159e26af37bc0, 0x0000000000000000))
+       OPTIONAL( QRSH(  2, 0x89abcdef01234567,  2, 0xe26af37bc048d159, 0xc000000000000000))
+       OPTIONAL( QRSH( 67, 0x123456789abcdef0,  2, 0x048d159e26af37bc, 0x0000000000000000))
+       OPTIONAL(QRSHU(  2, 0x89abcdef01234567,  2, 0x226af37bc048d159, 0xc000000000000000))
+       OPTIONAL(QRSHU( 67, 0x123456789abcdef0,  2, 0x048d159e26af37bc, 0x0000000000000000))
+       OPTIONAL( QLSH(  3, 0x89abcdef01234567,  3, 0x4d5e6f78091a2b38, 0xfffffffffffffffc))
+       OPTIONAL( QLSH( 68, 0x123456789abcdef0,  3, 0x91a2b3c4d5e6f780, 0x0000000000000000))
+       OPTIONAL(QLSHU(  3, 0x89abcdef01234567,  3, 0x4d5e6f78091a2b38, 0x0000000000000004))
+       OPTIONAL(QLSHU( 68, 0x123456789abcdef0,  3, 0x91a2b3c4d5e6f780, 0x0000000000000000))
+       OPTIONAL( QRSH(  3, 0x89abcdef01234567,  3, 0xf13579bde02468ac, 0xe000000000000000))
+       OPTIONAL( QRSH( 68, 0x123456789abcdef0,  3, 0x02468acf13579bde, 0x0000000000000000))
+       OPTIONAL(QRSHU(  3, 0x89abcdef01234567,  3, 0x113579bde02468ac, 0xe000000000000000))
+       OPTIONAL(QRSHU( 68, 0x123456789abcdef0,  3, 0x02468acf13579bde, 0x0000000000000000))
+       OPTIONAL( QLSH(  4, 0x89abcdef01234567,  4, 0x9abcdef012345670, 0xfffffffffffffff8))
+       OPTIONAL( QLSH( 69, 0x123456789abcdef0,  4, 0x23456789abcdef00, 0x0000000000000001))
+       OPTIONAL(QLSHU(  4, 0x89abcdef01234567,  4, 0x9abcdef012345670, 0x0000000000000008))
+       OPTIONAL(QLSHU( 69, 0x123456789abcdef0,  4, 0x23456789abcdef00, 0x0000000000000001))
+       OPTIONAL( QRSH(  4, 0x89abcdef01234567,  4, 0xf89abcdef0123456, 0x7000000000000000))
+       OPTIONAL( QRSH( 69, 0x123456789abcdef0,  4, 0x0123456789abcdef, 0x0000000000000000))
+       OPTIONAL(QRSHU(  4, 0x89abcdef01234567,  4, 0x089abcdef0123456, 0x7000000000000000))
+       OPTIONAL(QRSHU( 69, 0x123456789abcdef0,  4, 0x0123456789abcdef, 0x0000000000000000))
+       OPTIONAL( QLSH(  5, 0x89abcdef01234567,  5, 0x3579bde02468ace0, 0xfffffffffffffff1))
+       OPTIONAL( QLSH( 70, 0x123456789abcdef0,  5, 0x468acf13579bde00, 0x0000000000000002))
+       OPTIONAL(QLSHU(  5, 0x89abcdef01234567,  5, 0x3579bde02468ace0, 0x0000000000000011))
+       OPTIONAL(QLSHU( 70, 0x123456789abcdef0,  5, 0x468acf13579bde00, 0x0000000000000002))
+       OPTIONAL( QRSH(  5, 0x89abcdef01234567,  5, 0xfc4d5e6f78091a2b, 0x3800000000000000))
+       OPTIONAL( QRSH( 70, 0x123456789abcdef0,  5, 0x0091a2b3c4d5e6f7, 0x8000000000000000))
+       OPTIONAL(QRSHU(  5, 0x89abcdef01234567,  5, 0x044d5e6f78091a2b, 0x3800000000000000))
+       OPTIONAL(QRSHU( 70, 0x123456789abcdef0,  5, 0x0091a2b3c4d5e6f7, 0x8000000000000000))
+       OPTIONAL( QLSH(  6, 0x89abcdef01234567,  6, 0x6af37bc048d159c0, 0xffffffffffffffe2))
+       OPTIONAL( QLSH( 71, 0x123456789abcdef0,  6, 0x8d159e26af37bc00, 0x0000000000000004))
+       OPTIONAL(QLSHU(  6, 0x89abcdef01234567,  6, 0x6af37bc048d159c0, 0x0000000000000022))
+       OPTIONAL(QLSHU( 71, 0x123456789abcdef0,  6, 0x8d159e26af37bc00, 0x0000000000000004))
+       OPTIONAL( QRSH(  6, 0x89abcdef01234567,  6, 0xfe26af37bc048d15, 0x9c00000000000000))
+       OPTIONAL( QRSH( 71, 0x123456789abcdef0,  6, 0x0048d159e26af37b, 0xc000000000000000))
+       OPTIONAL(QRSHU(  6, 0x89abcdef01234567,  6, 0x0226af37bc048d15, 0x9c00000000000000))
+       OPTIONAL(QRSHU( 71, 0x123456789abcdef0,  6, 0x0048d159e26af37b, 0xc000000000000000))
+       OPTIONAL( QLSH(  7, 0x89abcdef01234567,  7, 0xd5e6f78091a2b380, 0xffffffffffffffc4))
+       OPTIONAL( QLSH( 72, 0x123456789abcdef0,  7, 0x1a2b3c4d5e6f7800, 0x0000000000000009))
+       OPTIONAL(QLSHU(  7, 0x89abcdef01234567,  7, 0xd5e6f78091a2b380, 0x0000000000000044))
+       OPTIONAL(QLSHU( 72, 0x123456789abcdef0,  7, 0x1a2b3c4d5e6f7800, 0x0000000000000009))
+       OPTIONAL( QRSH(  7, 0x89abcdef01234567,  7, 0xff13579bde02468a, 0xce00000000000000))
+       OPTIONAL( QRSH( 72, 0x123456789abcdef0,  7, 0x002468acf13579bd, 0xe000000000000000))
+       OPTIONAL(QRSHU(  7, 0x89abcdef01234567,  7, 0x0113579bde02468a, 0xce00000000000000))
+       OPTIONAL(QRSHU( 72, 0x123456789abcdef0,  7, 0x002468acf13579bd, 0xe000000000000000))
+       OPTIONAL( QLSH(  8, 0x89abcdef01234567,  8, 0xabcdef0123456700, 0xffffffffffffff89))
+       OPTIONAL( QLSH( 73, 0x123456789abcdef0,  8, 0x3456789abcdef000, 0x0000000000000012))
+       OPTIONAL(QLSHU(  8, 0x89abcdef01234567,  8, 0xabcdef0123456700, 0x0000000000000089))
+       OPTIONAL(QLSHU( 73, 0x123456789abcdef0,  8, 0x3456789abcdef000, 0x0000000000000012))
+       OPTIONAL( QRSH(  8, 0x89abcdef01234567,  8, 0xff89abcdef012345, 0x6700000000000000))
+       OPTIONAL( QRSH( 73, 0x123456789abcdef0,  8, 0x00123456789abcde, 0xf000000000000000))
+       OPTIONAL(QRSHU(  8, 0x89abcdef01234567,  8, 0x0089abcdef012345, 0x6700000000000000))
+       OPTIONAL(QRSHU( 73, 0x123456789abcdef0,  8, 0x00123456789abcde, 0xf000000000000000))
+       OPTIONAL( QLSH(  9, 0x89abcdef01234567,  9, 0x579bde02468ace00, 0xffffffffffffff13))
+       OPTIONAL( QLSH( 74, 0x123456789abcdef0,  9, 0x68acf13579bde000, 0x0000000000000024))
+       OPTIONAL(QLSHU(  9, 0x89abcdef01234567,  9, 0x579bde02468ace00, 0x0000000000000113))
+       OPTIONAL(QLSHU( 74, 0x123456789abcdef0,  9, 0x68acf13579bde000, 0x0000000000000024))
+       OPTIONAL( QRSH(  9, 0x89abcdef01234567,  9, 0xffc4d5e6f78091a2, 0xb380000000000000))
+       OPTIONAL( QRSH( 74, 0x123456789abcdef0,  9, 0x00091a2b3c4d5e6f, 0x7800000000000000))
+       OPTIONAL(QRSHU(  9, 0x89abcdef01234567,  9, 0x0044d5e6f78091a2, 0xb380000000000000))
+       OPTIONAL(QRSHU( 74, 0x123456789abcdef0,  9, 0x00091a2b3c4d5e6f, 0x7800000000000000))
+       OPTIONAL( QLSH( 10, 0x89abcdef01234567, 10, 0xaf37bc048d159c00, 0xfffffffffffffe26))
+       OPTIONAL( QLSH( 75, 0x123456789abcdef0, 10, 0xd159e26af37bc000, 0x0000000000000048))
+       OPTIONAL(QLSHU( 10, 0x89abcdef01234567, 10, 0xaf37bc048d159c00, 0x0000000000000226))
+       OPTIONAL(QLSHU( 75, 0x123456789abcdef0, 10, 0xd159e26af37bc000, 0x0000000000000048))
+       OPTIONAL( QRSH( 10, 0x89abcdef01234567, 10, 0xffe26af37bc048d1, 0x59c0000000000000))
+       OPTIONAL( QRSH( 75, 0x123456789abcdef0, 10, 0x00048d159e26af37, 0xbc00000000000000))
+       OPTIONAL(QRSHU( 10, 0x89abcdef01234567, 10, 0x00226af37bc048d1, 0x59c0000000000000))
+       OPTIONAL(QRSHU( 75, 0x123456789abcdef0, 10, 0x00048d159e26af37, 0xbc00000000000000))
+       OPTIONAL( QLSH( 11, 0x89abcdef01234567, 11, 0x5e6f78091a2b3800, 0xfffffffffffffc4d))
+       OPTIONAL( QLSH( 76, 0x123456789abcdef0, 11, 0xa2b3c4d5e6f78000, 0x0000000000000091))
+       OPTIONAL(QLSHU( 11, 0x89abcdef01234567, 11, 0x5e6f78091a2b3800, 0x000000000000044d))
+       OPTIONAL(QLSHU( 76, 0x123456789abcdef0, 11, 0xa2b3c4d5e6f78000, 0x0000000000000091))
+       OPTIONAL( QRSH( 11, 0x89abcdef01234567, 11, 0xfff13579bde02468, 0xace0000000000000))
+       OPTIONAL( QRSH( 76, 0x123456789abcdef0, 11, 0x0002468acf13579b, 0xde00000000000000))
+       OPTIONAL(QRSHU( 11, 0x89abcdef01234567, 11, 0x00113579bde02468, 0xace0000000000000))
+       OPTIONAL(QRSHU( 76, 0x123456789abcdef0, 11, 0x0002468acf13579b, 0xde00000000000000))
+       OPTIONAL( QLSH( 12, 0x89abcdef01234567, 12, 0xbcdef01234567000, 0xfffffffffffff89a))
+       OPTIONAL( QLSH( 77, 0x123456789abcdef0, 12, 0x456789abcdef0000, 0x0000000000000123))
+       OPTIONAL(QLSHU( 12, 0x89abcdef01234567, 12, 0xbcdef01234567000, 0x000000000000089a))
+       OPTIONAL(QLSHU( 77, 0x123456789abcdef0, 12, 0x456789abcdef0000, 0x0000000000000123))
+       OPTIONAL( QRSH( 12, 0x89abcdef01234567, 12, 0xfff89abcdef01234, 0x5670000000000000))
+       OPTIONAL( QRSH( 77, 0x123456789abcdef0, 12, 0x000123456789abcd, 0xef00000000000000))
+       OPTIONAL(QRSHU( 12, 0x89abcdef01234567, 12, 0x00089abcdef01234, 0x5670000000000000))
+       OPTIONAL(QRSHU( 77, 0x123456789abcdef0, 12, 0x000123456789abcd, 0xef00000000000000))
+       OPTIONAL( QLSH( 13, 0x89abcdef01234567, 13, 0x79bde02468ace000, 0xfffffffffffff135))
+       OPTIONAL( QLSH( 78, 0x123456789abcdef0, 13, 0x8acf13579bde0000, 0x0000000000000246))
+       OPTIONAL(QLSHU( 13, 0x89abcdef01234567, 13, 0x79bde02468ace000, 0x0000000000001135))
+       OPTIONAL(QLSHU( 78, 0x123456789abcdef0, 13, 0x8acf13579bde0000, 0x0000000000000246))
+       OPTIONAL( QRSH( 13, 0x89abcdef01234567, 13, 0xfffc4d5e6f78091a, 0x2b38000000000000))
+       OPTIONAL( QRSH( 78, 0x123456789abcdef0, 13, 0x000091a2b3c4d5e6, 0xf780000000000000))
+       OPTIONAL(QRSHU( 13, 0x89abcdef01234567, 13, 0x00044d5e6f78091a, 0x2b38000000000000))
+       OPTIONAL(QRSHU( 78, 0x123456789abcdef0, 13, 0x000091a2b3c4d5e6, 0xf780000000000000))
+       OPTIONAL( QLSH( 14, 0x89abcdef01234567, 14, 0xf37bc048d159c000, 0xffffffffffffe26a))
+       OPTIONAL( QLSH( 79, 0x123456789abcdef0, 14, 0x159e26af37bc0000, 0x000000000000048d))
+       OPTIONAL(QLSHU( 14, 0x89abcdef01234567, 14, 0xf37bc048d159c000, 0x000000000000226a))
+       OPTIONAL(QLSHU( 79, 0x123456789abcdef0, 14, 0x159e26af37bc0000, 0x000000000000048d))
+       OPTIONAL( QRSH( 14, 0x89abcdef01234567, 14, 0xfffe26af37bc048d, 0x159c000000000000))
+       OPTIONAL( QRSH( 79, 0x123456789abcdef0, 14, 0x000048d159e26af3, 0x7bc0000000000000))
+       OPTIONAL(QRSHU( 14, 0x89abcdef01234567, 14, 0x000226af37bc048d, 0x159c000000000000))
+       OPTIONAL(QRSHU( 79, 0x123456789abcdef0, 14, 0x000048d159e26af3, 0x7bc0000000000000))
+       OPTIONAL( QLSH( 15, 0x89abcdef01234567, 15, 0xe6f78091a2b38000, 0xffffffffffffc4d5))
+       OPTIONAL( QLSH( 80, 0x123456789abcdef0, 15, 0x2b3c4d5e6f780000, 0x000000000000091a))
+       OPTIONAL(QLSHU( 15, 0x89abcdef01234567, 15, 0xe6f78091a2b38000, 0x00000000000044d5))
+       OPTIONAL(QLSHU( 80, 0x123456789abcdef0, 15, 0x2b3c4d5e6f780000, 0x000000000000091a))
+       OPTIONAL( QRSH( 15, 0x89abcdef01234567, 15, 0xffff13579bde0246, 0x8ace000000000000))
+       OPTIONAL( QRSH( 80, 0x123456789abcdef0, 15, 0x00002468acf13579, 0xbde0000000000000))
+       OPTIONAL(QRSHU( 15, 0x89abcdef01234567, 15, 0x000113579bde0246, 0x8ace000000000000))
+       OPTIONAL(QRSHU( 80, 0x123456789abcdef0, 15, 0x00002468acf13579, 0xbde0000000000000))
+       OPTIONAL( QLSH( 16, 0x89abcdef01234567, 16, 0xcdef012345670000, 0xffffffffffff89ab))
+       OPTIONAL( QLSH( 81, 0x123456789abcdef0, 16, 0x56789abcdef00000, 0x0000000000001234))
+       OPTIONAL(QLSHU( 16, 0x89abcdef01234567, 16, 0xcdef012345670000, 0x00000000000089ab))
+       OPTIONAL(QLSHU( 81, 0x123456789abcdef0, 16, 0x56789abcdef00000, 0x0000000000001234))
+       OPTIONAL( QRSH( 16, 0x89abcdef01234567, 16, 0xffff89abcdef0123, 0x4567000000000000))
+       OPTIONAL( QRSH( 81, 0x123456789abcdef0, 16, 0x0000123456789abc, 0xdef0000000000000))
+       OPTIONAL(QRSHU( 16, 0x89abcdef01234567, 16, 0x000089abcdef0123, 0x4567000000000000))
+       OPTIONAL(QRSHU( 81, 0x123456789abcdef0, 16, 0x0000123456789abc, 0xdef0000000000000))
+       OPTIONAL( QLSH( 17, 0x89abcdef01234567, 17, 0x9bde02468ace0000, 0xffffffffffff1357))
+       OPTIONAL( QLSH( 82, 0x123456789abcdef0, 17, 0xacf13579bde00000, 0x0000000000002468))
+       OPTIONAL(QLSHU( 17, 0x89abcdef01234567, 17, 0x9bde02468ace0000, 0x0000000000011357))
+       OPTIONAL(QLSHU( 82, 0x123456789abcdef0, 17, 0xacf13579bde00000, 0x0000000000002468))
+       OPTIONAL( QRSH( 17, 0x89abcdef01234567, 17, 0xffffc4d5e6f78091, 0xa2b3800000000000))
+       OPTIONAL( QRSH( 82, 0x123456789abcdef0, 17, 0x0000091a2b3c4d5e, 0x6f78000000000000))
+       OPTIONAL(QRSHU( 17, 0x89abcdef01234567, 17, 0x000044d5e6f78091, 0xa2b3800000000000))
+       OPTIONAL(QRSHU( 82, 0x123456789abcdef0, 17, 0x0000091a2b3c4d5e, 0x6f78000000000000))
+       OPTIONAL( QLSH( 18, 0x89abcdef01234567, 18, 0x37bc048d159c0000, 0xfffffffffffe26af))
+       OPTIONAL( QLSH( 83, 0x123456789abcdef0, 18, 0x59e26af37bc00000, 0x00000000000048d1))
+       OPTIONAL(QLSHU( 18, 0x89abcdef01234567, 18, 0x37bc048d159c0000, 0x00000000000226af))
+       OPTIONAL(QLSHU( 83, 0x123456789abcdef0, 18, 0x59e26af37bc00000, 0x00000000000048d1))
+       OPTIONAL( QRSH( 18, 0x89abcdef01234567, 18, 0xffffe26af37bc048, 0xd159c00000000000))
+       OPTIONAL( QRSH( 83, 0x123456789abcdef0, 18, 0x0000048d159e26af, 0x37bc000000000000))
+       OPTIONAL(QRSHU( 18, 0x89abcdef01234567, 18, 0x0000226af37bc048, 0xd159c00000000000))
+       OPTIONAL(QRSHU( 83, 0x123456789abcdef0, 18, 0x0000048d159e26af, 0x37bc000000000000))
+       OPTIONAL( QLSH( 19, 0x89abcdef01234567, 19, 0x6f78091a2b380000, 0xfffffffffffc4d5e))
+       OPTIONAL( QLSH( 84, 0x123456789abcdef0, 19, 0xb3c4d5e6f7800000, 0x00000000000091a2))
+       OPTIONAL(QLSHU( 19, 0x89abcdef01234567, 19, 0x6f78091a2b380000, 0x0000000000044d5e))
+       OPTIONAL(QLSHU( 84, 0x123456789abcdef0, 19, 0xb3c4d5e6f7800000, 0x00000000000091a2))
+       OPTIONAL( QRSH( 19, 0x89abcdef01234567, 19, 0xfffff13579bde024, 0x68ace00000000000))
+       OPTIONAL( QRSH( 84, 0x123456789abcdef0, 19, 0x000002468acf1357, 0x9bde000000000000))
+       OPTIONAL(QRSHU( 19, 0x89abcdef01234567, 19, 0x0000113579bde024, 0x68ace00000000000))
+       OPTIONAL(QRSHU( 84, 0x123456789abcdef0, 19, 0x000002468acf1357, 0x9bde000000000000))
+       OPTIONAL( QLSH( 20, 0x89abcdef01234567, 20, 0xdef0123456700000, 0xfffffffffff89abc))
+       OPTIONAL( QLSH( 85, 0x123456789abcdef0, 20, 0x6789abcdef000000, 0x0000000000012345))
+       OPTIONAL(QLSHU( 20, 0x89abcdef01234567, 20, 0xdef0123456700000, 0x0000000000089abc))
+       OPTIONAL(QLSHU( 85, 0x123456789abcdef0, 20, 0x6789abcdef000000, 0x0000000000012345))
+       OPTIONAL( QRSH( 20, 0x89abcdef01234567, 20, 0xfffff89abcdef012, 0x3456700000000000))
+       OPTIONAL( QRSH( 85, 0x123456789abcdef0, 20, 0x00000123456789ab, 0xcdef000000000000))
+       OPTIONAL(QRSHU( 20, 0x89abcdef01234567, 20, 0x0000089abcdef012, 0x3456700000000000))
+       OPTIONAL(QRSHU( 85, 0x123456789abcdef0, 20, 0x00000123456789ab, 0xcdef000000000000))
+       OPTIONAL( QLSH( 21, 0x89abcdef01234567, 21, 0xbde02468ace00000, 0xfffffffffff13579))
+       OPTIONAL( QLSH( 86, 0x123456789abcdef0, 21, 0xcf13579bde000000, 0x000000000002468a))
+       OPTIONAL(QLSHU( 21, 0x89abcdef01234567, 21, 0xbde02468ace00000, 0x0000000000113579))
+       OPTIONAL(QLSHU( 86, 0x123456789abcdef0, 21, 0xcf13579bde000000, 0x000000000002468a))
+       OPTIONAL( QRSH( 21, 0x89abcdef01234567, 21, 0xfffffc4d5e6f7809, 0x1a2b380000000000))
+       OPTIONAL( QRSH( 86, 0x123456789abcdef0, 21, 0x00000091a2b3c4d5, 0xe6f7800000000000))
+       OPTIONAL(QRSHU( 21, 0x89abcdef01234567, 21, 0x0000044d5e6f7809, 0x1a2b380000000000))
+       OPTIONAL(QRSHU( 86, 0x123456789abcdef0, 21, 0x00000091a2b3c4d5, 0xe6f7800000000000))
+       OPTIONAL( QLSH( 22, 0x89abcdef01234567, 22, 0x7bc048d159c00000, 0xffffffffffe26af3))
+       OPTIONAL( QLSH( 87, 0x123456789abcdef0, 22, 0x9e26af37bc000000, 0x0000000000048d15))
+       OPTIONAL(QLSHU( 22, 0x89abcdef01234567, 22, 0x7bc048d159c00000, 0x0000000000226af3))
+       OPTIONAL(QLSHU( 87, 0x123456789abcdef0, 22, 0x9e26af37bc000000, 0x0000000000048d15))
+       OPTIONAL( QRSH( 22, 0x89abcdef01234567, 22, 0xfffffe26af37bc04, 0x8d159c0000000000))
+       OPTIONAL( QRSH( 87, 0x123456789abcdef0, 22, 0x00000048d159e26a, 0xf37bc00000000000))
+       OPTIONAL(QRSHU( 22, 0x89abcdef01234567, 22, 0x00000226af37bc04, 0x8d159c0000000000))
+       OPTIONAL(QRSHU( 87, 0x123456789abcdef0, 22, 0x00000048d159e26a, 0xf37bc00000000000))
+       OPTIONAL( QLSH( 23, 0x89abcdef01234567, 23, 0xf78091a2b3800000, 0xffffffffffc4d5e6))
+       OPTIONAL( QLSH( 88, 0x123456789abcdef0, 23, 0x3c4d5e6f78000000, 0x0000000000091a2b))
+       OPTIONAL(QLSHU( 23, 0x89abcdef01234567, 23, 0xf78091a2b3800000, 0x000000000044d5e6))
+       OPTIONAL(QLSHU( 88, 0x123456789abcdef0, 23, 0x3c4d5e6f78000000, 0x0000000000091a2b))
+       OPTIONAL( QRSH( 23, 0x89abcdef01234567, 23, 0xffffff13579bde02, 0x468ace0000000000))
+       OPTIONAL( QRSH( 88, 0x123456789abcdef0, 23, 0x0000002468acf135, 0x79bde00000000000))
+       OPTIONAL(QRSHU( 23, 0x89abcdef01234567, 23, 0x00000113579bde02, 0x468ace0000000000))
+       OPTIONAL(QRSHU( 88, 0x123456789abcdef0, 23, 0x0000002468acf135, 0x79bde00000000000))
+       OPTIONAL( QLSH( 24, 0x89abcdef01234567, 24, 0xef01234567000000, 0xffffffffff89abcd))
+       OPTIONAL( QLSH( 89, 0x123456789abcdef0, 24, 0x789abcdef0000000, 0x0000000000123456))
+       OPTIONAL(QLSHU( 24, 0x89abcdef01234567, 24, 0xef01234567000000, 0x000000000089abcd))
+       OPTIONAL(QLSHU( 89, 0x123456789abcdef0, 24, 0x789abcdef0000000, 0x0000000000123456))
+       OPTIONAL( QRSH( 24, 0x89abcdef01234567, 24, 0xffffff89abcdef01, 0x2345670000000000))
+       OPTIONAL( QRSH( 89, 0x123456789abcdef0, 24, 0x000000123456789a, 0xbcdef00000000000))
+       OPTIONAL(QRSHU( 24, 0x89abcdef01234567, 24, 0x00000089abcdef01, 0x2345670000000000))
+       OPTIONAL(QRSHU( 89, 0x123456789abcdef0, 24, 0x000000123456789a, 0xbcdef00000000000))
+       OPTIONAL( QLSH( 25, 0x89abcdef01234567, 25, 0xde02468ace000000, 0xffffffffff13579b))
+       OPTIONAL( QLSH( 90, 0x123456789abcdef0, 25, 0xf13579bde0000000, 0x00000000002468ac))
+       OPTIONAL(QLSHU( 25, 0x89abcdef01234567, 25, 0xde02468ace000000, 0x000000000113579b))
+       OPTIONAL(QLSHU( 90, 0x123456789abcdef0, 25, 0xf13579bde0000000, 0x00000000002468ac))
+       OPTIONAL( QRSH( 25, 0x89abcdef01234567, 25, 0xffffffc4d5e6f780, 0x91a2b38000000000))
+       OPTIONAL( QRSH( 90, 0x123456789abcdef0, 25, 0x000000091a2b3c4d, 0x5e6f780000000000))
+       OPTIONAL(QRSHU( 25, 0x89abcdef01234567, 25, 0x00000044d5e6f780, 0x91a2b38000000000))
+       OPTIONAL(QRSHU( 90, 0x123456789abcdef0, 25, 0x000000091a2b3c4d, 0x5e6f780000000000))
+       OPTIONAL( QLSH( 26, 0x89abcdef01234567, 26, 0xbc048d159c000000, 0xfffffffffe26af37))
+       OPTIONAL( QLSH( 91, 0x123456789abcdef0, 26, 0xe26af37bc0000000, 0x000000000048d159))
+       OPTIONAL(QLSHU( 26, 0x89abcdef01234567, 26, 0xbc048d159c000000, 0x000000000226af37))
+       OPTIONAL(QLSHU( 91, 0x123456789abcdef0, 26, 0xe26af37bc0000000, 0x000000000048d159))
+       OPTIONAL( QRSH( 26, 0x89abcdef01234567, 26, 0xffffffe26af37bc0, 0x48d159c000000000))
+       OPTIONAL( QRSH( 91, 0x123456789abcdef0, 26, 0x000000048d159e26, 0xaf37bc0000000000))
+       OPTIONAL(QRSHU( 26, 0x89abcdef01234567, 26, 0x000000226af37bc0, 0x48d159c000000000))
+       OPTIONAL(QRSHU( 91, 0x123456789abcdef0, 26, 0x000000048d159e26, 0xaf37bc0000000000))
+       OPTIONAL( QLSH( 27, 0x89abcdef01234567, 27, 0x78091a2b38000000, 0xfffffffffc4d5e6f))
+       OPTIONAL( QLSH( 92, 0x123456789abcdef0, 27, 0xc4d5e6f780000000, 0x000000000091a2b3))
+       OPTIONAL(QLSHU( 27, 0x89abcdef01234567, 27, 0x78091a2b38000000, 0x00000000044d5e6f))
+       OPTIONAL(QLSHU( 92, 0x123456789abcdef0, 27, 0xc4d5e6f780000000, 0x000000000091a2b3))
+       OPTIONAL( QRSH( 27, 0x89abcdef01234567, 27, 0xfffffff13579bde0, 0x2468ace000000000))
+       OPTIONAL( QRSH( 92, 0x123456789abcdef0, 27, 0x00000002468acf13, 0x579bde0000000000))
+       OPTIONAL(QRSHU( 27, 0x89abcdef01234567, 27, 0x000000113579bde0, 0x2468ace000000000))
+       OPTIONAL(QRSHU( 92, 0x123456789abcdef0, 27, 0x00000002468acf13, 0x579bde0000000000))
+       OPTIONAL( QLSH( 28, 0x89abcdef01234567, 28, 0xf012345670000000, 0xfffffffff89abcde))
+       OPTIONAL( QLSH( 93, 0x123456789abcdef0, 28, 0x89abcdef00000000, 0x0000000001234567))
+       OPTIONAL(QLSHU( 28, 0x89abcdef01234567, 28, 0xf012345670000000, 0x00000000089abcde))
+       OPTIONAL(QLSHU( 93, 0x123456789abcdef0, 28, 0x89abcdef00000000, 0x0000000001234567))
+       OPTIONAL( QRSH( 28, 0x89abcdef01234567, 28, 0xfffffff89abcdef0, 0x1234567000000000))
+       OPTIONAL( QRSH( 93, 0x123456789abcdef0, 28, 0x0000000123456789, 0xabcdef0000000000))
+       OPTIONAL(QRSHU( 28, 0x89abcdef01234567, 28, 0x000000089abcdef0, 0x1234567000000000))
+       OPTIONAL(QRSHU( 93, 0x123456789abcdef0, 28, 0x0000000123456789, 0xabcdef0000000000))
+       OPTIONAL( QLSH( 29, 0x89abcdef01234567, 29, 0xe02468ace0000000, 0xfffffffff13579bd))
+       OPTIONAL( QLSH( 94, 0x123456789abcdef0, 29, 0x13579bde00000000, 0x0000000002468acf))
+       OPTIONAL(QLSHU( 29, 0x89abcdef01234567, 29, 0xe02468ace0000000, 0x00000000113579bd))
+       OPTIONAL(QLSHU( 94, 0x123456789abcdef0, 29, 0x13579bde00000000, 0x0000000002468acf))
+       OPTIONAL( QRSH( 29, 0x89abcdef01234567, 29, 0xfffffffc4d5e6f78, 0x091a2b3800000000))
+       OPTIONAL( QRSH( 94, 0x123456789abcdef0, 29, 0x0000000091a2b3c4, 0xd5e6f78000000000))
+       OPTIONAL(QRSHU( 29, 0x89abcdef01234567, 29, 0x000000044d5e6f78, 0x091a2b3800000000))
+       OPTIONAL(QRSHU( 94, 0x123456789abcdef0, 29, 0x0000000091a2b3c4, 0xd5e6f78000000000))
+       OPTIONAL( QLSH( 30, 0x89abcdef01234567, 30, 0xc048d159c0000000, 0xffffffffe26af37b))
+       OPTIONAL( QLSH( 95, 0x123456789abcdef0, 30, 0x26af37bc00000000, 0x00000000048d159e))
+       OPTIONAL(QLSHU( 30, 0x89abcdef01234567, 30, 0xc048d159c0000000, 0x00000000226af37b))
+       OPTIONAL(QLSHU( 95, 0x123456789abcdef0, 30, 0x26af37bc00000000, 0x00000000048d159e))
+       OPTIONAL( QRSH( 30, 0x89abcdef01234567, 30, 0xfffffffe26af37bc, 0x048d159c00000000))
+       OPTIONAL( QRSH( 95, 0x123456789abcdef0, 30, 0x0000000048d159e2, 0x6af37bc000000000))
+       OPTIONAL(QRSHU( 30, 0x89abcdef01234567, 30, 0x0000000226af37bc, 0x048d159c00000000))
+       OPTIONAL(QRSHU( 95, 0x123456789abcdef0, 30, 0x0000000048d159e2, 0x6af37bc000000000))
+        QLSH( 31, 0x89abcdef01234567, 31, 0x8091a2b380000000, 0xffffffffc4d5e6f7)
+        QLSH( 96, 0x123456789abcdef0, 31, 0x4d5e6f7800000000, 0x00000000091a2b3c)
+       QLSHU( 31, 0x89abcdef01234567, 31, 0x8091a2b380000000, 0x0000000044d5e6f7)
+       QLSHU( 96, 0x123456789abcdef0, 31, 0x4d5e6f7800000000, 0x00000000091a2b3c)
+        QRSH( 31, 0x89abcdef01234567, 31, 0xffffffff13579bde, 0x02468ace00000000)
+        QRSH( 96, 0x123456789abcdef0, 31, 0x000000002468acf1, 0x3579bde000000000)
+       QRSHU( 31, 0x89abcdef01234567, 31, 0x0000000113579bde, 0x02468ace00000000)
+       QRSHU( 96, 0x123456789abcdef0, 31, 0x000000002468acf1, 0x3579bde000000000)
+        QLSH( 32, 0x89abcdef01234567, 32, 0x0123456700000000, 0xffffffff89abcdef)
+        QLSH( 97, 0x123456789abcdef0, 32, 0x9abcdef000000000, 0x0000000012345678)
+       QLSHU( 32, 0x89abcdef01234567, 32, 0x0123456700000000, 0x0000000089abcdef)
+       QLSHU( 97, 0x123456789abcdef0, 32, 0x9abcdef000000000, 0x0000000012345678)
+        QRSH( 32, 0x89abcdef01234567, 32, 0xffffffff89abcdef, 0x0123456700000000)
+        QRSH( 97, 0x123456789abcdef0, 32, 0x0000000012345678, 0x9abcdef000000000)
+       QRSHU( 32, 0x89abcdef01234567, 32, 0x0000000089abcdef, 0x0123456700000000)
+       QRSHU( 97, 0x123456789abcdef0, 32, 0x0000000012345678, 0x9abcdef000000000)
+        QLSH( 33, 0x89abcdef01234567, 33, 0x02468ace00000000, 0xffffffff13579bde)
+        QLSH( 98, 0x123456789abcdef0, 33, 0x3579bde000000000, 0x000000002468acf1)
+       QLSHU( 33, 0x89abcdef01234567, 33, 0x02468ace00000000, 0x0000000113579bde)
+       QLSHU( 98, 0x123456789abcdef0, 33, 0x3579bde000000000, 0x000000002468acf1)
+        QRSH( 33, 0x89abcdef01234567, 33, 0xffffffffc4d5e6f7, 0x8091a2b380000000)
+        QRSH( 98, 0x123456789abcdef0, 33, 0x00000000091a2b3c, 0x4d5e6f7800000000)
+       QRSHU( 33, 0x89abcdef01234567, 33, 0x0000000044d5e6f7, 0x8091a2b380000000)
+       QRSHU( 98, 0x123456789abcdef0, 33, 0x00000000091a2b3c, 0x4d5e6f7800000000)
+       OPTIONAL( QLSH( 34, 0x89abcdef01234567, 34, 0x048d159c00000000, 0xfffffffe26af37bc))
+       OPTIONAL( QLSH( 99, 0x123456789abcdef0, 34, 0x6af37bc000000000, 0x0000000048d159e2))
+       OPTIONAL(QLSHU( 34, 0x89abcdef01234567, 34, 0x048d159c00000000, 0x0000000226af37bc))
+       OPTIONAL(QLSHU( 99, 0x123456789abcdef0, 34, 0x6af37bc000000000, 0x0000000048d159e2))
+       OPTIONAL( QRSH( 34, 0x89abcdef01234567, 34, 0xffffffffe26af37b, 0xc048d159c0000000))
+       OPTIONAL( QRSH( 99, 0x123456789abcdef0, 34, 0x00000000048d159e, 0x26af37bc00000000))
+       OPTIONAL(QRSHU( 34, 0x89abcdef01234567, 34, 0x00000000226af37b, 0xc048d159c0000000))
+       OPTIONAL(QRSHU( 99, 0x123456789abcdef0, 34, 0x00000000048d159e, 0x26af37bc00000000))
+       OPTIONAL( QLSH( 35, 0x89abcdef01234567, 35, 0x091a2b3800000000, 0xfffffffc4d5e6f78))
+       OPTIONAL( QLSH(100, 0x123456789abcdef0, 35, 0xd5e6f78000000000, 0x0000000091a2b3c4))
+       OPTIONAL(QLSHU( 35, 0x89abcdef01234567, 35, 0x091a2b3800000000, 0x000000044d5e6f78))
+       OPTIONAL(QLSHU(100, 0x123456789abcdef0, 35, 0xd5e6f78000000000, 0x0000000091a2b3c4))
+       OPTIONAL( QRSH( 35, 0x89abcdef01234567, 35, 0xfffffffff13579bd, 0xe02468ace0000000))
+       OPTIONAL( QRSH(100, 0x123456789abcdef0, 35, 0x0000000002468acf, 0x13579bde00000000))
+       OPTIONAL(QRSHU( 35, 0x89abcdef01234567, 35, 0x00000000113579bd, 0xe02468ace0000000))
+       OPTIONAL(QRSHU(100, 0x123456789abcdef0, 35, 0x0000000002468acf, 0x13579bde00000000))
+       OPTIONAL( QLSH( 36, 0x89abcdef01234567, 36, 0x1234567000000000, 0xfffffff89abcdef0))
+       OPTIONAL( QLSH(101, 0x123456789abcdef0, 36, 0xabcdef0000000000, 0x0000000123456789))
+       OPTIONAL(QLSHU( 36, 0x89abcdef01234567, 36, 0x1234567000000000, 0x000000089abcdef0))
+       OPTIONAL(QLSHU(101, 0x123456789abcdef0, 36, 0xabcdef0000000000, 0x0000000123456789))
+       OPTIONAL( QRSH( 36, 0x89abcdef01234567, 36, 0xfffffffff89abcde, 0xf012345670000000))
+       OPTIONAL( QRSH(101, 0x123456789abcdef0, 36, 0x0000000001234567, 0x89abcdef00000000))
+       OPTIONAL(QRSHU( 36, 0x89abcdef01234567, 36, 0x00000000089abcde, 0xf012345670000000))
+       OPTIONAL(QRSHU(101, 0x123456789abcdef0, 36, 0x0000000001234567, 0x89abcdef00000000))
+       OPTIONAL( QLSH( 37, 0x89abcdef01234567, 37, 0x2468ace000000000, 0xfffffff13579bde0))
+       OPTIONAL( QLSH(102, 0x123456789abcdef0, 37, 0x579bde0000000000, 0x00000002468acf13))
+       OPTIONAL(QLSHU( 37, 0x89abcdef01234567, 37, 0x2468ace000000000, 0x000000113579bde0))
+       OPTIONAL(QLSHU(102, 0x123456789abcdef0, 37, 0x579bde0000000000, 0x00000002468acf13))
+       OPTIONAL( QRSH( 37, 0x89abcdef01234567, 37, 0xfffffffffc4d5e6f, 0x78091a2b38000000))
+       OPTIONAL( QRSH(102, 0x123456789abcdef0, 37, 0x000000000091a2b3, 0xc4d5e6f780000000))
+       OPTIONAL(QRSHU( 37, 0x89abcdef01234567, 37, 0x00000000044d5e6f, 0x78091a2b38000000))
+       OPTIONAL(QRSHU(102, 0x123456789abcdef0, 37, 0x000000000091a2b3, 0xc4d5e6f780000000))
+       OPTIONAL( QLSH( 38, 0x89abcdef01234567, 38, 0x48d159c000000000, 0xffffffe26af37bc0))
+       OPTIONAL( QLSH(103, 0x123456789abcdef0, 38, 0xaf37bc0000000000, 0x000000048d159e26))
+       OPTIONAL(QLSHU( 38, 0x89abcdef01234567, 38, 0x48d159c000000000, 0x000000226af37bc0))
+       OPTIONAL(QLSHU(103, 0x123456789abcdef0, 38, 0xaf37bc0000000000, 0x000000048d159e26))
+       OPTIONAL( QRSH( 38, 0x89abcdef01234567, 38, 0xfffffffffe26af37, 0xbc048d159c000000))
+       OPTIONAL( QRSH(103, 0x123456789abcdef0, 38, 0x000000000048d159, 0xe26af37bc0000000))
+       OPTIONAL(QRSHU( 38, 0x89abcdef01234567, 38, 0x000000000226af37, 0xbc048d159c000000))
+       OPTIONAL(QRSHU(103, 0x123456789abcdef0, 38, 0x000000000048d159, 0xe26af37bc0000000))
+       OPTIONAL( QLSH( 39, 0x89abcdef01234567, 39, 0x91a2b38000000000, 0xffffffc4d5e6f780))
+       OPTIONAL( QLSH(104, 0x123456789abcdef0, 39, 0x5e6f780000000000, 0x000000091a2b3c4d))
+       OPTIONAL(QLSHU( 39, 0x89abcdef01234567, 39, 0x91a2b38000000000, 0x00000044d5e6f780))
+       OPTIONAL(QLSHU(104, 0x123456789abcdef0, 39, 0x5e6f780000000000, 0x000000091a2b3c4d))
+       OPTIONAL( QRSH( 39, 0x89abcdef01234567, 39, 0xffffffffff13579b, 0xde02468ace000000))
+       OPTIONAL( QRSH(104, 0x123456789abcdef0, 39, 0x00000000002468ac, 0xf13579bde0000000))
+       OPTIONAL(QRSHU( 39, 0x89abcdef01234567, 39, 0x000000000113579b, 0xde02468ace000000))
+       OPTIONAL(QRSHU(104, 0x123456789abcdef0, 39, 0x00000000002468ac, 0xf13579bde0000000))
+       OPTIONAL( QLSH( 40, 0x89abcdef01234567, 40, 0x2345670000000000, 0xffffff89abcdef01))
+       OPTIONAL( QLSH(105, 0x123456789abcdef0, 40, 0xbcdef00000000000, 0x000000123456789a))
+       OPTIONAL(QLSHU( 40, 0x89abcdef01234567, 40, 0x2345670000000000, 0x00000089abcdef01))
+       OPTIONAL(QLSHU(105, 0x123456789abcdef0, 40, 0xbcdef00000000000, 0x000000123456789a))
+       OPTIONAL( QRSH( 40, 0x89abcdef01234567, 40, 0xffffffffff89abcd, 0xef01234567000000))
+       OPTIONAL( QRSH(105, 0x123456789abcdef0, 40, 0x0000000000123456, 0x789abcdef0000000))
+       OPTIONAL(QRSHU( 40, 0x89abcdef01234567, 40, 0x000000000089abcd, 0xef01234567000000))
+       OPTIONAL(QRSHU(105, 0x123456789abcdef0, 40, 0x0000000000123456, 0x789abcdef0000000))
+       OPTIONAL( QLSH( 41, 0x89abcdef01234567, 41, 0x468ace0000000000, 0xffffff13579bde02))
+       OPTIONAL( QLSH(106, 0x123456789abcdef0, 41, 0x79bde00000000000, 0x0000002468acf135))
+       OPTIONAL(QLSHU( 41, 0x89abcdef01234567, 41, 0x468ace0000000000, 0x00000113579bde02))
+       OPTIONAL(QLSHU(106, 0x123456789abcdef0, 41, 0x79bde00000000000, 0x0000002468acf135))
+       OPTIONAL( QRSH( 41, 0x89abcdef01234567, 41, 0xffffffffffc4d5e6, 0xf78091a2b3800000))
+       OPTIONAL( QRSH(106, 0x123456789abcdef0, 41, 0x0000000000091a2b, 0x3c4d5e6f78000000))
+       OPTIONAL(QRSHU( 41, 0x89abcdef01234567, 41, 0x000000000044d5e6, 0xf78091a2b3800000))
+       OPTIONAL(QRSHU(106, 0x123456789abcdef0, 41, 0x0000000000091a2b, 0x3c4d5e6f78000000))
+       OPTIONAL( QLSH( 42, 0x89abcdef01234567, 42, 0x8d159c0000000000, 0xfffffe26af37bc04))
+       OPTIONAL( QLSH(107, 0x123456789abcdef0, 42, 0xf37bc00000000000, 0x00000048d159e26a))
+       OPTIONAL(QLSHU( 42, 0x89abcdef01234567, 42, 0x8d159c0000000000, 0x00000226af37bc04))
+       OPTIONAL(QLSHU(107, 0x123456789abcdef0, 42, 0xf37bc00000000000, 0x00000048d159e26a))
+       OPTIONAL( QRSH( 42, 0x89abcdef01234567, 42, 0xffffffffffe26af3, 0x7bc048d159c00000))
+       OPTIONAL( QRSH(107, 0x123456789abcdef0, 42, 0x0000000000048d15, 0x9e26af37bc000000))
+       OPTIONAL(QRSHU( 42, 0x89abcdef01234567, 42, 0x0000000000226af3, 0x7bc048d159c00000))
+       OPTIONAL(QRSHU(107, 0x123456789abcdef0, 42, 0x0000000000048d15, 0x9e26af37bc000000))
+       OPTIONAL( QLSH( 43, 0x89abcdef01234567, 43, 0x1a2b380000000000, 0xfffffc4d5e6f7809))
+       OPTIONAL( QLSH(108, 0x123456789abcdef0, 43, 0xe6f7800000000000, 0x00000091a2b3c4d5))
+       OPTIONAL(QLSHU( 43, 0x89abcdef01234567, 43, 0x1a2b380000000000, 0x0000044d5e6f7809))
+       OPTIONAL(QLSHU(108, 0x123456789abcdef0, 43, 0xe6f7800000000000, 0x00000091a2b3c4d5))
+       OPTIONAL( QRSH( 43, 0x89abcdef01234567, 43, 0xfffffffffff13579, 0xbde02468ace00000))
+       OPTIONAL( QRSH(108, 0x123456789abcdef0, 43, 0x000000000002468a, 0xcf13579bde000000))
+       OPTIONAL(QRSHU( 43, 0x89abcdef01234567, 43, 0x0000000000113579, 0xbde02468ace00000))
+       OPTIONAL(QRSHU(108, 0x123456789abcdef0, 43, 0x000000000002468a, 0xcf13579bde000000))
+       OPTIONAL( QLSH( 44, 0x89abcdef01234567, 44, 0x3456700000000000, 0xfffff89abcdef012))
+       OPTIONAL( QLSH(109, 0x123456789abcdef0, 44, 0xcdef000000000000, 0x00000123456789ab))
+       OPTIONAL(QLSHU( 44, 0x89abcdef01234567, 44, 0x3456700000000000, 0x0000089abcdef012))
+       OPTIONAL(QLSHU(109, 0x123456789abcdef0, 44, 0xcdef000000000000, 0x00000123456789ab))
+       OPTIONAL( QRSH( 44, 0x89abcdef01234567, 44, 0xfffffffffff89abc, 0xdef0123456700000))
+       OPTIONAL( QRSH(109, 0x123456789abcdef0, 44, 0x0000000000012345, 0x6789abcdef000000))
+       OPTIONAL(QRSHU( 44, 0x89abcdef01234567, 44, 0x0000000000089abc, 0xdef0123456700000))
+       OPTIONAL(QRSHU(109, 0x123456789abcdef0, 44, 0x0000000000012345, 0x6789abcdef000000))
+       OPTIONAL( QLSH( 45, 0x89abcdef01234567, 45, 0x68ace00000000000, 0xfffff13579bde024))
+       OPTIONAL( QLSH(110, 0x123456789abcdef0, 45, 0x9bde000000000000, 0x000002468acf1357))
+       OPTIONAL(QLSHU( 45, 0x89abcdef01234567, 45, 0x68ace00000000000, 0x0000113579bde024))
+       OPTIONAL(QLSHU(110, 0x123456789abcdef0, 45, 0x9bde000000000000, 0x000002468acf1357))
+       OPTIONAL( QRSH( 45, 0x89abcdef01234567, 45, 0xfffffffffffc4d5e, 0x6f78091a2b380000))
+       OPTIONAL( QRSH(110, 0x123456789abcdef0, 45, 0x00000000000091a2, 0xb3c4d5e6f7800000))
+       OPTIONAL(QRSHU( 45, 0x89abcdef01234567, 45, 0x0000000000044d5e, 0x6f78091a2b380000))
+       OPTIONAL(QRSHU(110, 0x123456789abcdef0, 45, 0x00000000000091a2, 0xb3c4d5e6f7800000))
+       OPTIONAL( QLSH( 46, 0x89abcdef01234567, 46, 0xd159c00000000000, 0xffffe26af37bc048))
+       OPTIONAL( QLSH(111, 0x123456789abcdef0, 46, 0x37bc000000000000, 0x0000048d159e26af))
+       OPTIONAL(QLSHU( 46, 0x89abcdef01234567, 46, 0xd159c00000000000, 0x0000226af37bc048))
+       OPTIONAL(QLSHU(111, 0x123456789abcdef0, 46, 0x37bc000000000000, 0x0000048d159e26af))
+       OPTIONAL( QRSH( 46, 0x89abcdef01234567, 46, 0xfffffffffffe26af, 0x37bc048d159c0000))
+       OPTIONAL( QRSH(111, 0x123456789abcdef0, 46, 0x00000000000048d1, 0x59e26af37bc00000))
+       OPTIONAL(QRSHU( 46, 0x89abcdef01234567, 46, 0x00000000000226af, 0x37bc048d159c0000))
+       OPTIONAL(QRSHU(111, 0x123456789abcdef0, 46, 0x00000000000048d1, 0x59e26af37bc00000))
+       OPTIONAL( QLSH( 47, 0x89abcdef01234567, 47, 0xa2b3800000000000, 0xffffc4d5e6f78091))
+       OPTIONAL( QLSH(112, 0x123456789abcdef0, 47, 0x6f78000000000000, 0x0000091a2b3c4d5e))
+       OPTIONAL(QLSHU( 47, 0x89abcdef01234567, 47, 0xa2b3800000000000, 0x000044d5e6f78091))
+       OPTIONAL(QLSHU(112, 0x123456789abcdef0, 47, 0x6f78000000000000, 0x0000091a2b3c4d5e))
+       OPTIONAL( QRSH( 47, 0x89abcdef01234567, 47, 0xffffffffffff1357, 0x9bde02468ace0000))
+       OPTIONAL( QRSH(112, 0x123456789abcdef0, 47, 0x0000000000002468, 0xacf13579bde00000))
+       OPTIONAL(QRSHU( 47, 0x89abcdef01234567, 47, 0x0000000000011357, 0x9bde02468ace0000))
+       OPTIONAL(QRSHU(112, 0x123456789abcdef0, 47, 0x0000000000002468, 0xacf13579bde00000))
+       OPTIONAL( QLSH( 48, 0x89abcdef01234567, 48, 0x4567000000000000, 0xffff89abcdef0123))
+       OPTIONAL( QLSH(113, 0x123456789abcdef0, 48, 0xdef0000000000000, 0x0000123456789abc))
+       OPTIONAL(QLSHU( 48, 0x89abcdef01234567, 48, 0x4567000000000000, 0x000089abcdef0123))
+       OPTIONAL(QLSHU(113, 0x123456789abcdef0, 48, 0xdef0000000000000, 0x0000123456789abc))
+       OPTIONAL( QRSH( 48, 0x89abcdef01234567, 48, 0xffffffffffff89ab, 0xcdef012345670000))
+       OPTIONAL( QRSH(113, 0x123456789abcdef0, 48, 0x0000000000001234, 0x56789abcdef00000))
+       OPTIONAL(QRSHU( 48, 0x89abcdef01234567, 48, 0x00000000000089ab, 0xcdef012345670000))
+       OPTIONAL(QRSHU(113, 0x123456789abcdef0, 48, 0x0000000000001234, 0x56789abcdef00000))
+       OPTIONAL( QLSH( 49, 0x89abcdef01234567, 49, 0x8ace000000000000, 0xffff13579bde0246))
+       OPTIONAL( QLSH(114, 0x123456789abcdef0, 49, 0xbde0000000000000, 0x00002468acf13579))
+       OPTIONAL(QLSHU( 49, 0x89abcdef01234567, 49, 0x8ace000000000000, 0x000113579bde0246))
+       OPTIONAL(QLSHU(114, 0x123456789abcdef0, 49, 0xbde0000000000000, 0x00002468acf13579))
+       OPTIONAL( QRSH( 49, 0x89abcdef01234567, 49, 0xffffffffffffc4d5, 0xe6f78091a2b38000))
+       OPTIONAL( QRSH(114, 0x123456789abcdef0, 49, 0x000000000000091a, 0x2b3c4d5e6f780000))
+       OPTIONAL(QRSHU( 49, 0x89abcdef01234567, 49, 0x00000000000044d5, 0xe6f78091a2b38000))
+       OPTIONAL(QRSHU(114, 0x123456789abcdef0, 49, 0x000000000000091a, 0x2b3c4d5e6f780000))
+       OPTIONAL( QLSH( 50, 0x89abcdef01234567, 50, 0x159c000000000000, 0xfffe26af37bc048d))
+       OPTIONAL( QLSH(115, 0x123456789abcdef0, 50, 0x7bc0000000000000, 0x000048d159e26af3))
+       OPTIONAL(QLSHU( 50, 0x89abcdef01234567, 50, 0x159c000000000000, 0x000226af37bc048d))
+       OPTIONAL(QLSHU(115, 0x123456789abcdef0, 50, 0x7bc0000000000000, 0x000048d159e26af3))
+       OPTIONAL( QRSH( 50, 0x89abcdef01234567, 50, 0xffffffffffffe26a, 0xf37bc048d159c000))
+       OPTIONAL( QRSH(115, 0x123456789abcdef0, 50, 0x000000000000048d, 0x159e26af37bc0000))
+       OPTIONAL(QRSHU( 50, 0x89abcdef01234567, 50, 0x000000000000226a, 0xf37bc048d159c000))
+       OPTIONAL(QRSHU(115, 0x123456789abcdef0, 50, 0x000000000000048d, 0x159e26af37bc0000))
+       OPTIONAL( QLSH( 51, 0x89abcdef01234567, 51, 0x2b38000000000000, 0xfffc4d5e6f78091a))
+       OPTIONAL( QLSH(116, 0x123456789abcdef0, 51, 0xf780000000000000, 0x000091a2b3c4d5e6))
+       OPTIONAL(QLSHU( 51, 0x89abcdef01234567, 51, 0x2b38000000000000, 0x00044d5e6f78091a))
+       OPTIONAL(QLSHU(116, 0x123456789abcdef0, 51, 0xf780000000000000, 0x000091a2b3c4d5e6))
+       OPTIONAL( QRSH( 51, 0x89abcdef01234567, 51, 0xfffffffffffff135, 0x79bde02468ace000))
+       OPTIONAL( QRSH(116, 0x123456789abcdef0, 51, 0x0000000000000246, 0x8acf13579bde0000))
+       OPTIONAL(QRSHU( 51, 0x89abcdef01234567, 51, 0x0000000000001135, 0x79bde02468ace000))
+       OPTIONAL(QRSHU(116, 0x123456789abcdef0, 51, 0x0000000000000246, 0x8acf13579bde0000))
+       OPTIONAL( QLSH( 52, 0x89abcdef01234567, 52, 0x5670000000000000, 0xfff89abcdef01234))
+       OPTIONAL( QLSH(117, 0x123456789abcdef0, 52, 0xef00000000000000, 0x000123456789abcd))
+       OPTIONAL(QLSHU( 52, 0x89abcdef01234567, 52, 0x5670000000000000, 0x00089abcdef01234))
+       OPTIONAL(QLSHU(117, 0x123456789abcdef0, 52, 0xef00000000000000, 0x000123456789abcd))
+       OPTIONAL( QRSH( 52, 0x89abcdef01234567, 52, 0xfffffffffffff89a, 0xbcdef01234567000))
+       OPTIONAL( QRSH(117, 0x123456789abcdef0, 52, 0x0000000000000123, 0x456789abcdef0000))
+       OPTIONAL(QRSHU( 52, 0x89abcdef01234567, 52, 0x000000000000089a, 0xbcdef01234567000))
+       OPTIONAL(QRSHU(117, 0x123456789abcdef0, 52, 0x0000000000000123, 0x456789abcdef0000))
+       OPTIONAL( QLSH( 53, 0x89abcdef01234567, 53, 0xace0000000000000, 0xfff13579bde02468))
+       OPTIONAL( QLSH(118, 0x123456789abcdef0, 53, 0xde00000000000000, 0x0002468acf13579b))
+       OPTIONAL(QLSHU( 53, 0x89abcdef01234567, 53, 0xace0000000000000, 0x00113579bde02468))
+       OPTIONAL(QLSHU(118, 0x123456789abcdef0, 53, 0xde00000000000000, 0x0002468acf13579b))
+       OPTIONAL( QRSH( 53, 0x89abcdef01234567, 53, 0xfffffffffffffc4d, 0x5e6f78091a2b3800))
+       OPTIONAL( QRSH(118, 0x123456789abcdef0, 53, 0x0000000000000091, 0xa2b3c4d5e6f78000))
+       OPTIONAL(QRSHU( 53, 0x89abcdef01234567, 53, 0x000000000000044d, 0x5e6f78091a2b3800))
+       OPTIONAL(QRSHU(118, 0x123456789abcdef0, 53, 0x0000000000000091, 0xa2b3c4d5e6f78000))
+       OPTIONAL( QLSH( 54, 0x89abcdef01234567, 54, 0x59c0000000000000, 0xffe26af37bc048d1))
+       OPTIONAL( QLSH(119, 0x123456789abcdef0, 54, 0xbc00000000000000, 0x00048d159e26af37))
+       OPTIONAL(QLSHU( 54, 0x89abcdef01234567, 54, 0x59c0000000000000, 0x00226af37bc048d1))
+       OPTIONAL(QLSHU(119, 0x123456789abcdef0, 54, 0xbc00000000000000, 0x00048d159e26af37))
+       OPTIONAL( QRSH( 54, 0x89abcdef01234567, 54, 0xfffffffffffffe26, 0xaf37bc048d159c00))
+       OPTIONAL( QRSH(119, 0x123456789abcdef0, 54, 0x0000000000000048, 0xd159e26af37bc000))
+       OPTIONAL(QRSHU( 54, 0x89abcdef01234567, 54, 0x0000000000000226, 0xaf37bc048d159c00))
+       OPTIONAL(QRSHU(119, 0x123456789abcdef0, 54, 0x0000000000000048, 0xd159e26af37bc000))
+       OPTIONAL( QLSH( 55, 0x89abcdef01234567, 55, 0xb380000000000000, 0xffc4d5e6f78091a2))
+       OPTIONAL( QLSH(120, 0x123456789abcdef0, 55, 0x7800000000000000, 0x00091a2b3c4d5e6f))
+       OPTIONAL(QLSHU( 55, 0x89abcdef01234567, 55, 0xb380000000000000, 0x0044d5e6f78091a2))
+       OPTIONAL(QLSHU(120, 0x123456789abcdef0, 55, 0x7800000000000000, 0x00091a2b3c4d5e6f))
+       OPTIONAL( QRSH( 55, 0x89abcdef01234567, 55, 0xffffffffffffff13, 0x579bde02468ace00))
+       OPTIONAL( QRSH(120, 0x123456789abcdef0, 55, 0x0000000000000024, 0x68acf13579bde000))
+       OPTIONAL(QRSHU( 55, 0x89abcdef01234567, 55, 0x0000000000000113, 0x579bde02468ace00))
+       OPTIONAL(QRSHU(120, 0x123456789abcdef0, 55, 0x0000000000000024, 0x68acf13579bde000))
+       OPTIONAL( QLSH( 56, 0x89abcdef01234567, 56, 0x6700000000000000, 0xff89abcdef012345))
+       OPTIONAL( QLSH(121, 0x123456789abcdef0, 56, 0xf000000000000000, 0x00123456789abcde))
+       OPTIONAL(QLSHU( 56, 0x89abcdef01234567, 56, 0x6700000000000000, 0x0089abcdef012345))
+       OPTIONAL(QLSHU(121, 0x123456789abcdef0, 56, 0xf000000000000000, 0x00123456789abcde))
+       OPTIONAL( QRSH( 56, 0x89abcdef01234567, 56, 0xffffffffffffff89, 0xabcdef0123456700))
+       OPTIONAL( QRSH(121, 0x123456789abcdef0, 56, 0x0000000000000012, 0x3456789abcdef000))
+       OPTIONAL(QRSHU( 56, 0x89abcdef01234567, 56, 0x0000000000000089, 0xabcdef0123456700))
+       OPTIONAL(QRSHU(121, 0x123456789abcdef0, 56, 0x0000000000000012, 0x3456789abcdef000))
+       OPTIONAL( QLSH( 57, 0x89abcdef01234567, 57, 0xce00000000000000, 0xff13579bde02468a))
+       OPTIONAL( QLSH(122, 0x123456789abcdef0, 57, 0xe000000000000000, 0x002468acf13579bd))
+       OPTIONAL(QLSHU( 57, 0x89abcdef01234567, 57, 0xce00000000000000, 0x0113579bde02468a))
+       OPTIONAL(QLSHU(122, 0x123456789abcdef0, 57, 0xe000000000000000, 0x002468acf13579bd))
+       OPTIONAL( QRSH( 57, 0x89abcdef01234567, 57, 0xffffffffffffffc4, 0xd5e6f78091a2b380))
+       OPTIONAL( QRSH(122, 0x123456789abcdef0, 57, 0x0000000000000009, 0x1a2b3c4d5e6f7800))
+       OPTIONAL(QRSHU( 57, 0x89abcdef01234567, 57, 0x0000000000000044, 0xd5e6f78091a2b380))
+       OPTIONAL(QRSHU(122, 0x123456789abcdef0, 57, 0x0000000000000009, 0x1a2b3c4d5e6f7800))
+       OPTIONAL( QLSH( 58, 0x89abcdef01234567, 58, 0x9c00000000000000, 0xfe26af37bc048d15))
+       OPTIONAL( QLSH(123, 0x123456789abcdef0, 58, 0xc000000000000000, 0x0048d159e26af37b))
+       OPTIONAL(QLSHU( 58, 0x89abcdef01234567, 58, 0x9c00000000000000, 0x0226af37bc048d15))
+       OPTIONAL(QLSHU(123, 0x123456789abcdef0, 58, 0xc000000000000000, 0x0048d159e26af37b))
+       OPTIONAL( QRSH( 58, 0x89abcdef01234567, 58, 0xffffffffffffffe2, 0x6af37bc048d159c0))
+       OPTIONAL( QRSH(123, 0x123456789abcdef0, 58, 0x0000000000000004, 0x8d159e26af37bc00))
+       OPTIONAL(QRSHU( 58, 0x89abcdef01234567, 58, 0x0000000000000022, 0x6af37bc048d159c0))
+       OPTIONAL(QRSHU(123, 0x123456789abcdef0, 58, 0x0000000000000004, 0x8d159e26af37bc00))
+       OPTIONAL( QLSH( 59, 0x89abcdef01234567, 59, 0x3800000000000000, 0xfc4d5e6f78091a2b))
+       OPTIONAL( QLSH(124, 0x123456789abcdef0, 59, 0x8000000000000000, 0x0091a2b3c4d5e6f7))
+       OPTIONAL(QLSHU( 59, 0x89abcdef01234567, 59, 0x3800000000000000, 0x044d5e6f78091a2b))
+       OPTIONAL(QLSHU(124, 0x123456789abcdef0, 59, 0x8000000000000000, 0x0091a2b3c4d5e6f7))
+       OPTIONAL( QRSH( 59, 0x89abcdef01234567, 59, 0xfffffffffffffff1, 0x3579bde02468ace0))
+       OPTIONAL( QRSH(124, 0x123456789abcdef0, 59, 0x0000000000000002, 0x468acf13579bde00))
+       OPTIONAL(QRSHU( 59, 0x89abcdef01234567, 59, 0x0000000000000011, 0x3579bde02468ace0))
+       OPTIONAL(QRSHU(124, 0x123456789abcdef0, 59, 0x0000000000000002, 0x468acf13579bde00))
+       OPTIONAL( QLSH( 60, 0x89abcdef01234567, 60, 0x7000000000000000, 0xf89abcdef0123456))
+       OPTIONAL( QLSH(125, 0x123456789abcdef0, 60, 0x0000000000000000, 0x0123456789abcdef))
+       OPTIONAL(QLSHU( 60, 0x89abcdef01234567, 60, 0x7000000000000000, 0x089abcdef0123456))
+       OPTIONAL(QLSHU(125, 0x123456789abcdef0, 60, 0x0000000000000000, 0x0123456789abcdef))
+       OPTIONAL( QRSH( 60, 0x89abcdef01234567, 60, 0xfffffffffffffff8, 0x9abcdef012345670))
+       OPTIONAL( QRSH(125, 0x123456789abcdef0, 60, 0x0000000000000001, 0x23456789abcdef00))
+       OPTIONAL(QRSHU( 60, 0x89abcdef01234567, 60, 0x0000000000000008, 0x9abcdef012345670))
+       OPTIONAL(QRSHU(125, 0x123456789abcdef0, 60, 0x0000000000000001, 0x23456789abcdef00))
+       OPTIONAL( QLSH( 61, 0x89abcdef01234567, 61, 0xe000000000000000, 0xf13579bde02468ac))
+       OPTIONAL( QLSH(126, 0x123456789abcdef0, 61, 0x0000000000000000, 0x02468acf13579bde))
+       OPTIONAL(QLSHU( 61, 0x89abcdef01234567, 61, 0xe000000000000000, 0x113579bde02468ac))
+       OPTIONAL(QLSHU(126, 0x123456789abcdef0, 61, 0x0000000000000000, 0x02468acf13579bde))
+       OPTIONAL( QRSH( 61, 0x89abcdef01234567, 61, 0xfffffffffffffffc, 0x4d5e6f78091a2b38))
+       OPTIONAL( QRSH(126, 0x123456789abcdef0, 61, 0x0000000000000000, 0x91a2b3c4d5e6f780))
+       OPTIONAL(QRSHU( 61, 0x89abcdef01234567, 61, 0x0000000000000004, 0x4d5e6f78091a2b38))
+       OPTIONAL(QRSHU(126, 0x123456789abcdef0, 61, 0x0000000000000000, 0x91a2b3c4d5e6f780))
+       OPTIONAL( QLSH( 62, 0x89abcdef01234567, 62, 0xc000000000000000, 0xe26af37bc048d159))
+       OPTIONAL( QLSH(127, 0x123456789abcdef0, 62, 0x0000000000000000, 0x048d159e26af37bc))
+       OPTIONAL(QLSHU( 62, 0x89abcdef01234567, 62, 0xc000000000000000, 0x226af37bc048d159))
+       OPTIONAL(QLSHU(127, 0x123456789abcdef0, 62, 0x0000000000000000, 0x048d159e26af37bc))
+       OPTIONAL( QRSH( 62, 0x89abcdef01234567, 62, 0xfffffffffffffffe, 0x26af37bc048d159c))
+       OPTIONAL( QRSH(127, 0x123456789abcdef0, 62, 0x0000000000000000, 0x48d159e26af37bc0))
+       OPTIONAL(QRSHU( 62, 0x89abcdef01234567, 62, 0x0000000000000002, 0x26af37bc048d159c))
+       OPTIONAL(QRSHU(127, 0x123456789abcdef0, 62, 0x0000000000000000, 0x48d159e26af37bc0))
+        QLSH( 63, 0x89abcdef01234567, 63, 0x8000000000000000, 0xc4d5e6f78091a2b3)
+        QLSH(128, 0x123456789abcdef0, 63, 0x0000000000000000, 0x091a2b3c4d5e6f78)
+       QLSHU( 63, 0x89abcdef01234567, 63, 0x8000000000000000, 0x44d5e6f78091a2b3)
+       QLSHU(128, 0x123456789abcdef0, 63, 0x0000000000000000, 0x091a2b3c4d5e6f78)
+        QRSH( 63, 0x89abcdef01234567, 63, 0xffffffffffffffff, 0x13579bde02468ace)
+        QRSH(128, 0x123456789abcdef0, 63, 0x0000000000000000, 0x2468acf13579bde0)
+       QRSHU( 63, 0x89abcdef01234567, 63, 0x0000000000000001, 0x13579bde02468ace)
+       QRSHU(128, 0x123456789abcdef0, 63, 0x0000000000000000, 0x2468acf13579bde0)
+        QLSH( 64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
+        QLSH(129, 0x123456789abcdef0, 64, 0x0000000000000000, 0x123456789abcdef0)
+       QLSHU( 64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
+       QLSHU(129, 0x123456789abcdef0, 64, 0x0000000000000000, 0x123456789abcdef0)
+        QRSH( 64, 0x89abcdef01234567, 64, 0xffffffffffffffff, 0x89abcdef01234567)
+        QRSH(129, 0x123456789abcdef0, 64, 0x0000000000000000, 0x123456789abcdef0)
+       QRSHU( 64, 0x89abcdef01234567, 64, 0x0000000000000000, 0x89abcdef01234567)
+       QRSHU(129, 0x123456789abcdef0, 64, 0x0000000000000000, 0x123456789abcdef0)
   #endif
-#endif
        prepare
                pushargi ok
        finishi @printf
+#endif
        ret
        epilog
index 5052a36..9f8caf6 100644 (file)
@@ -555,10 +555,7 @@ struct jit_function {
     jit_int32_t                *regoff;
     jit_regset_t        regset;
     jit_int32_t                 stack;
-#if defined(__i386__) || defined(__x86_64__) || \
-    defined(__powerpc__) || defined(__sparc__) || \
-    defined(__s390__) || defined(__s390x__) || \
-    defined(__hppa__) || defined(__alpha__)
+#if !defined(__arm__)
     jit_int32_t                 cvt_offset;    /* allocai'd offset for x87<->xmm or
                                         * fpr<->gpr transfer using the stack */
 #endif
index 76a988b..b0bc26f 100644 (file)
@@ -1580,9 +1580,7 @@ static void
 _xrshr(jit_state_t *_jit, jit_bool_t sign,
        jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
 {
-    jit_bool_t         branch;
-    jit_word_t         over, zero, done, done_over;
-    jit_int32_t                t0, s0, t1, s1, t2, s2, t3, s3;
+    jit_int32_t                t0, s0, t2, s2, t3, s3;
     s0 = jit_get_reg(jit_class_gpr);
     t0 = rn(s0);
     if (r0 == r2 || r1 == r2) {
@@ -1599,51 +1597,26 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
     }
     else
        t3 = r3;
-    if ((s1 = jit_get_reg(jit_class_gpr|jit_class_nospill|jit_class_chk))) {
-       t1 = rn(s1);
-       branch = 0;
-    }
-    else
-       branch = 1;
-    rsbi(t0, t3, __WORDSIZE);
-    if (sign)
-       rshr(r0, t2, t3);
-    else
-       rshr_u(r0, t2, t3);
-    lshr(r1, t2, t0);
-    if (branch) {
-       zero = beqi(_jit->pc.w, t3, 0);
-       over = beqi(_jit->pc.w, t3, __WORDSIZE);
-       done = jmpi(_jit->pc.w);
-       patch_at(over, _jit->pc.w);
-       /* underflow */
-       if (sign)
-           rshi(r0, t2, __WORDSIZE - 1);
-       else
-           movi(r0, 0);
-       done_over = jmpi(_jit->pc.w);
-       /* zero */
-       patch_at(zero, _jit->pc.w);
-       if (sign)
-           rshi(r1, t2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
-       patch_at(done, _jit->pc.w);
-       patch_at(done_over, _jit->pc.w);
-       jit_unget_reg(s1);
+
+    if (sign) {
+       /* underflow? */
+       eqi(t0, t3, __WORDSIZE);
+       subr(t0, t3, t0);
+       rshr(r0, t2, t0);
     }
     else {
-       /* zero? */
-       if (sign)
-           rshi(t0, t2, __WORDSIZE - 1);
-       else
-           movi(t0, 0);
-       movzr(r1, t0, t3);
        /* underflow? */
-       eqi(t1, t3, __WORDSIZE);
-       movnr(r0, t0, t1);
-       jit_unget_reg(s1);
+       nei(t0, t3, __WORDSIZE);
+       rshr_u(r0, t2, t3);
+       movzr(r0, t0, t0);
     }
+
+    rsbi(t0, t3, __WORDSIZE);
+    lshr(r1, t2, t0);
+
+    /* zero? */
+    movzr(r1, t3, t3);
+
     jit_unget_reg(s0);
     if (t2 != r2)
        jit_unget_reg(s2);
@@ -1657,10 +1630,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
index b977214..4109a6b 100644 (file)
@@ -1506,23 +1506,19 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
        done_over = jmpi(_jit->pc.w);
        /* zero */
        patch_at(zero, _jit->pc.w);
-       if (sign)
-           rshi(r1, t2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
        patch_at(done, _jit->pc.w);
        patch_at(done_over, _jit->pc.w);
        jit_unget_reg(s1);
     }
     else {
        /* zero? */
-       if (sign)
-           rshi(t0, t2, __WORDSIZE - 1);
-       else
-           movi(t0, 0);
+       movi(t0, 0);
        movzr(r1, t0, t3);
        /* underflow? */
        eqi(t1, t3, __WORDSIZE);
+       if (sign)
+           rshi(t0, t2, __WORDSIZE - 1);
        movnr(r0, t0, t1);
        jit_unget_reg(s1);
     }
@@ -1539,10 +1535,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
index 83e0510..3a471eb 100644 (file)
@@ -1414,7 +1414,7 @@ _fallback_qrshr(jit_state_t *_jit, jit_int32_t r0,
     /* zero */
     fallback_flush();
     fallback_patch_beqi(zero, _jit->pc.w);
-    rshi(r1, t2, __WORDSIZE - 1);
+    movi(r1, 0);
     fallback_flush();
     fallback_patch_jmpi(done, _jit->pc.w);
     fallback_patch_jmpi(done_over, _jit->pc.w);
@@ -1431,12 +1431,8 @@ _fallback_qrshi(jit_state_t *_jit, jit_int32_t r0,
 {
     assert((jit_uword_t)i0 <= __WORDSIZE);
     if (i0 == 0) {
-       if (r0 != r2) {
-           movr(r0, r2);
-           rshi(r1, r2, __WORDSIZE - 1);
-       }
-       else
-           rshi(r1, r2, __WORDSIZE - 1);
+       movr(r0, r2);
+       movi(r1, 0);
     }
     else if (i0 != __WORDSIZE) {
        lshi(r1, r2, __WORDSIZE - i0);
index a4ec58d..8908ca7 100644 (file)
@@ -4369,23 +4369,19 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
        done_over = jmpi(_jit->pc.w);
        /* zero */
        patch_at(jit_code_beqi, zero, _jit->pc.w);
-       if (sign)
-           rshi(r1, t2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
        patch_at(jit_code_jmpi, done, _jit->pc.w);
        patch_at(jit_code_jmpi, done_over, _jit->pc.w);
        jit_unget_reg(s1);
     }
     else {
        /* zero? */
-       if (sign)
-           rshi(t0, t2, __WORDSIZE - 1);
-       else
-           movi(t0, 0);
+       movi(t0, 0);
        movzr(r1, t0, t3);
        /* underflow? */
        eqi(t1, t3, __WORDSIZE);
+       if (sign)
+           rshi(t0, t2, __WORDSIZE - 1);
        movnr(r0, t0, t1);
        jit_unget_reg(s1);
     }
@@ -4402,10 +4398,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
index 6a07e87..e8b1aa5 100644 (file)
@@ -806,8 +806,7 @@ static void _bswapr_ui(jit_state_t*,jit_int32_t,jit_int32_t);
 #  define bswapr_ul(r0,r1)             _bswapr_ul(_jit,r0,r1)
 static void _bswapr_ul(jit_state_t*,jit_int32_t,jit_int32_t);
 #  endif
-#define extr(r0,r1,i0,i1)              _extr(_jit,r0,r1,i0,i1)
-static void _extr(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t,jit_word_t);
+#define extr(r0,r1,i0,i1)              fallback_ext(r0,r1,i0,i1)
 #define extr_u(r0,r1,i0,i1)            _extr_u(_jit,r0,r1,i0,i1)
 static void _extr_u(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t,jit_word_t);
 #define depr(r0,r1,i0,i1)              _depr(_jit,r0,r1,i0,i1)
@@ -2353,72 +2352,42 @@ static void
 _xlshr(jit_state_t *_jit, jit_bool_t sign,
        jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
 {
-    jit_bool_t         branch;
-    jit_word_t         over, zero, done, done_over;
-    jit_int32_t                t0, s0, t1, s1, t2, s2, t3, s3;
+    jit_int32_t                t0, s0, t2, s2, t3, s3;
     s0 = jit_get_reg(jit_class_gpr);
     t0 = rn(s0);
     if (r0 == r2 || r1 == r2) {
-       s2 = jit_get_reg(jit_class_gpr);
-       t2 = rn(s2);
-       movr(t2, r2);
+        s2 = jit_get_reg(jit_class_gpr);
+        t2 = rn(s2);
+        movr(t2, r2);
     }
     else
-       t2 = r2;
+        t2 = r2;
     if (r0 == r3 || r1 == r3) {
-       s3 = jit_get_reg(jit_class_gpr);
-       t3 = rn(s3);
-       movr(t3, r3);
+        s3 = jit_get_reg(jit_class_gpr);
+        t3 = rn(s3);
+        movr(t3, r3);
     }
     else
-       t3 = r3;
-    if ((s1 = jit_get_reg(jit_class_gpr|jit_class_nospill|jit_class_chk))) {
-       t1 = rn(s1);
-       branch = 0;
-    }
-    else
-       branch = 1;
+        t3 = r3;
     rsbi(t0, t3, __WORDSIZE);
     lshr(r0, t2, t3);
     if (sign)
-       rshr(r1, t2, t0);
+        rshr(r1, t2, t0);
     else
-       rshr_u(r1, t2, t0);
-    if (branch) {
-       zero = beqi(_jit->pc.w, t3, 0);
-       over = beqi(_jit->pc.w, t3, __WORDSIZE);
-       done = jmpi(_jit->pc.w, 1);
-       flush();
-       patch_at(over, _jit->pc.w);
-       /* overflow */
-       movi(r0, 0);
-       done_over = jmpi(_jit->pc.w, 1);
-       /* zero */
-       flush();
-       patch_at(zero, _jit->pc.w);
-       if (sign)
-           rshi(r1, t2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
-       flush();
-       patch_at(done, _jit->pc.w);
-       patch_at(done_over, _jit->pc.w);
+        rshr_u(r1, t2, t0);
+    if (sign) {
+        rshi(t0, t2, __WORDSIZE - 1);
+        /* zero? */
+        movzr(r1, t0, t3);
     }
     else {
-       if (sign)
-           rshi(t0, t2, __WORDSIZE - 1);
-       else
-           movi(t0, 0);
-       /* zero? */
-       movzr(r1, t0, t3);
-       /* Branchless but 4 bytes longer than branching fallback */
-       if (sign)
-           movi(t0, 0);
-       /* overflow? */
-       eqi(t1, t3, __WORDSIZE);
-       movnr(r0, t0, t1);
-       jit_unget_reg(s1);
+        /* zero? */
+        movzr(r1, t3, t3);
     }
+    /* overflow? */
+    nei(t0, t3, __WORDSIZE);
+    movzr(r0, t0, t0);
+
     jit_unget_reg(s0);
     if (t2 != r2)
        jit_unget_reg(s2);
@@ -2455,78 +2424,47 @@ static void
 _xrshr(jit_state_t *_jit, jit_bool_t sign,
        jit_int32_t r0, jit_int32_t r1, jit_int32_t r2, jit_int32_t r3)
 {
-    jit_bool_t         branch;
-    jit_word_t         over, zero, done, done_over;
-    jit_int32_t                t0, s0, t1, s1, t2, s2, t3, s3;
+    jit_int32_t                t0, s0, t2, s2, t3, s3;
     s0 = jit_get_reg(jit_class_gpr);
     t0 = rn(s0);
     if (r0 == r2 || r1 == r2) {
-       s2 = jit_get_reg(jit_class_gpr);
-       t2 = rn(s2);
-       movr(t2, r2);
+        s2 = jit_get_reg(jit_class_gpr);
+        t2 = rn(s2);
+        movr(t2, r2);
     }
     else
-       t2 = r2;
+        t2 = r2;
     if (r0 == r3 || r1 == r3) {
-       s3 = jit_get_reg(jit_class_gpr);
-       t3 = rn(s3);
-       movr(t3, r3);
+        s3 = jit_get_reg(jit_class_gpr);
+        t3 = rn(s3);
+        movr(t3, r3);
     }
     else
-       t3 = r3;
-    if ((s1 = jit_get_reg(jit_class_gpr|jit_class_nospill|jit_class_chk))) {
-       t1 = rn(s1);
-       branch = 0;
+        t3 = r3;
+
+    if (sign) {
+        /* underflow? */
+        eqi(t0, t3, __WORDSIZE);
+        subr(t0, t3, t0);
+        rshr(r0, t2, t0);
+    } else {
+        /* underflow? */
+        nei(t0, t3, __WORDSIZE);
+        rshr_u(r0, t2, t3);
+        movzr(r0, t0, t0);
     }
-    else
-       branch = 1;
+
     rsbi(t0, t3, __WORDSIZE);
-    if (sign)
-       rshr(r0, t2, t3);
-    else
-       rshr_u(r0, t2, t3);
     lshr(r1, t2, t0);
-    if (branch) {
-       zero = beqi(_jit->pc.w, t3, 0);
-       over = beqi(_jit->pc.w, t3, __WORDSIZE);
-       done = jmpi(_jit->pc.w, 1);
-       flush();
-       patch_at(over, _jit->pc.w);
-       /* underflow */
-       if (sign)
-           rshi(r0, t2, __WORDSIZE - 1);
-       else
-           movi(r0, 0);
-       done_over = jmpi(_jit->pc.w, 1);
-       /* zero */
-       flush();
-       patch_at(zero, _jit->pc.w);
-       if (sign)
-           rshi(r1, t2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
-       flush();
-       patch_at(done, _jit->pc.w);
-       patch_at(done_over, _jit->pc.w);
-       jit_unget_reg(s1);
-    }
-    else {
-       /* zero? */
-       if (sign)
-           rshi(t0, t2, __WORDSIZE - 1);
-       else
-           movi(t0, 0);
-       movzr(r1, t0, t3);
-       /* underflow? */
-       eqi(t1, t3, __WORDSIZE);
-       movnr(r0, t0, t1);
-       jit_unget_reg(s1);
-    }
+
+    /* zero? */
+    movzr(r1, t3, t3);
+
     jit_unget_reg(s0);
     if (t2 != r2)
-       jit_unget_reg(s2);
+        jit_unget_reg(s2);
     if (t3 != r3)
-       jit_unget_reg(s3);
+        jit_unget_reg(s3);
 }
 
 static void
@@ -2535,10 +2473,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
@@ -3555,26 +3490,6 @@ _bswapr_ul(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
 }
 #endif
 
-static void
-_extr(jit_state_t *_jit,
-      jit_int32_t r0, jit_int32_t r1, jit_word_t i0, jit_word_t i1)
-{
-    assert(i0 >= 0 && i1 >= 1 && i0 + i1 <= __WORDSIZE);
-    if ( i1 == __WORDSIZE)
-       movr(r0, r1);
-    else {
-#  if __BYTE_ORDER == __BIG_ENDIAN
-       i0 = __WORDSIZE - (i0 + i1);
-#  endif
-       if (__WORDSIZE - (i0 + i1)) {
-           lshi(r0, r1, __WORDSIZE - (i0 + i1));
-           rshi(r0, r0, __WORDSIZE - i1);
-       }
-       else
-           rshi(r0, r1, __WORDSIZE - i1);
-    }
-}
-
 static void
 _extr_u(jit_state_t *_jit,
        jit_int32_t r0, jit_int32_t r1, jit_word_t i0, jit_word_t i1)
index f84998b..8ea8e62 100644 (file)
@@ -1940,10 +1940,7 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
     done_over = jmpi(_jit->pc.w);
     /* zero */
     patch_at(zero, _jit->pc.w);
-    if (sign)
-       rshi(r1, t2, __WORDSIZE - 1);
-    else
-       movi(r1, 0);
+    movi(r1, 0);
     patch_at(done, _jit->pc.w);
     patch_at(done_over, _jit->pc.w);
     jit_unget_reg(s0);
@@ -1959,10 +1956,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
index 1271360..2244aab 100644 (file)
@@ -235,7 +235,8 @@ _jit_print_node(jit_state_t *_jit, jit_node_t *node)
            if (node->code == jit_code_movi_ww_d)
                print_hex(node->w.w);
            else
-               print_dec(node->w.w);                   return;
+               print_dec(node->w.w);
+           return;
        w_r_w:
            print_chr(' ');     print_hex(node->u.w);
            print_chr(' ');     print_reg(node->v.w);
index 44f5b45..76f90ec 100644 (file)
@@ -2243,8 +2243,14 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
     else
        t3 = r3;
     /* Bits to shift left */
-    if (sign)
+    if (sign) {
        rshi(t1, t2, __WORDSIZE - 1);
+       /* Special case for negative value and zero shift */
+       alui(X86_CMP, t3, 0);
+       zero = jnes(_jit->pc.w);
+       movi(t1, 0);
+       patch_at(zero, _jit->pc.w);
+    }
     else
        movi(t1, 0);
     /* Shift in %RCX */
@@ -2261,7 +2267,7 @@ _xrshr(jit_state_t *_jit, jit_bool_t sign,
     /* Must swap results if shift value is __WORDSIZE */
     alui(X86_CMP, t3, __WORDSIZE);
     over = jes(_jit->pc.w);
-    /* Already zero or sign extended if shift value is zero */
+    /* Already zero  if shift value is zero */
     alui(X86_CMP, t3, 0);
     zero = jes(_jit->pc.w);
     /* Calculate bits to shift left and fill high register */
@@ -2296,10 +2302,7 @@ _xrshi(jit_state_t *_jit, jit_bool_t sign,
 {
     if (i0 == 0) {
        movr(r0, r2);
-       if (sign)
-           rshi(r1, r2, __WORDSIZE - 1);
-       else
-           movi(r1, 0);
+       movi(r1, 0);
     }
     else if (i0 == __WORDSIZE) {
        movr(r1, r2);
index 25a6078..39c4fc2 100644 (file)
@@ -1741,8 +1741,9 @@ _jit_classify(jit_state_t *_jit, jit_code_t code)
 void
 _jit_patch_abs(jit_state_t *_jit, jit_node_t *instr, jit_pointer_t address)
 {
+#ifndef NDEBUG
     jit_int32_t                mask;
-
+#endif
     switch (instr->code) {
        case jit_code_movi:     case jit_code_ldi_c:    case jit_code_ldi_uc:
        case jit_code_ldi_s:    case jit_code_ldi_us:   case jit_code_ldi_i:
@@ -1755,7 +1756,9 @@ _jit_patch_abs(jit_state_t *_jit, jit_node_t *instr, jit_pointer_t address)
            instr->u.p = address;
            break;
        default:
+#ifndef NDEBUG
            mask = jit_classify(instr->code);
+#endif
            assert((mask & (jit_cc_a0_reg|jit_cc_a0_jmp)) == jit_cc_a0_jmp);
            instr->u.p = address;
     }
@@ -1764,8 +1767,9 @@ _jit_patch_abs(jit_state_t *_jit, jit_node_t *instr, jit_pointer_t address)
 void
 _jit_patch_at(jit_state_t *_jit, jit_node_t *instr, jit_node_t *label)
 {
+#ifndef NDEBUG
     jit_int32_t                mask;
-
+#endif
     assert(!(instr->flag & jit_flag_node));
     instr->flag |= jit_flag_node;
     switch (instr->code) {
@@ -1782,7 +1786,9 @@ _jit_patch_at(jit_state_t *_jit, jit_node_t *instr, jit_node_t *label)
            instr->u.n = label;
            break;
        default:
+#ifndef NDEBUG
            mask = jit_classify(instr->code);
+#endif
            assert((mask & (jit_cc_a0_reg|jit_cc_a0_jmp)) == jit_cc_a0_jmp);
            assert(label->code == jit_code_label);
            instr->u.n = label;
@@ -2441,7 +2447,9 @@ _jit_emit(jit_state_t *_jit)
     jit_pointer_t       code;
     jit_node_t         *node;
     size_t              length;
+#ifndef NDEBUG
     int                         result;
+#endif
 #if defined(__sgi)
     int                         mmap_fd;
 #endif
@@ -2484,8 +2492,10 @@ _jit_emit(jit_state_t *_jit)
 
     for (;;) {
 #if __NetBSD__
-       result = mprotect(_jit->code.ptr, _jit->code.length,
-                         PROT_READ | PROT_WRITE);
+#ifndef NDEBUG
+       result =
+#endif
+       mprotect(_jit->code.ptr, _jit->code.length, PROT_READ | PROT_WRITE);
        assert(result == 0);
 #endif
        if ((code = emit_code()) == NULL) {
@@ -2550,8 +2560,10 @@ _jit_emit(jit_state_t *_jit)
        jit_free((jit_pointer_t *)&_jitc->data.ptr);
 #if HAVE_MMAP
     else {
-       result = mprotect(_jit->data.ptr,
-                         _jit->data.length, PROT_READ);
+#  ifndef NDEBUG
+       result =
+#  endif
+       mprotect(_jit->data.ptr, _jit->data.length, PROT_READ);
        assert(result == 0);
     }
     if (!_jit->user_code) {
@@ -2560,7 +2572,10 @@ _jit_emit(jit_state_t *_jit)
        /* FIXME should start adding consts at a page boundary */
        _jit->code.protect -= _jitc->consts.hash.count * sizeof(jit_word_t);
 #  endif
-       result = mprotect(_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_EXEC);
+#  ifndef NDEBUG
+       result =
+       mprotect(_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_EXEC);
+#  endif
        assert(result == 0);
     }
 #endif /* HAVE_MMAP */
@@ -2576,9 +2591,14 @@ _jit_protect(jit_state_t *_jit)
 #if !HAVE_MMAP
   assert (_jit->user_code);
 #else
+#  ifndef NDEBUG
   int result;
+#  endif
   if (_jit->user_code) return;
-  result = mprotect (_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_EXEC);
+#  ifndef NDEBUG
+  result =
+#endif
+  mprotect (_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_EXEC);
   assert (result == 0);
 #endif
 }
@@ -2589,9 +2609,14 @@ _jit_unprotect(jit_state_t *_jit)
 #if !HAVE_MMAP
   assert (_jit->user_code);
 #else
+#  ifndef NDEBUG
   int result;
+#  endif
   if (_jit->user_code) return;
-  result = mprotect (_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_WRITE);
+#  ifndef NDEBUG
+  result =
+#  endif
+  mprotect (_jit->code.ptr, _jit->code.protect, PROT_READ | PROT_WRITE);
   assert (result == 0);
 #endif
 }
@@ -4260,7 +4285,7 @@ static void _htoni_ul(jit_state_t*, jit_int32_t, jit_word_t);
 #endif
 #  define movi_f_w(r0, i0)             _movi_f_w(_jit, r0, i0)
 static void _movi_f_w(jit_state_t*, jit_int32_t, jit_float32_t);
-#if __WORDSIZE == 32
+#if __WORDSIZE == 32 && !(defined(__mips__) && NEW_ABI)
 #  define movi_d_ww(r0, r1, i0)                _movi_d_ww(_jit, r0, r1, i0)
 static void _movi_d_ww(jit_state_t*, jit_int32_t, jit_int32_t, jit_float64_t);
 #else
@@ -4544,7 +4569,7 @@ _movi_f_w(jit_state_t *_jit, jit_int32_t r0, jit_float32_t i0)
     movi(r0, data.i);
 }
 
-#if __WORDSIZE == 32
+#if __WORDSIZE == 32 && !(defined(__mips__) && NEW_ABI)
 static void
 _movi_d_ww(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_float64_t i0)
 {