[AArch64] Support for ARMv8.1a Limited Ordering Regions extension
[external/binutils.git] / opcodes / aarch64-dis-2.c
index 0d633eb..40ccc08 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is automatically generated by aarch64-gen.  Do not edit!  */
-/* Copyright 2012, 2013  Free Software Foundation, Inc.
+/* Copyright (C) 2012-2015 Free Software Foundation, Inc.
    Contributed by ARM Ltd.
 
    This file is part of the GNU opcodes library.
@@ -40,7 +40,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                          10987654321098765432109876543210
                          xxxxxxxxxxxxxxxxxxxxxxxx0000xxx0
                          adr.  */
-                      return 781;
+                      return 947;
                     }
                   else
                     {
@@ -48,7 +48,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                          10987654321098765432109876543210
                          xxxxxxxxxxxxxxxxxxxxxxxx0000xxx1
                          adrp.  */
-                      return 782;
+                      return 948;
                     }
                 }
               else
@@ -115,7 +115,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx0xxxxx000x0010000
                                                  stxrb.  */
-                                              return 717;
+                                              return 705;
                                             }
                                           else
                                             {
@@ -123,7 +123,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx0xxxxx000x0010010
                                                  stxrh.  */
-                                              return 723;
+                                              return 711;
                                             }
                                         }
                                       else
@@ -132,16 +132,27 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                              10987654321098765432109876543210
                                              xxxxxxxxxxxxxxx0xxxxx000x00100x1
                                              stxr.  */
-                                          return 729;
+                                          return 717;
                                         }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxx0xxxxx100x00100xx
-                                         stxp.  */
-                                      return 731;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx100x00100x0
+                                             casp.  */
+                                          return 782;
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx100x00100x1
+                                             stxp.  */
+                                          return 719;
+                                        }
                                     }
                                 }
                               else
@@ -156,7 +167,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx1xxxxx000x0010000
                                                  stlxrb.  */
-                                              return 718;
+                                              return 706;
                                             }
                                           else
                                             {
@@ -164,7 +175,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx1xxxxx000x0010010
                                                  stlxrh.  */
-                                              return 724;
+                                              return 712;
                                             }
                                         }
                                       else
@@ -173,16 +184,27 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                              10987654321098765432109876543210
                                              xxxxxxxxxxxxxxx1xxxxx000x00100x1
                                              stlxr.  */
-                                          return 730;
+                                          return 718;
                                         }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxx1xxxxx100x00100xx
-                                         stlxp.  */
-                                      return 732;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx100x00100x0
+                                             caspl.  */
+                                          return 784;
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx100x00100x1
+                                             stlxp.  */
+                                          return 720;
+                                        }
                                     }
                                 }
                             }
@@ -192,39 +214,127 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxx00x00101xx
                                  stnp.  */
-                              return 739;
+                              return 733;
                             }
                         }
                       else
                         {
                           if (((word >> 29) & 0x1) == 0)
                             {
-                              if (((word >> 31) & 0x1) == 0)
+                              if (((word >> 15) & 0x1) == 0)
                                 {
-                                  if (((word >> 30) & 0x1) == 0)
+                                  if (((word >> 21) & 0x1) == 0)
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxxxxxxxxx01x0010000
-                                         stlrb.  */
-                                      return 721;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx001x00100x0
+                                             stllrb.  */
+                                          return 731;
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx001x00100x1
+                                             stllr.  */
+                                          return 730;
+                                        }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxxxxxxxxx01x0010010
-                                         stlrh.  */
-                                      return 727;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx101x0010000
+                                                 casb.  */
+                                              return 770;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx101x0010010
+                                                 cash.  */
+                                              return 771;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx101x00100x1
+                                             cas.  */
+                                          return 772;
+                                        }
                                     }
                                 }
                               else
                                 {
-                                  /* 33222222222211111111110000000000
-                                     10987654321098765432109876543210
-                                     xxxxxxxxxxxxxxxxxxxxxx01x00100x1
-                                     stlr.  */
-                                  return 737;
+                                  if (((word >> 21) & 0x1) == 0)
+                                    {
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx001x0010000
+                                                 stlrb.  */
+                                              return 709;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx001x0010010
+                                                 stlrh.  */
+                                              return 715;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx001x00100x1
+                                             stlr.  */
+                                          return 725;
+                                        }
+                                    }
+                                  else
+                                    {
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx101x0010000
+                                                 caslb.  */
+                                              return 774;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx101x0010010
+                                                 caslh.  */
+                                              return 777;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx101x00100x1
+                                             casl.  */
+                                          return 780;
+                                        }
+                                    }
                                 }
                             }
                           else
@@ -233,7 +343,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxx01x00101xx
                                  stp.  */
-                              return 748;
+                              return 742;
                             }
                         }
                     }
@@ -255,7 +365,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx0xxxxx010x0010000
                                                  ldxrb.  */
-                                              return 719;
+                                              return 707;
                                             }
                                           else
                                             {
@@ -263,7 +373,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx0xxxxx010x0010010
                                                  ldxrh.  */
-                                              return 725;
+                                              return 713;
                                             }
                                         }
                                       else
@@ -272,16 +382,27 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                              10987654321098765432109876543210
                                              xxxxxxxxxxxxxxx0xxxxx010x00100x1
                                              ldxr.  */
-                                          return 733;
+                                          return 721;
                                         }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxx0xxxxx110x00100xx
-                                         ldxp.  */
-                                      return 735;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx110x00100x0
+                                             caspa.  */
+                                          return 783;
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx110x00100x1
+                                             ldxp.  */
+                                          return 723;
+                                        }
                                     }
                                 }
                               else
@@ -296,7 +417,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx1xxxxx010x0010000
                                                  ldaxrb.  */
-                                              return 720;
+                                              return 708;
                                             }
                                           else
                                             {
@@ -304,7 +425,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                                  10987654321098765432109876543210
                                                  xxxxxxxxxxxxxxx1xxxxx010x0010010
                                                  ldaxrh.  */
-                                              return 726;
+                                              return 714;
                                             }
                                         }
                                       else
@@ -313,16 +434,27 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                              10987654321098765432109876543210
                                              xxxxxxxxxxxxxxx1xxxxx010x00100x1
                                              ldaxr.  */
-                                          return 734;
+                                          return 722;
                                         }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxx1xxxxx110x00100xx
-                                         ldaxp.  */
-                                      return 736;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx110x00100x0
+                                             caspal.  */
+                                          return 785;
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx110x00100x1
+                                             ldaxp.  */
+                                          return 724;
+                                        }
                                     }
                                 }
                             }
@@ -334,7 +466,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx10x001010x
                                      ldnp.  */
-                                  return 740;
+                                  return 734;
                                 }
                               else
                                 {
@@ -342,7 +474,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx10x001011x
                                      ldpsw.  */
-                                  return 747;
+                                  return 741;
                                 }
                             }
                         }
@@ -350,32 +482,131 @@ aarch64_opcode_lookup_1 (uint32_t word)
                         {
                           if (((word >> 29) & 0x1) == 0)
                             {
-                              if (((word >> 31) & 0x1) == 0)
+                              if (((word >> 15) & 0x1) == 0)
                                 {
-                                  if (((word >> 30) & 0x1) == 0)
+                                  if (((word >> 21) & 0x1) == 0)
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxxxxxxxxx11x0010000
-                                         ldarb.  */
-                                      return 722;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx011x0010000
+                                                 ldlarb.  */
+                                              return 728;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx011x0010010
+                                                 ldlarh.  */
+                                              return 729;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx011x00100x1
+                                             ldlar.  */
+                                          return 727;
+                                        }
                                     }
                                   else
                                     {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxxxxxxxxxxxx11x0010010
-                                         ldarh.  */
-                                      return 728;
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx111x0010000
+                                                 casab.  */
+                                              return 773;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx0xxxxx111x0010010
+                                                 casah.  */
+                                              return 776;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx0xxxxx111x00100x1
+                                             casa.  */
+                                          return 779;
+                                        }
                                     }
                                 }
                               else
                                 {
-                                  /* 33222222222211111111110000000000
-                                     10987654321098765432109876543210
-                                     xxxxxxxxxxxxxxxxxxxxxx11x00100x1
-                                     ldar.  */
-                                  return 738;
+                                  if (((word >> 21) & 0x1) == 0)
+                                    {
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx011x0010000
+                                                 ldarb.  */
+                                              return 710;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx011x0010010
+                                                 ldarh.  */
+                                              return 716;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx011x00100x1
+                                             ldar.  */
+                                          return 726;
+                                        }
+                                    }
+                                  else
+                                    {
+                                      if (((word >> 31) & 0x1) == 0)
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx111x0010000
+                                                 casalb.  */
+                                              return 775;
+                                            }
+                                          else
+                                            {
+                                              /* 33222222222211111111110000000000
+                                                 10987654321098765432109876543210
+                                                 xxxxxxxxxxxxxxx1xxxxx111x0010010
+                                                 casalh.  */
+                                              return 778;
+                                            }
+                                        }
+                                      else
+                                        {
+                                          /* 33222222222211111111110000000000
+                                             10987654321098765432109876543210
+                                             xxxxxxxxxxxxxxx1xxxxx111x00100x1
+                                             casal.  */
+                                          return 781;
+                                        }
+                                    }
                                 }
                             }
                           else
@@ -386,7 +617,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx11x001010x
                                      ldp.  */
-                                  return 749;
+                                  return 743;
                                 }
                               else
                                 {
@@ -394,7 +625,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx11x001011x
                                      ldpsw.  */
-                                  return 752;
+                                  return 746;
                                 }
                             }
                         }
@@ -412,7 +643,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxxx000110x0
                                  ldr.  */
-                              return 753;
+                              return 747;
                             }
                           else
                             {
@@ -422,7 +653,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxxxx00011001
                                      ldrsw.  */
-                                  return 755;
+                                  return 749;
                                 }
                               else
                                 {
@@ -430,7 +661,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxxxx00011011
                                      prfm.  */
-                                  return 756;
+                                  return 750;
                                 }
                             }
                         }
@@ -440,108 +671,1296 @@ aarch64_opcode_lookup_1 (uint32_t word)
                             {
                               if (((word >> 11) & 0x1) == 0)
                                 {
-                                  if (((word >> 23) & 0x1) == 0)
+                                  if (((word >> 21) & 0x1) == 0)
                                     {
-                                      if (((word >> 22) & 0x1) == 0)
+                                      if (((word >> 23) & 0x1) == 0)
                                         {
-                                          if (((word >> 31) & 0x1) == 0)
+                                          if (((word >> 22) & 0x1) == 0)
                                             {
-                                              if (((word >> 30) & 0x1) == 0)
+                                              if (((word >> 31) & 0x1) == 0)
                                                 {
-                                                  /* 33222222222211111111110000000000
-                                                     10987654321098765432109876543210
-                                                     xxxxxxxxxx00xxxxxxxxxx0000011100
-                                                     sturb.  */
-                                                  return 693;
+                                                  if (((word >> 30) & 0x1) == 0)
+                                                    {
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xxxxxxxxxx00xxxxxxxxx00000011100
+                                                         sturb.  */
+                                                      return 693;
+                                                    }
+                                                  else
+                                                    {
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xxxxxxxxxx00xxxxxxxxx00000011110
+                                                         sturh.  */
+                                                      return 698;
+                                                    }
                                                 }
                                               else
                                                 {
                                                   /* 33222222222211111111110000000000
                                                      10987654321098765432109876543210
-                                                     xxxxxxxxxx00xxxxxxxxxx0000011110
-                                                     sturh.  */
-                                                  return 703;
+                                                     xxxxxxxxxx00xxxxxxxxx000000111x1
+                                                     stur.  */
+                                                  return 701;
                                                 }
                                             }
                                           else
                                             {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxx00000111x1
-                                                 stur.  */
-                                              return 709;
-                                            }
-                                        }
-                                      else
-                                        {
-                                          if (((word >> 31) & 0x1) == 0)
-                                            {
-                                              if (((word >> 30) & 0x1) == 0)
+                                              if (((word >> 31) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 30) & 0x1) == 0)
+                                                    {
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xxxxxxxxxx00xxxxxxxxx01000011100
+                                                         ldurb.  */
+                                                      return 694;
+                                                    }
+                                                  else
+                                                    {
+                                                      /* 33222222222211111111110000000000
+                                                         10987654321098765432109876543210
+                                                         xxxxxxxxxx00xxxxxxxxx01000011110
+                                                         ldurh.  */
+                                                      return 699;
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     xxxxxxxxxx00xxxxxxxxx010000111x1
+                                                     ldur.  */
+                                                  return 702;
+                                                }
+                                            }
+                                        }
+                                      else
+                                        {
+                                          if (((word >> 30) & 0x1) == 0)
+                                            {
+                                              if (((word >> 31) & 0x1) == 0)
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     xxxxxxxxxx00xxxxxxxxx0x100011100
+                                                     ldursb.  */
+                                                  return 695;
+                                                }
+                                              else
+                                                {
+                                                  /* 33222222222211111111110000000000
+                                                     10987654321098765432109876543210
+                                                     xxxxxxxxxx00xxxxxxxxx0x100011101
+                                                     ldursw.  */
+                                                  return 703;
+                                                }
+                                            }
+                                          else
+                                            {
+                                              if (((word >> 31) & 0x1) == 0)
                                                 {
                                                   /* 33222222222211111111110000000000
                                                      10987654321098765432109876543210
-                                                     xxxxxxxxxx00xxxxxxxxxx1000011100
-                                                     ldurb.  */
-                                                  return 694;
+                                                     xxxxxxxxxx00xxxxxxxxx0x100011110
+                                                     ldursh.  */
+                                                  return 700;
                                                 }
                                               else
                                                 {
                                                   /* 33222222222211111111110000000000
                                                      10987654321098765432109876543210
-                                                     xxxxxxxxxx00xxxxxxxxxx1000011110
-                                                     ldurh.  */
+                                                     xxxxxxxxxx00xxxxxxxxx0x100011111
+                                                     prfum.  */
                                                   return 704;
                                                 }
                                             }
-                                          else
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxx10000111x1
-                                                 ldur.  */
-                                              return 710;
-                                            }
-                                        }
-                                    }
-                                  else
-                                    {
-                                      if (((word >> 30) & 0x1) == 0)
-                                        {
-                                          if (((word >> 31) & 0x1) == 0)
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxxx100011100
-                                                 ldursb.  */
-                                              return 697;
-                                            }
-                                          else
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxxx100011101
-                                                 ldursw.  */
-                                              return 713;
-                                            }
-                                        }
-                                      else
-                                        {
-                                          if (((word >> 31) & 0x1) == 0)
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxxx100011110
-                                                 ldursh.  */
-                                              return 707;
-                                            }
-                                          else
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxxxxxxx00xxxxxxxxxxx100011111
-                                                 prfum.  */
-                                              return 715;
-                                            }
+                                        }
+                                    }
+                                  else
+                                    {
+                                      if (((word >> 12) & 0x1) == 0)
+                                        {
+                                          if (((word >> 13) & 0x1) == 0)
+                                            {
+                                              if (((word >> 14) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 15) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 22) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 23) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx10000011100
+                                                                         ldaddb.  */
+                                                                      return 798;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx10000011110
+                                                                         ldaddh.  */
+                                                                      return 799;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000000xxxxx100000111x1
+                                                                     ldadd.  */
+                                                                  return 800;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx10100011100
+                                                                         ldaddab.  */
+                                                                      return 801;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx10100011110
+                                                                         ldaddah.  */
+                                                                      return 804;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000000xxxxx101000111x1
+                                                                     ldadda.  */
+                                                                  return 807;
+                                                                }
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 23) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx11000011100
+                                                                         ldaddlb.  */
+                                                                      return 802;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx11000011110
+                                                                         ldaddlh.  */
+                                                                      return 805;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000000xxxxx110000111x1
+                                                                     ldaddl.  */
+                                                                  return 808;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx11100011100
+                                                                         ldaddalb.  */
+                                                                      return 803;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000000xxxxx11100011110
+                                                                         ldaddalh.  */
+                                                                      return 806;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000000xxxxx111000111x1
+                                                                     ldaddal.  */
+                                                                  return 809;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 22) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 23) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx10000011100
+                                                                         swpb.  */
+                                                                      return 786;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx10000011110
+                                                                         swph.  */
+                                                                      return 787;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000001xxxxx100000111x1
+                                                                     swp.  */
+                                                                  return 788;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx10100011100
+                                                                         swpab.  */
+                                                                      return 789;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx10100011110
+                                                                         swpah.  */
+                                                                      return 792;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000001xxxxx101000111x1
+                                                                     swpa.  */
+                                                                  return 795;
+                                                                }
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 23) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx11000011100
+                                                                         swplb.  */
+                                                                      return 790;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx11000011110
+                                                                         swplh.  */
+                                                                      return 793;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000001xxxxx110000111x1
+                                                                     swpl.  */
+                                                                  return 796;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              if (((word >> 31) & 0x1) == 0)
+                                                                {
+                                                                  if (((word >> 30) & 0x1) == 0)
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx11100011100
+                                                                         swpalb.  */
+                                                                      return 791;
+                                                                    }
+                                                                  else
+                                                                    {
+                                                                      /* 33222222222211111111110000000000
+                                                                         10987654321098765432109876543210
+                                                                         xxxxxxxxxx000001xxxxx11100011110
+                                                                         swpalh.  */
+                                                                      return 794;
+                                                                    }
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx000001xxxxx111000111x1
+                                                                     swpal.  */
+                                                                  return 797;
+                                                                }
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx10000011100
+                                                                     ldsmaxb.  */
+                                                                  return 846;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx10000011110
+                                                                     ldsmaxh.  */
+                                                                  return 847;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00001xxxxxx100000111x1
+                                                                 ldsmax.  */
+                                                              return 848;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx10100011100
+                                                                     ldsmaxab.  */
+                                                                  return 849;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx10100011110
+                                                                     ldsmaxah.  */
+                                                                  return 852;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00001xxxxxx101000111x1
+                                                                 ldsmaxa.  */
+                                                              return 855;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx11000011100
+                                                                     ldsmaxlb.  */
+                                                                  return 850;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx11000011110
+                                                                     ldsmaxlh.  */
+                                                                  return 853;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00001xxxxxx110000111x1
+                                                                 ldsmaxl.  */
+                                                              return 856;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx11100011100
+                                                                     ldsmaxalb.  */
+                                                                  return 851;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00001xxxxxx11100011110
+                                                                     ldsmaxalh.  */
+                                                                  return 854;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00001xxxxxx111000111x1
+                                                                 ldsmaxal.  */
+                                                              return 857;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                          else
+                                            {
+                                              if (((word >> 14) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx10000011100
+                                                                     ldeorb.  */
+                                                                  return 822;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx10000011110
+                                                                     ldeorh.  */
+                                                                  return 823;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00010xxxxxx100000111x1
+                                                                 ldeor.  */
+                                                              return 824;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx10100011100
+                                                                     ldeorab.  */
+                                                                  return 825;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx10100011110
+                                                                     ldeorah.  */
+                                                                  return 828;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00010xxxxxx101000111x1
+                                                                 ldeora.  */
+                                                              return 831;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx11000011100
+                                                                     ldeorlb.  */
+                                                                  return 826;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx11000011110
+                                                                     ldeorlh.  */
+                                                                  return 829;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00010xxxxxx110000111x1
+                                                                 ldeorl.  */
+                                                              return 832;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx11100011100
+                                                                     ldeoralb.  */
+                                                                  return 827;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00010xxxxxx11100011110
+                                                                     ldeoralh.  */
+                                                                  return 830;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00010xxxxxx111000111x1
+                                                                 ldeoral.  */
+                                                              return 833;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx10000011100
+                                                                     ldumaxb.  */
+                                                                  return 870;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx10000011110
+                                                                     ldumaxh.  */
+                                                                  return 871;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00011xxxxxx100000111x1
+                                                                 ldumax.  */
+                                                              return 872;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx10100011100
+                                                                     ldumaxab.  */
+                                                                  return 873;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx10100011110
+                                                                     ldumaxah.  */
+                                                                  return 876;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00011xxxxxx101000111x1
+                                                                 ldumaxa.  */
+                                                              return 879;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx11000011100
+                                                                     ldumaxlb.  */
+                                                                  return 874;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx11000011110
+                                                                     ldumaxlh.  */
+                                                                  return 877;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00011xxxxxx110000111x1
+                                                                 ldumaxl.  */
+                                                              return 880;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx11100011100
+                                                                     ldumaxalb.  */
+                                                                  return 875;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00011xxxxxx11100011110
+                                                                     ldumaxalh.  */
+                                                                  return 878;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00011xxxxxx111000111x1
+                                                                 ldumaxal.  */
+                                                              return 881;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                        }
+                                      else
+                                        {
+                                          if (((word >> 13) & 0x1) == 0)
+                                            {
+                                              if (((word >> 14) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx10000011100
+                                                                     ldclrb.  */
+                                                                  return 810;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx10000011110
+                                                                     ldclrh.  */
+                                                                  return 811;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00100xxxxxx100000111x1
+                                                                 ldclr.  */
+                                                              return 812;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx10100011100
+                                                                     ldclrab.  */
+                                                                  return 813;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx10100011110
+                                                                     ldclrah.  */
+                                                                  return 816;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00100xxxxxx101000111x1
+                                                                 ldclra.  */
+                                                              return 819;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx11000011100
+                                                                     ldclrlb.  */
+                                                                  return 814;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx11000011110
+                                                                     ldclrlh.  */
+                                                                  return 817;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00100xxxxxx110000111x1
+                                                                 ldclrl.  */
+                                                              return 820;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx11100011100
+                                                                     ldclralb.  */
+                                                                  return 815;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00100xxxxxx11100011110
+                                                                     ldclralh.  */
+                                                                  return 818;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00100xxxxxx111000111x1
+                                                                 ldclral.  */
+                                                              return 821;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx10000011100
+                                                                     ldsminb.  */
+                                                                  return 858;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx10000011110
+                                                                     ldsminh.  */
+                                                                  return 859;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00101xxxxxx100000111x1
+                                                                 ldsmin.  */
+                                                              return 860;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx10100011100
+                                                                     ldsminab.  */
+                                                                  return 861;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx10100011110
+                                                                     ldsminah.  */
+                                                                  return 864;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00101xxxxxx101000111x1
+                                                                 ldsmina.  */
+                                                              return 867;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx11000011100
+                                                                     ldsminlb.  */
+                                                                  return 862;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx11000011110
+                                                                     ldsminlh.  */
+                                                                  return 865;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00101xxxxxx110000111x1
+                                                                 ldsminl.  */
+                                                              return 868;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx11100011100
+                                                                     ldsminalb.  */
+                                                                  return 863;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00101xxxxxx11100011110
+                                                                     ldsminalh.  */
+                                                                  return 866;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00101xxxxxx111000111x1
+                                                                 ldsminal.  */
+                                                              return 869;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                          else
+                                            {
+                                              if (((word >> 14) & 0x1) == 0)
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx10000011100
+                                                                     ldsetb.  */
+                                                                  return 834;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx10000011110
+                                                                     ldseth.  */
+                                                                  return 835;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00110xxxxxx100000111x1
+                                                                 ldset.  */
+                                                              return 836;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx10100011100
+                                                                     ldsetab.  */
+                                                                  return 837;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx10100011110
+                                                                     ldsetah.  */
+                                                                  return 840;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00110xxxxxx101000111x1
+                                                                 ldseta.  */
+                                                              return 843;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx11000011100
+                                                                     ldsetlb.  */
+                                                                  return 838;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx11000011110
+                                                                     ldsetlh.  */
+                                                                  return 841;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00110xxxxxx110000111x1
+                                                                 ldsetl.  */
+                                                              return 844;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx11100011100
+                                                                     ldsetalb.  */
+                                                                  return 839;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00110xxxxxx11100011110
+                                                                     ldsetalh.  */
+                                                                  return 842;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00110xxxxxx111000111x1
+                                                                 ldsetal.  */
+                                                              return 845;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                              else
+                                                {
+                                                  if (((word >> 22) & 0x1) == 0)
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx10000011100
+                                                                     lduminb.  */
+                                                                  return 882;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx10000011110
+                                                                     lduminh.  */
+                                                                  return 883;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00111xxxxxx100000111x1
+                                                                 ldumin.  */
+                                                              return 884;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx10100011100
+                                                                     lduminab.  */
+                                                                  return 885;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx10100011110
+                                                                     lduminah.  */
+                                                                  return 888;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00111xxxxxx101000111x1
+                                                                 ldumina.  */
+                                                              return 891;
+                                                            }
+                                                        }
+                                                    }
+                                                  else
+                                                    {
+                                                      if (((word >> 23) & 0x1) == 0)
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx11000011100
+                                                                     lduminlb.  */
+                                                                  return 886;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx11000011110
+                                                                     lduminlh.  */
+                                                                  return 889;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00111xxxxxx110000111x1
+                                                                 lduminl.  */
+                                                              return 892;
+                                                            }
+                                                        }
+                                                      else
+                                                        {
+                                                          if (((word >> 31) & 0x1) == 0)
+                                                            {
+                                                              if (((word >> 30) & 0x1) == 0)
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx11100011100
+                                                                     lduminalb.  */
+                                                                  return 887;
+                                                                }
+                                                              else
+                                                                {
+                                                                  /* 33222222222211111111110000000000
+                                                                     10987654321098765432109876543210
+                                                                     xxxxxxxxxx00111xxxxxx11100011110
+                                                                     lduminalh.  */
+                                                                  return 890;
+                                                                }
+                                                            }
+                                                          else
+                                                            {
+                                                              /* 33222222222211111111110000000000
+                                                                 10987654321098765432109876543210
+                                                                 xxxxxxxxxx00111xxxxxx111000111x1
+                                                                 lduminal.  */
+                                                              return 893;
+                                                            }
+                                                        }
+                                                    }
+                                                }
+                                            }
                                         }
                                     }
                                 }
@@ -976,7 +2395,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx00100x00x
                                  and.  */
-                              return 757;
+                              return 751;
                             }
                           else
                             {
@@ -984,7 +2403,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx00100x01x
                                  eor.  */
-                              return 761;
+                              return 755;
                             }
                         }
                       else
@@ -995,7 +2414,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx00100x10x
                                  orr.  */
-                              return 759;
+                              return 753;
                             }
                           else
                             {
@@ -1003,7 +2422,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx00100x11x
                                  ands.  */
-                              return 762;
+                              return 756;
                             }
                         }
                     }
@@ -1017,7 +2436,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx10100x00x
                                  movn.  */
-                              return 776;
+                              return 942;
                             }
                           else
                             {
@@ -1025,7 +2444,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxxx10100x01x
                                  movz.  */
-                              return 778;
+                              return 944;
                             }
                         }
                       else
@@ -1034,7 +2453,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                              10987654321098765432109876543210
                              xxxxxxxxxxxxxxxxxxxxxxx10100x1xx
                              movk.  */
-                          return 780;
+                          return 946;
                         }
                     }
                 }
@@ -1052,7 +2471,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxx0xx0101000x
                                      and.  */
-                                  return 764;
+                                  return 758;
                                 }
                               else
                                 {
@@ -1060,7 +2479,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxx0xx0101001x
                                      eor.  */
-                                  return 771;
+                                  return 765;
                                 }
                             }
                           else
@@ -1071,7 +2490,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxx0xx0101010x
                                      orr.  */
-                                  return 766;
+                                  return 760;
                                 }
                               else
                                 {
@@ -1079,7 +2498,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxx0xx0101011x
                                      ands.  */
-                                  return 773;
+                                  return 767;
                                 }
                             }
                         }
@@ -1454,7 +2873,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxx1xx0101x00x
                                  bic.  */
-                              return 765;
+                              return 759;
                             }
                           else
                             {
@@ -1462,7 +2881,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxx1xx0101x01x
                                  eon.  */
-                              return 772;
+                              return 766;
                             }
                         }
                       else
@@ -1473,7 +2892,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxx1xx0101x10x
                                  orn.  */
-                              return 769;
+                              return 763;
                             }
                           else
                             {
@@ -1481,7 +2900,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxx1xx0101x11x
                                  bics.  */
-                              return 775;
+                              return 769;
                             }
                         }
                     }
@@ -1886,109 +3305,21 @@ aarch64_opcode_lookup_1 (uint32_t word)
                     }
                   else
                     {
-                      if (((word >> 20) & 0x1) == 0)
+                      if (((word >> 21) & 0x1) == 0)
                         {
-                          if (((word >> 19) & 0x1) == 0)
-                            {
-                              if (((word >> 12) & 0x1) == 0)
-                                {
-                                  if (((word >> 13) & 0x1) == 0)
-                                    {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxx00xxxxx00xxx1x10x01x
-                                         msr.  */
-                                      return 783;
-                                    }
-                                  else
-                                    {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxxxxxxxxx01xxxxx00xxx1x10x01x
-                                         hint.  */
-                                      return 784;
-                                    }
-                                }
-                              else
-                                {
-                                  if (((word >> 5) & 0x1) == 0)
-                                    {
-                                      if (((word >> 6) & 0x1) == 0)
-                                        {
-                                          /* 33222222222211111111110000000000
-                                             10987654321098765432109876543210
-                                             xxxxx00xxxxx1xxxxxx00xxx1x10x01x
-                                             dsb.  */
-                                          return 792;
-                                        }
-                                      else
-                                        {
-                                          if (((word >> 7) & 0x1) == 0)
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxx010xxxx1xxxxxx00xxx1x10x01x
-                                                 clrex.  */
-                                              return 791;
-                                            }
-                                          else
-                                            {
-                                              /* 33222222222211111111110000000000
-                                                 10987654321098765432109876543210
-                                                 xxxxx011xxxx1xxxxxx00xxx1x10x01x
-                                                 isb.  */
-                                              return 794;
-                                            }
-                                        }
-                                    }
-                                  else
-                                    {
-                                      /* 33222222222211111111110000000000
-                                         10987654321098765432109876543210
-                                         xxxxx1xxxxxx1xxxxxx00xxx1x10x01x
-                                         dmb.  */
-                                      return 793;
-                                    }
-                                }
-                            }
-                          else
-                            {
-                              if (((word >> 21) & 0x1) == 0)
-                                {
-                                  /* 33222222222211111111110000000000
-                                     10987654321098765432109876543210
-                                     xxxxxxxxxxxxxxxxxxx100xx1x10x01x
-                                     sys.  */
-                                  return 795;
-                                }
-                              else
-                                {
-                                  /* 33222222222211111111110000000000
-                                     10987654321098765432109876543210
-                                     xxxxxxxxxxxxxxxxxxx101xx1x10x01x
-                                     sysl.  */
-                                  return 801;
-                                }
-                            }
+                          /* 33222222222211111111110000000000
+                             10987654321098765432109876543210
+                             xxxxxxxxxxxxxxxxxxxxx0xx1x10x01x
+                             msr.  */
+                          return 949;
                         }
                       else
                         {
-                          if (((word >> 21) & 0x1) == 0)
-                            {
-                              /* 33222222222211111111110000000000
-                                 10987654321098765432109876543210
-                                 xxxxxxxxxxxxxxxxxxxx10xx1x10x01x
-                                 msr.  */
-                              return 800;
-                            }
-                          else
-                            {
-                              /* 33222222222211111111110000000000
-                                 10987654321098765432109876543210
-                                 xxxxxxxxxxxxxxxxxxxx11xx1x10x01x
-                                 mrs.  */
-                              return 802;
-                            }
+                          /* 33222222222211111111110000000000
+                             10987654321098765432109876543210
+                             xxxxxxxxxxxxxxxxxxxxx1xx1x10x01x
+                             sysl.  */
+                          return 967;
                         }
                     }
                 }
@@ -2011,7 +3342,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                          10987654321098765432109876543210
                          xxxxxxxxxxxxxxxxxxxxxxxx0110x1xx
                          tbz.  */
-                      return 803;
+                      return 969;
                     }
                 }
               else
@@ -2030,7 +3361,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                          10987654321098765432109876543210
                          xxxxxxxxxxxxxxxxxxxxxxxx1110x1xx
                          tbnz.  */
-                      return 804;
+                      return 970;
                     }
                 }
             }
@@ -2061,7 +3392,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx00001101xx
                                      stnp.  */
-                                  return 741;
+                                  return 735;
                                 }
                             }
                           else
@@ -2113,7 +3444,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx00101101xx
                                      stp.  */
-                                  return 745;
+                                  return 739;
                                 }
                             }
                         }
@@ -2177,7 +3508,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxx01x01101xx
                                  stp.  */
-                              return 750;
+                              return 744;
                             }
                         }
                     }
@@ -2201,7 +3532,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx10001101xx
                                      ldnp.  */
-                                  return 742;
+                                  return 736;
                                 }
                             }
                           else
@@ -2253,7 +3584,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                      10987654321098765432109876543210
                                      xxxxxxxxxxxxxxxxxxxxxx10101101xx
                                      ldp.  */
-                                  return 746;
+                                  return 740;
                                 }
                             }
                         }
@@ -2317,7 +3648,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                  10987654321098765432109876543210
                                  xxxxxxxxxxxxxxxxxxxxxx11x01101xx
                                  ldp.  */
-                              return 751;
+                              return 745;
                             }
                         }
                     }
@@ -2332,7 +3663,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                              10987654321098765432109876543210
                              xxxxxxxxxxxxxxxxxxxxxxxx001110xx
                              ldr.  */
-                          return 754;
+                          return 748;
                         }
                       else
                         {
@@ -2346,7 +3677,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                          10987654321098765432109876543210
                                          xxxxxxxxxx00xxxxxxxxxx0x001111xx
                                          stur.  */
-                                      return 699;
+                                      return 696;
                                     }
                                   else
                                     {
@@ -2354,7 +3685,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
                                          10987654321098765432109876543210
                                          xxxxxxxxxx00xxxxxxxxxx1x001111xx
                                          ldur.  */
-                                      return 700;
+                                      return 697;
                                     }
                                 }
                               else
@@ -7431,10 +8762,22 @@ aarch64_find_next_opcode (const aarch64_opcode *opcode)
   int value;
   switch (key)
     {
-    case 739: value = 743; break;      /* stnp --> stp.  */
-    case 743: return NULL;             /* stp --> NULL.  */
-    case 740: value = 744; break;      /* ldnp --> ldp.  */
-    case 744: return NULL;             /* ldp --> NULL.  */
+    case 733: value = 737; break;      /* stnp --> stp.  */
+    case 737: return NULL;             /* stp --> NULL.  */
+    case 731: value = 732; break;      /* stllrb --> stllrh.  */
+    case 732: return NULL;             /* stllrh --> NULL.  */
+    case 734: value = 738; break;      /* ldnp --> ldp.  */
+    case 738: return NULL;             /* ldp --> NULL.  */
+    case 949: value = 950; break;      /* msr --> hint.  */
+    case 950: value = 957; break;      /* hint --> clrex.  */
+    case 957: value = 958; break;      /* clrex --> dsb.  */
+    case 958: value = 959; break;      /* dsb --> dmb.  */
+    case 959: value = 960; break;      /* dmb --> isb.  */
+    case 960: value = 961; break;      /* isb --> sys.  */
+    case 961: value = 966; break;      /* sys --> msr.  */
+    case 966: return NULL;             /* msr --> NULL.  */
+    case 967: value = 968; break;      /* sysl --> mrs.  */
+    case 968: return NULL;             /* mrs --> NULL.  */
     case 355: value = 356; break;      /* st4 --> st1.  */
     case 356: value = 357; break;      /* st1 --> st2.  */
     case 357: value = 358; break;      /* st2 --> st3.  */
@@ -7557,28 +8900,64 @@ aarch64_find_alias_opcode (const aarch64_opcode *opcode)
     case 581: value = 582; break;      /* umaddl --> umull.  */
     case 583: value = 584; break;      /* umsubl --> umnegl.  */
     case 594: value = 595; break;      /* extr --> ror.  */
-    case 693: value = 695; break;      /* sturb --> strb.  */
-    case 694: value = 696; break;      /* ldurb --> ldrb.  */
-    case 697: value = 698; break;      /* ldursb --> ldrsb.  */
-    case 699: value = 701; break;      /* stur --> str.  */
-    case 700: value = 702; break;      /* ldur --> ldr.  */
-    case 703: value = 705; break;      /* sturh --> strh.  */
-    case 704: value = 706; break;      /* ldurh --> ldrh.  */
-    case 707: value = 708; break;      /* ldursh --> ldrsh.  */
-    case 709: value = 711; break;      /* stur --> str.  */
-    case 710: value = 712; break;      /* ldur --> ldr.  */
-    case 713: value = 714; break;      /* ldursw --> ldrsw.  */
-    case 715: value = 716; break;      /* prfum --> prfm.  */
-    case 757: value = 758; break;      /* and --> bic.  */
-    case 759: value = 760; break;      /* orr --> mov.  */
-    case 762: value = 763; break;      /* ands --> tst.  */
-    case 766: value = 768; break;      /* orr --> uxtw.  */
-    case 769: value = 770; break;      /* orn --> mvn.  */
-    case 773: value = 774; break;      /* ands --> tst.  */
-    case 776: value = 777; break;      /* movn --> mov.  */
-    case 778: value = 779; break;      /* movz --> mov.  */
-    case 784: value = 790; break;      /* hint --> sevl.  */
-    case 795: value = 799; break;      /* sys --> tlbi.  */
+    case 751: value = 752; break;      /* and --> bic.  */
+    case 753: value = 754; break;      /* orr --> mov.  */
+    case 756: value = 757; break;      /* ands --> tst.  */
+    case 760: value = 762; break;      /* orr --> uxtw.  */
+    case 763: value = 764; break;      /* orn --> mvn.  */
+    case 767: value = 768; break;      /* ands --> tst.  */
+    case 798: value = 894; break;      /* ldaddb --> staddb.  */
+    case 799: value = 895; break;      /* ldaddh --> staddh.  */
+    case 800: value = 896; break;      /* ldadd --> stadd.  */
+    case 802: value = 897; break;      /* ldaddlb --> staddlb.  */
+    case 805: value = 898; break;      /* ldaddlh --> staddlh.  */
+    case 808: value = 899; break;      /* ldaddl --> staddl.  */
+    case 810: value = 900; break;      /* ldclrb --> stclrb.  */
+    case 811: value = 901; break;      /* ldclrh --> stclrh.  */
+    case 812: value = 902; break;      /* ldclr --> stclr.  */
+    case 814: value = 903; break;      /* ldclrlb --> stclrlb.  */
+    case 817: value = 904; break;      /* ldclrlh --> stclrlh.  */
+    case 820: value = 905; break;      /* ldclrl --> stclrl.  */
+    case 822: value = 906; break;      /* ldeorb --> steorb.  */
+    case 823: value = 907; break;      /* ldeorh --> steorh.  */
+    case 824: value = 908; break;      /* ldeor --> steor.  */
+    case 826: value = 909; break;      /* ldeorlb --> steorlb.  */
+    case 829: value = 910; break;      /* ldeorlh --> steorlh.  */
+    case 832: value = 911; break;      /* ldeorl --> steorl.  */
+    case 834: value = 912; break;      /* ldsetb --> stsetb.  */
+    case 835: value = 913; break;      /* ldseth --> stseth.  */
+    case 836: value = 914; break;      /* ldset --> stset.  */
+    case 838: value = 915; break;      /* ldsetlb --> stsetlb.  */
+    case 841: value = 916; break;      /* ldsetlh --> stsetlh.  */
+    case 844: value = 917; break;      /* ldsetl --> stsetl.  */
+    case 846: value = 918; break;      /* ldsmaxb --> stsmaxb.  */
+    case 847: value = 919; break;      /* ldsmaxh --> stsmaxh.  */
+    case 848: value = 920; break;      /* ldsmax --> stsmax.  */
+    case 850: value = 921; break;      /* ldsmaxlb --> stsmaxlb.  */
+    case 853: value = 922; break;      /* ldsmaxlh --> stsmaxlh.  */
+    case 856: value = 923; break;      /* ldsmaxl --> stsmaxl.  */
+    case 858: value = 924; break;      /* ldsminb --> stsminb.  */
+    case 859: value = 925; break;      /* ldsminh --> stsminh.  */
+    case 860: value = 926; break;      /* ldsmin --> stsmin.  */
+    case 862: value = 927; break;      /* ldsminlb --> stsminlb.  */
+    case 865: value = 928; break;      /* ldsminlh --> stsminlh.  */
+    case 868: value = 929; break;      /* ldsminl --> stsminl.  */
+    case 870: value = 930; break;      /* ldumaxb --> stumaxb.  */
+    case 871: value = 931; break;      /* ldumaxh --> stumaxh.  */
+    case 872: value = 932; break;      /* ldumax --> stumax.  */
+    case 874: value = 933; break;      /* ldumaxlb --> stumaxlb.  */
+    case 877: value = 934; break;      /* ldumaxlh --> stumaxlh.  */
+    case 880: value = 935; break;      /* ldumaxl --> stumaxl.  */
+    case 882: value = 936; break;      /* lduminb --> stuminb.  */
+    case 883: value = 937; break;      /* lduminh --> stuminh.  */
+    case 884: value = 938; break;      /* ldumin --> stumin.  */
+    case 886: value = 939; break;      /* lduminlb --> stuminlb.  */
+    case 889: value = 940; break;      /* lduminlh --> stuminlh.  */
+    case 892: value = 941; break;      /* lduminl --> stuminl.  */
+    case 942: value = 943; break;      /* movn --> mov.  */
+    case 944: value = 945; break;      /* movz --> mov.  */
+    case 950: value = 956; break;      /* hint --> sevl.  */
+    case 961: value = 965; break;      /* sys --> tlbi.  */
     default: return NULL;
     }
 
@@ -7607,15 +8986,15 @@ aarch64_find_next_alias_opcode (const aarch64_opcode *opcode)
     case 505: value = 504; break;      /* ubfx --> ubfiz.  */
     case 527: value = 526; break;      /* cset --> cinc.  */
     case 530: value = 529; break;      /* csetm --> cinv.  */
-    case 768: value = 767; break;      /* uxtw --> mov.  */
-    case 790: value = 789; break;      /* sevl --> sev.  */
-    case 789: value = 788; break;      /* sev --> wfi.  */
-    case 788: value = 787; break;      /* wfi --> wfe.  */
-    case 787: value = 786; break;      /* wfe --> yield.  */
-    case 786: value = 785; break;      /* yield --> nop.  */
-    case 799: value = 798; break;      /* tlbi --> ic.  */
-    case 798: value = 797; break;      /* ic --> dc.  */
-    case 797: value = 796; break;      /* dc --> at.  */
+    case 762: value = 761; break;      /* uxtw --> mov.  */
+    case 956: value = 955; break;      /* sevl --> sev.  */
+    case 955: value = 954; break;      /* sev --> wfi.  */
+    case 954: value = 953; break;      /* wfi --> wfe.  */
+    case 953: value = 952; break;      /* wfe --> yield.  */
+    case 952: value = 951; break;      /* yield --> nop.  */
+    case 965: value = 964; break;      /* tlbi --> ic.  */
+    case 964: value = 963; break;      /* ic --> dc.  */
+    case 963: value = 962; break;      /* dc --> at.  */
     default: return NULL;
     }
 
@@ -7640,11 +9019,10 @@ aarch64_extract_operand (const aarch64_operand *self,
     case 7:
     case 9:
     case 10:
-    case 13:
     case 14:
     case 15:
     case 16:
-    case 18:
+    case 17:
     case 19:
     case 20:
     case 21:
@@ -7653,31 +9031,33 @@ aarch64_extract_operand (const aarch64_operand *self,
     case 24:
     case 25:
     case 26:
-    case 34:
+    case 27:
     case 35:
+    case 36:
       return aarch64_ext_regno (self, info, code, inst);
     case 8:
       return aarch64_ext_regrt_sysins (self, info, code, inst);
     case 11:
-      return aarch64_ext_reg_extended (self, info, code, inst);
+      return aarch64_ext_regno_pair (self, info, code, inst);
     case 12:
+      return aarch64_ext_reg_extended (self, info, code, inst);
+    case 13:
       return aarch64_ext_reg_shifted (self, info, code, inst);
-    case 17:
+    case 18:
       return aarch64_ext_ft (self, info, code, inst);
-    case 27:
     case 28:
     case 29:
-      return aarch64_ext_reglane (self, info, code, inst);
     case 30:
-      return aarch64_ext_reglist (self, info, code, inst);
+      return aarch64_ext_reglane (self, info, code, inst);
     case 31:
-      return aarch64_ext_ldst_reglist (self, info, code, inst);
+      return aarch64_ext_reglist (self, info, code, inst);
     case 32:
-      return aarch64_ext_ldst_reglist_r (self, info, code, inst);
+      return aarch64_ext_ldst_reglist (self, info, code, inst);
     case 33:
+      return aarch64_ext_ldst_reglist_r (self, info, code, inst);
+    case 34:
       return aarch64_ext_ldst_elemlist (self, info, code, inst);
-    case 36:
-    case 45:
+    case 37:
     case 46:
     case 47:
     case 48:
@@ -7690,57 +9070,59 @@ aarch64_extract_operand (const aarch64_operand *self,
     case 55:
     case 56:
     case 57:
-    case 64:
-    case 65:
+    case 58:
     case 66:
     case 67:
     case 68:
+    case 69:
+    case 70:
       return aarch64_ext_imm (self, info, code, inst);
-    case 37:
     case 38:
-      return aarch64_ext_advsimd_imm_shift (self, info, code, inst);
     case 39:
+      return aarch64_ext_advsimd_imm_shift (self, info, code, inst);
     case 40:
     case 41:
-      return aarch64_ext_advsimd_imm_modified (self, info, code, inst);
     case 42:
+      return aarch64_ext_advsimd_imm_modified (self, info, code, inst);
+    case 43:
       return aarch64_ext_shll_imm (self, info, code, inst);
-    case 58:
-      return aarch64_ext_limm (self, info, code, inst);
     case 59:
-      return aarch64_ext_aimm (self, info, code, inst);
+      return aarch64_ext_limm (self, info, code, inst);
     case 60:
-      return aarch64_ext_imm_half (self, info, code, inst);
+      return aarch64_ext_aimm (self, info, code, inst);
     case 61:
+      return aarch64_ext_imm_half (self, info, code, inst);
+    case 62:
       return aarch64_ext_fbits (self, info, code, inst);
-    case 63:
+    case 64:
+    case 65:
       return aarch64_ext_cond (self, info, code, inst);
-    case 69:
-    case 75:
-      return aarch64_ext_addr_simple (self, info, code, inst);
-    case 70:
-      return aarch64_ext_addr_regoff (self, info, code, inst);
     case 71:
+    case 77:
+      return aarch64_ext_addr_simple (self, info, code, inst);
     case 72:
+      return aarch64_ext_addr_regoff (self, info, code, inst);
     case 73:
-      return aarch64_ext_addr_simm (self, info, code, inst);
     case 74:
-      return aarch64_ext_addr_uimm12 (self, info, code, inst);
+    case 75:
+      return aarch64_ext_addr_simm (self, info, code, inst);
     case 76:
-      return aarch64_ext_simd_addr_post (self, info, code, inst);
-    case 77:
-      return aarch64_ext_sysreg (self, info, code, inst);
+      return aarch64_ext_addr_uimm12 (self, info, code, inst);
     case 78:
-      return aarch64_ext_pstatefield (self, info, code, inst);
+      return aarch64_ext_simd_addr_post (self, info, code, inst);
     case 79:
+      return aarch64_ext_sysreg (self, info, code, inst);
     case 80:
+      return aarch64_ext_pstatefield (self, info, code, inst);
     case 81:
     case 82:
-      return aarch64_ext_sysins_op (self, info, code, inst);
     case 83:
     case 84:
-      return aarch64_ext_barrier (self, info, code, inst);
+      return aarch64_ext_sysins_op (self, info, code, inst);
     case 85:
+    case 86:
+      return aarch64_ext_barrier (self, info, code, inst);
+    case 87:
       return aarch64_ext_prfop (self, info, code, inst);
     default: assert (0); abort ();
     }